pcs2db.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. <?php
  2. /*
  3. 转换pcs 到数据库格式
  4. */
  5. require_once "../path.php";
  6. require_once "../public/_pdo.php";
  7. require_once "../public/function.php";
  8. require_once '../studio/index_head.php';
  9. echo '<body id="file_list_body" >';
  10. echo '<div class="index_inner" style=" margin-left: 18em;margin-top: 5em;">';
  11. echo "<h2>转换PCS 到数据库格式</h2>";
  12. if($_COOKIE["uid"]){
  13. $uid=$_COOKIE["uid"];
  14. }
  15. else{
  16. echo "尚未登录";
  17. echo "<h3><a href='../ucenter/index.php?op=login'>登录</a>后才可以打开文档 </h3>";
  18. exit;
  19. }
  20. if(isset($_GET["doc_id"])==false){
  21. echo "没有 文档编号";
  22. exit;
  23. }
  24. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  25. $doc_id=$_GET["doc_id"];
  26. $query = "SELECT * from fileindex where id= ? ";
  27. $Fetch = PDO_FetchAll($query,array($doc_id));
  28. $iFetch=count($Fetch);
  29. if($iFetch>0){
  30. //文档信息
  31. $mbook=$Fetch[0]["book"];
  32. $paragraph=$Fetch[0]["paragraph"];
  33. }
  34. if(isset($_GET["channel"])==false){
  35. echo '<div class="file_list_block">';
  36. echo "<h2>选择一个空白的版风存储新的文档</h2>";
  37. echo "<form action='pcs2db.php' method='get'>";
  38. echo "<input type='hidden' name='doc_id' value='{$_GET["doc_id"]}' />";
  39. PDO_Connect("sqlite:"._FILE_DB_CHANNAL_);
  40. $query = "SELECT * from channal where owner = '{$_COOKIE["userid"]}' limit 0,100";
  41. $Fetch = PDO_FetchAll($query);
  42. $i=0;
  43. foreach($Fetch as $row){
  44. echo '<div class="file_list_row" style="padding:5px;display:flex;">';
  45. echo '<div class="pd-10" style="max-width:2em;flex:1;">';
  46. echo '<input name="channel" value="'.$row["id"].'" ';
  47. if($i==0){
  48. echo "checked";
  49. }
  50. echo ' type="radio" />';
  51. echo '</div>';
  52. echo '<div class="title" style="flex:3;padding-bottom:5px;">'.$row["name"].'</div>';
  53. echo '<div class="title" style="flex:3;padding-bottom:5px;">'.$row["lang"].'</div>';
  54. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  55. PDO_Connect("sqlite:"._FILE_DB_USER_WBW_);
  56. $query = "select count(*) from wbw_block where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100";
  57. $FetchWBW = PDO_FetchOne($query);
  58. echo '</div>';
  59. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  60. if($FetchWBW==0){
  61. echo $_local->gui->blank;
  62. }
  63. else{
  64. echo $FetchWBW.$_local->gui->para;
  65. echo "<a href='../studio/editor.php?op=openchannal&book=$book&para={$paraList}&channal={$row["id"]}'>open</a>";
  66. }
  67. echo '</div>';
  68. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  69. PDO_Connect("sqlite:"._FILE_DB_SENTENCE_);
  70. $query = "select count(*) from sentence where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100";
  71. $FetchWBW = PDO_FetchOne($query);
  72. echo '</div>';
  73. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  74. if($FetchWBW==0){
  75. echo $_local->gui->blank;
  76. }
  77. else{
  78. echo $FetchWBW.$_local->gui->para;
  79. }
  80. echo '</div>';
  81. echo '<div class="summary" style="flex:1;padding-bottom:5px;">'.$row["status"].'</div>';
  82. echo '<div class="author" style="flex:1;padding-bottom:5px;">'.$row["create_time"].'</div>';
  83. echo '</div>';
  84. $i++;
  85. }
  86. echo "<input type='submit' />";
  87. echo "</form>";
  88. echo "</div>";
  89. exit;
  90. }
  91. $dir = _DIR_USER_DOC_.'/'.$_COOKIE["userid"]._DIR_MYDOCUMENT_;
  92. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  93. $query = "SELECT file_name, doc_info, modify_time from fileindex where id=? ";
  94. $Fetch = PDO_FetchRow($query,array($_GET["doc_id"]));
  95. if($Fetch===false){
  96. echo "文件不存在";
  97. exit;
  98. }
  99. else{
  100. $file_modify_time = $Fetch["modify_time"];
  101. if(empty($Fetch["doc_info"])){
  102. $file = $dir.'/'.$Fetch["file_name"];
  103. }
  104. else{
  105. echo "已经是数据库格式了。无需转换";
  106. exit;
  107. }
  108. }
  109. if(!file_exists($file)){
  110. echo "文件不存在";
  111. exit;
  112. }
  113. $xml = simplexml_load_file($file);
  114. if($xml==false){
  115. echo "载入pcs文件错误";
  116. exit;
  117. }
  118. $xml_head = $xml->xpath('//head')[0];
  119. $strHead = "<head>";
  120. $strHead .= "<type>{$xml_head->type}</type>";
  121. $strHead .= "<mode>{$xml_head->mode}</mode>";
  122. $strHead .= "<ver>{$xml_head->ver}</ver>";
  123. $strHead .= "<toc>{$xml_head->toc}</toc>";
  124. $strHead .= "<style>{$xml_head->style}</style>";
  125. $strHead .= "<doc_title>{$xml_head->doc_title}</doc_title>";
  126. $strHead .= "<tag>{$xml_head->tag}</tag>";
  127. $strHead .= "<book>{$xml_head->book}</book>";
  128. $strHead .= "<paragraph>{$xml_head->paragraph}</paragraph>";
  129. $strHead .= "</head>";
  130. $dataBlock = $xml->xpath('//block');
  131. {
  132. //复制数据
  133. //打开逐词解析数据库
  134. $dns = "sqlite:"._FILE_DB_USER_WBW_;
  135. $dbhWBW = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  136. $dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  137. //打开译文数据库
  138. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  139. $dbhSent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  140. $dbhSent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  141. //逐词解析新数据数组
  142. $arrNewBlock = array();
  143. $arrNewBlockData = array();
  144. $arrBlockTransform = array();
  145. //译文新数据数组
  146. $arrSentNewBlock = array();
  147. $arrSentNewBlockData = array();
  148. $arrSentBlockTransform = array();
  149. $newDocBlockList=array();
  150. foreach($dataBlock as $block){
  151. switch($block->info->type){
  152. case "translate":
  153. echo "wbw:".$block->info->book."<br>";
  154. break;
  155. case "wbw":
  156. echo "translate:".$block->info->book."<br>";
  157. break;
  158. }
  159. }
  160. foreach($dataBlock as $block) {
  161. switch($block->info->type){
  162. case 1:
  163. break;
  164. case "translate":
  165. //译文
  166. $blockid = UUID::V4();
  167. //译文不加入块列表 因为译文用channel解决 不需要渲染译文块
  168. //$newDocBlockList[]=array('type' => 2,'block_id' => $blockid);
  169. $arrSentBlockTransform["{$blockid}"] = $blockid;
  170. //if(count($fBlock)>0)
  171. {
  172. array_push( $arrSentNewBlock,array($blockid,
  173. "",
  174. $block->info->book,
  175. $block->info->paragraph,
  176. $_COOKIE["userid"],
  177. $block->info->language,
  178. $block->info->author,
  179. "",
  180. "",
  181. "1",
  182. $file_modify_time,
  183. mTime()
  184. ));
  185. }
  186. foreach($block->data->children() as $sen){
  187. if(isset($sen->begin)){
  188. $sent_begin=$sen->begin;
  189. }
  190. else{
  191. $sent_begin="";
  192. }
  193. if(isset($sen->end)){
  194. $sent_end=$sen->end;
  195. }
  196. else{
  197. $sent_end="";
  198. }
  199. if(isset($sen->text) && strlen(trim($sen->text))>0){
  200. $paraText=$sen->text;
  201. if( $block->info->level>0 && $block->info->level<8){
  202. $toc.=$sen->text;
  203. }
  204. array_push( $arrSentNewBlockData,
  205. array(UUID::V4(),
  206. $blockid,
  207. $block->info->book,
  208. $block->info->paragraph,
  209. $sent_begin,
  210. $sent_end,
  211. "",
  212. $block->info->author,
  213. $_COOKIE["userid"],
  214. $paraText,
  215. mb_strlen($paraText,"UTF-8"),
  216. $block->info->language,
  217. "1",
  218. "7",
  219. $file_modify_time,
  220. mTime(),
  221. mTime(),
  222. $_GET["channel"]
  223. ));
  224. }
  225. }
  226. break;
  227. case "wbw":
  228. $blockid = UUID::V4();
  229. $newDocBlockList[]=array('type' => 6,'block_id' => $blockid);
  230. $arrBlockTransform["{$blockid}"] = $blockid;
  231. {
  232. array_push( $arrNewBlock,
  233. array($blockid,
  234. "",
  235. $_GET["channel"],
  236. $_COOKIE["userid"],
  237. $block->info->book,
  238. $block->info->paragraph,
  239. "",
  240. $block->info->language,
  241. "",
  242. $file_modify_time,
  243. mTime()
  244. ));
  245. }
  246. $currWordId = "";
  247. $currWordReal = "";
  248. $currWordStatus = "";
  249. $sWordData = "";
  250. $iWordCount = 0;
  251. foreach($block->data->children() as $word){
  252. $word_id = explode("-",$word->id)[2];
  253. $arrWordId = explode("_",$word_id);
  254. $realWordId = $arrWordId[0];
  255. if($realWordId != $currWordId){
  256. if($iWordCount>0){
  257. array_push( $arrNewBlockData,array(UUID::V4(),
  258. $blockid,
  259. $block->info->book,
  260. $block->info->paragraph,
  261. $currWordId,
  262. $currWordReal,
  263. $sWordData,
  264. $file_modify_time,
  265. mTime(),
  266. $currWordStatus,
  267. $_COOKIE["userid"]
  268. ));
  269. $sWordData = "";
  270. }
  271. $currWordId = $realWordId;
  272. $currWordReal = $word->real;
  273. $currWordStatus = $word->status;
  274. }
  275. $sWordData .= "<word>";
  276. $sWordData .= "<pali>{$word->pali}</pali>";
  277. $sWordData .= "<real>{$word->real}</real>";
  278. $sWordData .= "<id>{$word->id}</id>";
  279. $sWordData .= "<type status='0'>{$word->type}</type>";
  280. $sWordData .= "<gramma status='0'>{$word->gramma}</gramma>";
  281. $sWordData .= "<mean status='0'>{$word->mean}</mean>";
  282. $sWordData .= "<org status='0'>{$word->org}</org>";
  283. $sWordData .= "<om status='0'>{$word->om}</om>";
  284. $sWordData .= "<case status='0'>{$word->case}</case>";
  285. $sWordData .= "<note status='0'>{$word->note}</note>";
  286. $sWordData .= "<style>{$word->style}</style>";
  287. $sWordData .= "<status>{$word->status}</status>";
  288. $sWordData .= "<parent>{$word->parent}</parent>";
  289. if(isset($word->bmc)){
  290. $sWordData .= "<bmc>{$word->bmc}</bmc>";
  291. }
  292. if(isset($word->bmt)){
  293. $sWordData .= "<bmt>{$word->bmt}</bmt>";
  294. }
  295. if(isset($word->un)){
  296. $sWordData .= "<un>{$word->un}</un>";
  297. }
  298. if(isset($word->lock)){
  299. $sWordData .= "<lock>{$word->lock}</lock>";
  300. }
  301. $sWordData .= "</word>";
  302. $iWordCount++;
  303. }
  304. array_push( $arrNewBlockData,
  305. array(UUID::V4(),
  306. $blockid,
  307. $block->info->book,
  308. $block->info->paragraph,
  309. $word_id,
  310. $word->real,
  311. $sWordData,
  312. $file_modify_time,
  313. mTime(),
  314. $word->status,
  315. $_COOKIE["userid"]
  316. ));
  317. break;
  318. case 2:
  319. break;
  320. }
  321. }
  322. //逐词解析block数据块结束
  323. #插入逐词解析块数据
  324. if(count($arrNewBlock)>0){
  325. $dbhWBW->beginTransaction();
  326. $query="INSERT INTO wbw_block (
  327. 'id',
  328. 'parent_id',
  329. 'channal',
  330. 'owner',
  331. 'book',
  332. 'paragraph',
  333. 'style',
  334. 'lang',
  335. 'status',
  336. 'modify_time',
  337. 'receive_time'
  338. )
  339. VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  340. $stmtNewBlock = $dbhWBW->prepare($query);
  341. foreach($arrNewBlock as $oneParam){
  342. $stmtNewBlock->execute($oneParam);
  343. }
  344. // 提交更改
  345. $dbhWBW->commit();
  346. if (!$stmtNewBlock || ($stmtNewBlock && $stmtNewBlock->errorCode() != 0)) {
  347. $error = $dbhWBW->errorInfo();
  348. echo "error - $error[2] <br>";
  349. }
  350. else{
  351. //逐词解析block块复刻成功
  352. $count=count($arrNewBlock);
  353. echo "wbw block $count recorders.<br/>";
  354. }
  355. }
  356. if(count($arrNewBlockData)>0){
  357. // 开始一个事务,逐词解析数据 关闭自动提交
  358. $dbhWBW->beginTransaction();
  359. $query="INSERT INTO wbw ('id','block_id','book','paragraph','wid','word','data','modify_time','receive_time','status','owner') VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  360. $stmtWbwData = $dbhWBW->prepare($query);
  361. foreach($arrNewBlockData as $oneParam){
  362. $stmtWbwData->execute($oneParam);
  363. }
  364. // 提交更改
  365. $dbhWBW->commit();
  366. if (!$stmtWbwData || ($stmtWbwData && $stmtWbwData->errorCode() != 0)) {
  367. $error = $dbhWBW->errorInfo();
  368. echo "error - $error[2] <br>";
  369. }
  370. else{
  371. //逐词解析 数据 复刻成功
  372. $count=count($arrNewBlockData);
  373. echo "new wbw $count recorders.";
  374. }
  375. }
  376. //译文 block数据块
  377. if(count($arrSentNewBlock)>0){
  378. $dbhSent->beginTransaction();
  379. $query="INSERT INTO sent_block ('id','parent_id','book','paragraph','owner','lang','author','editor','tag','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
  380. $stmtSentNewBlock = $dbhSent->prepare($query);
  381. foreach($arrSentNewBlock as $oneParam){
  382. //print_r($oneParam);
  383. $stmtSentNewBlock->execute($oneParam);
  384. }
  385. // 提交更改
  386. $dbhSent->commit();
  387. if (!$stmtSentNewBlock || ($stmtSentNewBlock && $stmtSentNewBlock->errorCode() != 0)){
  388. $error = $dbhSent->errorInfo();
  389. echo "error - $error[2] <br>";
  390. }
  391. else{
  392. //译文 block块复刻成功
  393. $count=count($arrNewBlock);
  394. echo "wbw block $count recorders.<br/>";
  395. }
  396. }
  397. if(count($arrSentNewBlockData)>0){
  398. // 开始一个事务,逐词解析数据 关闭自动提交
  399. $dbhSent->beginTransaction();
  400. $query="INSERT INTO sentence ('id','block_id','book','paragraph','begin','end','tag','author','editor','text','strlen','language','ver','status','modify_time','receive_time','create_time','channal') VALUES (? , ? , ? , ? , ? ,?, ? , ? , ? , ? , ? , ? , ? , ? , ?, ? , ? ,?)";
  401. $stmtSentData = $dbhSent->prepare($query);
  402. foreach($arrSentNewBlockData as $oneParam){
  403. $stmtSentData->execute($oneParam);
  404. }
  405. // 提交更改
  406. $dbhSent->commit();
  407. if (!$stmtSentData || ($stmtSentData && $stmtSentData->errorCode() != 0)) {
  408. $error = $dbhSent->errorInfo();
  409. echo "error - $error[2] <br>";
  410. }
  411. else{
  412. //译文 数据 复刻成功
  413. $count=count($arrSentNewBlockData);
  414. echo "new translation $count recorders.";
  415. }
  416. }
  417. //插入记录到文件索引
  418. $filesize=0;
  419. //服务器端文件列表
  420. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  421. $query="INSERT INTO fileindex ('id',
  422. 'parent_id',
  423. 'user_id',
  424. 'book',
  425. 'paragraph',
  426. 'file_name',
  427. 'title',
  428. 'tag',
  429. 'status',
  430. 'create_time',
  431. 'modify_time',
  432. 'accese_time',
  433. 'file_size',
  434. 'share',
  435. 'doc_info',
  436. 'doc_block',
  437. 'receive_time'
  438. )
  439. VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  440. $stmt = $PDO->prepare($query);
  441. $query="UPDATE 'fileindex' SET 'doc_info' = ? , 'doc_block' = ? WHERE id = ? ";
  442. $stmt = $PDO->prepare($query);
  443. $newData=array(
  444. $strHead,
  445. json_encode($newDocBlockList, JSON_UNESCAPED_UNICODE),
  446. $_GET["doc_id"]
  447. );
  448. $stmt->execute($newData);
  449. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  450. $error = PDO_ErrorInfo();
  451. echo "error - $error[2] <br>";
  452. }
  453. else{
  454. //文档列表插入成功
  455. echo "doc list updata 1 recorders.";
  456. echo "<a href='../studio/editor.php?op=opendb&doc_id={$_GET["doc_id"]}'>在编辑器中打开</a>";
  457. }
  458. }
  459. ?>
  460. </div>
  461. </body>
  462. </html>