2
0

pcs2db.php 18 KB

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