pcs2db.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <?php
  2. /*
  3. 转换pcs 到数据库格式
  4. */
  5. require_once "../path.php";
  6. require_once "../public/_pdo.php";
  7. require_once "../public/function.php";
  8. echo "<h2>转换pcs 到数据库格式</h2>";
  9. $dir = _DIR_USER_BASE_.'/'.$_COOKIE["userid"]._DIR_MYDOCUMENT_;
  10. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  11. $query = "select file_name, doc_info, modify_time from fileindex where id='".$_GET["doc_id"]."' ";
  12. $Fetch = PDO_FetchAll($query);
  13. if(count($Fetch)>0){
  14. $file_modify_time = $Fetch[0]["modify_time"];
  15. if(empty($Fetch[0]["doc_info"])){
  16. $file = $dir.'/'.$Fetch[0]["file_name"];
  17. }
  18. else{
  19. echo "已经是数据库格式了。无需转换";
  20. }
  21. }
  22. else{
  23. echo "文件不存在";
  24. exit;
  25. }
  26. $xml = simplexml_load_file($file);
  27. $xml_head = $xml->xpath('//head')[0];
  28. $strHead = "<head>";
  29. $strHead .= "<type>{$xml_head->type}</type>";
  30. $strHead .= "<mode>{$xml_head->mode}</mode>";
  31. $strHead .= "<ver>{$xml_head->ver}</ver>";
  32. $strHead .= "<toc>{$xml_head->toc}</toc>";
  33. $strHead .= "<style>{$xml_head->style}</style>";
  34. $strHead .= "<doc_title>{$xml_head->doc_title}</doc_title>";
  35. $strHead .= "<tag>{$xml_head->tag}</tag>";
  36. $strHead .= "<book>{$xml_head->book}</book>";
  37. $strHead .= "<paragraph>{$xml_head->paragraph}</paragraph>";
  38. $strHead .= "</head>";
  39. $dataBlock = $xml->xpath('//block');
  40. {
  41. //复制数据
  42. //打开逐词解析数据库
  43. $dns = "sqlite:"._FILE_DB_USER_WBW_;
  44. $dbhWBW = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  45. $dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  46. //打开译文数据库
  47. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  48. $dbhSent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  49. $dbhSent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  50. //逐词解析新数据数组
  51. $arrNewBlock = array();
  52. $arrNewBlockData = array();
  53. $arrBlockTransform = array();
  54. //译文新数据数组
  55. $arrSentNewBlock = array();
  56. $arrSentNewBlockData = array();
  57. $arrSentBlockTransform = array();
  58. $newDocBlockList=array();
  59. foreach($dataBlock as $block){
  60. switch($block->info->type){
  61. case "translate":
  62. echo "wbw:".$block->info->book."<br>";
  63. break;
  64. case "wbw":
  65. echo "translate:".$block->info->book."<br>";
  66. break;
  67. }
  68. }
  69. foreach($dataBlock as $block) {
  70. switch($block->info->type){
  71. case 1:
  72. break;
  73. case "translate":
  74. //译文
  75. $blockid = sprintf("%s",$block->info->id);
  76. $newDocBlockList[]=array('type' => 2,'block_id' => $blockid);
  77. $arrSentBlockTransform["{$blockid}"] = $blockid;
  78. //if(count($fBlock)>0)
  79. {
  80. array_push( $arrSentNewBlock,array($blockid,
  81. "",
  82. $block->info->book,
  83. $block->info->paragraph,
  84. $_COOKIE["userid"],
  85. $block->info->language,
  86. $block->info->author,
  87. "",
  88. "",
  89. "1",
  90. $file_modify_time,
  91. mTime()
  92. ));
  93. }
  94. foreach($block->data->children() as $sen){
  95. if(isset($sen->begin)){
  96. $sent_begin=$sen->begin;
  97. }
  98. else{
  99. $sent_begin="";
  100. }
  101. if(isset($sen->end)){
  102. $sent_end=$sen->end;
  103. }
  104. else{
  105. $sent_end="";
  106. }
  107. if(isset($sen->text)){
  108. $paraText=$sen->text;
  109. if( $block->info->level>0 && $block->info->level<8){
  110. $toc.=$sen->text;
  111. }
  112. }
  113. array_push( $arrSentNewBlockData,array(UUID::V4(),
  114. $blockid,
  115. $block->info->book,
  116. $block->info->paragraph,
  117. $sent_begin,
  118. $sent_end,
  119. "",
  120. $block->info->author,
  121. $_COOKIE["userid"],
  122. $paraText,
  123. $block->info->language,
  124. "1",
  125. "7",
  126. $file_modify_time,
  127. mTime()
  128. ));
  129. }
  130. break;
  131. case "wbw":
  132. $blockid = sprintf("%s",$block->info->id);
  133. $newDocBlockList[]=array('type' => 6,'block_id' => $blockid);
  134. $arrBlockTransform["{$blockid}"] = $blockid;
  135. {
  136. array_push( $arrNewBlock,array($blockid,
  137. "",
  138. $_COOKIE["userid"],
  139. $block->info->book,
  140. $block->info->paragraph,
  141. "",
  142. $block->info->language,
  143. "",
  144. $file_modify_time,
  145. mTime()
  146. ));
  147. }
  148. $currWordId = "";
  149. $currWordReal = "";
  150. $currWordStatus = "";
  151. $sWordData = "";
  152. $iWordCount = 0;
  153. foreach($block->data->children() as $word){
  154. $word_id = explode("-",$word->id)[2];
  155. $arrWordId = explode("_",$word_id);
  156. $realWordId = $arrWordId[0];
  157. if($realWordId != $currWordId){
  158. if($iWordCount>0){
  159. array_push( $arrNewBlockData,array(UUID::V4(),
  160. $blockid,
  161. $block->info->book,
  162. $block->info->paragraph,
  163. $currWordId,
  164. $currWordReal,
  165. $sWordData,
  166. $file_modify_time,
  167. mTime(),
  168. $currWordStatus,
  169. $_COOKIE["userid"]
  170. ));
  171. $sWordData = "";
  172. }
  173. $currWordId = $realWordId;
  174. $currWordReal = $word->real;
  175. $currWordStatus = $word->status;
  176. }
  177. $sWordData .= "<word>";
  178. $sWordData .= "<pali>{$word->pali}</pali>";
  179. $sWordData .= "<real>{$word->real}</real>";
  180. $sWordData .= "<id>{$word->id}</id>";
  181. $sWordData .= "<type status=\"0\">{$word->type}</type>";
  182. $sWordData .= "<gramma status=\"0\">{$word->gramma}</gramma>";
  183. $sWordData .= "<mean status=\"0\">{$word->mean}</mean>";
  184. $sWordData .= "<org status=\"0\">{$word->org}</org>";
  185. $sWordData .= "<om status=\"0\">{$word->om}</om>";
  186. $sWordData .= "<case status=\"0\">{$word->case}</case>";
  187. $sWordData .= "<note status=\"0\">{$word->note}</note>";
  188. $sWordData .= "<style>{$word->style}</style>";
  189. $sWordData .= "<status>{$word->status}</status>";
  190. $sWordData .= "<parent>{$word->parent}</parent>";
  191. if(isset($word->bmc)){
  192. $sWordData .= "<bmc>{$word->bmc}</bmc>";
  193. }
  194. if(isset($word->bmt)){
  195. $sWordData .= "<bmt>{$word->bmt}</bmt>";
  196. }
  197. if(isset($word->un)){
  198. $sWordData .= "<un>{$word->un}</un>";
  199. }
  200. if(isset($word->lock)){
  201. $sWordData .= "<lock>{$word->lock}</lock>";
  202. }
  203. $sWordData .= "</word>";
  204. $iWordCount++;
  205. }
  206. array_push( $arrNewBlockData,array(UUID::V4(),
  207. $blockid,
  208. $block->info->book,
  209. $block->info->paragraph,
  210. $word_id,
  211. $word->real,
  212. $sWordData,
  213. $file_modify_time,
  214. mTime(),
  215. $word->status,
  216. $_COOKIE["userid"]
  217. ));
  218. break;
  219. case 2:
  220. break;
  221. }
  222. }
  223. //逐词解析block数据块
  224. if(count($arrNewBlock)>0){
  225. $dbhWBW->beginTransaction();
  226. $query="INSERT INTO wbw_block ('id','parent_id','owner','book','paragraph','style','lang','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?)";
  227. $stmtNewBlock = $dbhWBW->prepare($query);
  228. foreach($arrNewBlock as $oneParam){
  229. $stmtNewBlock->execute($oneParam);
  230. }
  231. // 提交更改
  232. $dbhWBW->commit();
  233. if (!$stmtNewBlock || ($stmtNewBlock && $stmtNewBlock->errorCode() != 0)) {
  234. $error = $dbhWBW->errorInfo();
  235. echo "error - $error[2] <br>";
  236. }
  237. else{
  238. //逐词解析block块复刻成功
  239. $count=count($arrNewBlock);
  240. echo "wbw block $count recorders.<br/>";
  241. }
  242. }
  243. if(count($arrNewBlockData)>0){
  244. // 开始一个事务,逐词解析数据 关闭自动提交
  245. $dbhWBW->beginTransaction();
  246. $query="INSERT INTO wbw ('id','block_id','book','paragraph','wid','word','data','modify_time','receive_time','status','owner') VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  247. $stmtWbwData = $dbhWBW->prepare($query);
  248. foreach($arrNewBlockData as $oneParam){
  249. $stmtWbwData->execute($oneParam);
  250. }
  251. // 提交更改
  252. $dbhWBW->commit();
  253. if (!$stmtWbwData || ($stmtWbwData && $stmtWbwData->errorCode() != 0)) {
  254. $error = $dbhWBW->errorInfo();
  255. echo "error - $error[2] <br>";
  256. }
  257. else{
  258. //逐词解析 数据 复刻成功
  259. $count=count($arrNewBlockData);
  260. echo "new wbw $count recorders.";
  261. }
  262. }
  263. //译文 block数据块
  264. if(count($arrSentNewBlock)>0){
  265. $dbhSent->beginTransaction();
  266. $query="INSERT INTO sent_block ('id','parent_id','book','paragraph','owner','lang','author','editor','tag','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
  267. $stmtSentNewBlock = $dbhSent->prepare($query);
  268. foreach($arrSentNewBlock as $oneParam){
  269. //print_r($oneParam);
  270. $stmtSentNewBlock->execute($oneParam);
  271. }
  272. // 提交更改
  273. $dbhSent->commit();
  274. if (!$stmtSentNewBlock || ($stmtSentNewBlock && $stmtSentNewBlock->errorCode() != 0)){
  275. $error = $dbhSent->errorInfo();
  276. echo "error - $error[2] <br>";
  277. }
  278. else{
  279. //译文 block块复刻成功
  280. $count=count($arrNewBlock);
  281. echo "wbw block $count recorders.<br/>";
  282. }
  283. }
  284. if(count($arrSentNewBlockData)>0){
  285. // 开始一个事务,逐词解析数据 关闭自动提交
  286. $dbhSent->beginTransaction();
  287. $query="INSERT INTO sentence ('id','block_id','book','paragraph','begin','end','tag','author','editor','text','language','ver','status','modify_time','receive_time') VALUES (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?, ?)";
  288. $stmtSentData = $dbhSent->prepare($query);
  289. foreach($arrSentNewBlockData as $oneParam){
  290. $stmtSentData->execute($oneParam);
  291. }
  292. // 提交更改
  293. $dbhSent->commit();
  294. if (!$stmtSentData || ($stmtSentData && $stmtSentData->errorCode() != 0)) {
  295. $error = $dbhSent->errorInfo();
  296. echo "error - $error[2] <br>";
  297. }
  298. else{
  299. //译文 数据 复刻成功
  300. $count=count($arrSentNewBlockData);
  301. echo "new translation $count recorders.";
  302. }
  303. }
  304. //插入记录到文件索引
  305. $filesize=0;
  306. //服务器端文件列表
  307. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  308. $query="INSERT INTO fileindex ('id',
  309. 'parent_id',
  310. 'user_id',
  311. 'book',
  312. 'paragraph',
  313. 'file_name',
  314. 'title',
  315. 'tag',
  316. 'status',
  317. 'create_time',
  318. 'modify_time',
  319. 'accese_time',
  320. 'file_size',
  321. 'share',
  322. 'doc_info',
  323. 'doc_block',
  324. 'receive_time'
  325. )
  326. VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  327. $stmt = $PDO->prepare($query);
  328. $query="UPDATE 'fileindex' SET 'doc_info' = ? , 'doc_block' = ? WHERE id = ? ";
  329. $stmt = $PDO->prepare($query);
  330. $newData=array(
  331. $strHead,
  332. json_encode($newDocBlockList, JSON_UNESCAPED_UNICODE),
  333. $_GET["doc_id"]
  334. );
  335. $stmt->execute($newData);
  336. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  337. $error = PDO_ErrorInfo();
  338. echo "error - $error[2] <br>";
  339. }
  340. else{
  341. //文档列表插入成功
  342. echo "doc list updata 1 recorders.";
  343. echo "<a href='../studio/editor.php?op=opendb&doc_id={$_GET["doc_id"]}'>在编辑器中打开</a>";
  344. }
  345. }
  346. ?>