'; echo '
'; echo "

转换PCS 到数据库格式

"; if($_COOKIE["uid"]){ $uid=$_COOKIE["uid"]; } else{ echo "尚未登录"; echo "

登录后才可以打开文档

"; exit; } if(isset($_GET["doc_id"])==false){ echo "没有 文档编号"; exit; } PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_); $doc_id=$_GET["doc_id"]; $query = "SELECT * from fileindex where id= ? "; $Fetch = PDO_FetchAll($query,array($doc_id)); $iFetch=count($Fetch); if($iFetch>0){ //文档信息 $mbook=$Fetch[0]["book"]; $paragraph=$Fetch[0]["paragraph"]; } if(isset($_GET["channel"])==false){ echo '
'; echo "

选择一个空白的版风存储新的文档

"; echo "
"; echo ""; PDO_Connect("sqlite:"._FILE_DB_CHANNAL_); $query = "SELECT * from channal where owner = '{$_COOKIE["userid"]}' limit 0,100"; $Fetch = PDO_FetchAll($query); $i=0; foreach($Fetch as $row){ echo '
'; echo '
'; echo ''; echo '
'; echo '
'.$row["name"].'
'; echo '
'.$row["lang"].'
'; echo '
'; PDO_Connect("sqlite:"._FILE_DB_USER_WBW_); $query = "select count(*) from wbw_block where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100"; $FetchWBW = PDO_FetchOne($query); echo '
'; echo '
'; if($FetchWBW==0){ echo $_local->gui->blank; } else{ echo $FetchWBW.$_local->gui->para; echo "open"; } echo '
'; echo '
'; PDO_Connect("sqlite:"._FILE_DB_SENTENCE_); $query = "select count(*) from sentence where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100"; $FetchWBW = PDO_FetchOne($query); echo '
'; echo '
'; if($FetchWBW==0){ echo $_local->gui->blank; } else{ echo $FetchWBW.$_local->gui->para; } echo '
'; echo '
'.$row["status"].'
'; echo '
'.$row["create_time"].'
'; echo '
'; $i++; } echo ""; echo "
"; echo "
"; exit; } $dir = _DIR_USER_DOC_.'/'.$_COOKIE["userid"]._DIR_MYDOCUMENT_; PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_); $query = "SELECT file_name, doc_info, modify_time from fileindex where id=? "; $Fetch = PDO_FetchRow($query,array($_GET["doc_id"])); if($Fetch===false){ echo "文件不存在"; exit; } else{ $file_modify_time = $Fetch["modify_time"]; if(empty($Fetch["doc_info"])){ $file = $dir.'/'.$Fetch["file_name"]; } else{ echo "已经是数据库格式了。无需转换"; exit; } } if(!file_exists($file)){ echo "文件不存在"; exit; } $xml = simplexml_load_file($file); if($xml==false){ echo "载入pcs文件错误"; exit; } $xml_head = $xml->xpath('//head')[0]; $strHead = ""; $strHead .= "{$xml_head->type}"; $strHead .= "{$xml_head->mode}"; $strHead .= "{$xml_head->ver}"; $strHead .= "{$xml_head->toc}"; $strHead .= ""; $strHead .= "{$xml_head->doc_title}"; $strHead .= "{$xml_head->tag}"; $strHead .= "{$xml_head->book}"; $strHead .= "{$xml_head->paragraph}"; $strHead .= ""; $dataBlock = $xml->xpath('//block'); { //复制数据 //打开逐词解析数据库 $dns = "sqlite:"._FILE_DB_USER_WBW_; $dbhWBW = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true)); $dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //打开译文数据库 $dns = "sqlite:"._FILE_DB_SENTENCE_; $dbhSent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true)); $dbhSent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); //逐词解析新数据数组 $arrNewBlock = array(); $arrNewBlockData = array(); $arrBlockTransform = array(); //译文新数据数组 $arrSentNewBlock = array(); $arrSentNewBlockData = array(); $arrSentBlockTransform = array(); $newDocBlockList=array(); foreach($dataBlock as $block){ switch($block->info->type){ case "translate": echo "wbw:".$block->info->book."
"; break; case "wbw": echo "translate:".$block->info->book."
"; break; } } foreach($dataBlock as $block) { switch($block->info->type){ case 1: break; case "translate": //译文 $blockid = UUID::V4(); //译文不加入块列表 因为译文用channel解决 不需要渲染译文块 //$newDocBlockList[]=array('type' => 2,'block_id' => $blockid); $arrSentBlockTransform["{$blockid}"] = $blockid; //if(count($fBlock)>0) { array_push( $arrSentNewBlock,array($blockid, "", $block->info->book, $block->info->paragraph, $_COOKIE["userid"], $block->info->language, $block->info->author, "", "", "1", $file_modify_time, mTime() )); } foreach($block->data->children() as $sen){ if(isset($sen->begin)){ $sent_begin=$sen->begin; } else{ $sent_begin=""; } if(isset($sen->end)){ $sent_end=$sen->end; } else{ $sent_end=""; } if(isset($sen->text) && strlen(trim($sen->text))>0){ $paraText=$sen->text; if( $block->info->level>0 && $block->info->level<8){ $toc.=$sen->text; } array_push( $arrSentNewBlockData, array(UUID::V4(), $blockid, $block->info->book, $block->info->paragraph, $sent_begin, $sent_end, "", $block->info->author, $_COOKIE["userid"], $paraText, mb_strlen($paraText,"UTF-8"), $block->info->language, "1", "7", $file_modify_time, mTime(), mTime(), $_GET["channel"] )); } } break; case "wbw": $blockid = UUID::V4(); $newDocBlockList[]=array('type' => 6,'block_id' => $blockid); $arrBlockTransform["{$blockid}"] = $blockid; { array_push( $arrNewBlock, array($blockid, "", $_GET["channel"], $_COOKIE["userid"], $block->info->book, $block->info->paragraph, "", $block->info->language, "", $file_modify_time, mTime() )); } $currWordId = ""; $currWordReal = ""; $currWordStatus = ""; $sWordData = ""; $iWordCount = 0; foreach($block->data->children() as $word){ $word_id = explode("-",$word->id)[2]; $arrWordId = explode("_",$word_id); $realWordId = $arrWordId[0]; if($realWordId != $currWordId){ if($iWordCount>0){ array_push( $arrNewBlockData,array(UUID::V4(), $blockid, $block->info->book, $block->info->paragraph, $currWordId, $currWordReal, $sWordData, $file_modify_time, mTime(), $currWordStatus, $_COOKIE["userid"] )); $sWordData = ""; } $currWordId = $realWordId; $currWordReal = $word->real; $currWordStatus = $word->status; } $sWordData .= ""; $sWordData .= "{$word->pali}"; $sWordData .= "{$word->real}"; $sWordData .= "{$word->id}"; $sWordData .= "{$word->type}"; $sWordData .= "{$word->gramma}"; $sWordData .= "{$word->mean}"; $sWordData .= "{$word->org}"; $sWordData .= "{$word->om}"; $sWordData .= "{$word->case}"; $sWordData .= "{$word->note}"; $sWordData .= ""; $sWordData .= "{$word->status}"; $sWordData .= "{$word->parent}"; if(isset($word->bmc)){ $sWordData .= "{$word->bmc}"; } if(isset($word->bmt)){ $sWordData .= "{$word->bmt}"; } if(isset($word->un)){ $sWordData .= "{$word->un}"; } if(isset($word->lock)){ $sWordData .= "{$word->lock}"; } $sWordData .= ""; $iWordCount++; } array_push( $arrNewBlockData, array(UUID::V4(), $blockid, $block->info->book, $block->info->paragraph, $word_id, $word->real, $sWordData, $file_modify_time, mTime(), $word->status, $_COOKIE["userid"] )); break; case 2: break; } } //逐词解析block数据块结束 #插入逐词解析块数据 if(count($arrNewBlock)>0){ $dbhWBW->beginTransaction(); $query="INSERT INTO wbw_block ( 'id', 'parent_id', 'channal', 'owner', 'book', 'paragraph', 'style', 'lang', 'status', 'modify_time', 'receive_time' ) VALUES (?,?,?,?,?,?,?,?,?,?,?)"; $stmtNewBlock = $dbhWBW->prepare($query); foreach($arrNewBlock as $oneParam){ $stmtNewBlock->execute($oneParam); } // 提交更改 $dbhWBW->commit(); if (!$stmtNewBlock || ($stmtNewBlock && $stmtNewBlock->errorCode() != 0)) { $error = $dbhWBW->errorInfo(); echo "error - $error[2]
"; } else{ //逐词解析block块复刻成功 $count=count($arrNewBlock); echo "wbw block $count recorders.
"; } } if(count($arrNewBlockData)>0){ // 开始一个事务,逐词解析数据 关闭自动提交 $dbhWBW->beginTransaction(); $query="INSERT INTO wbw ('id','block_id','book','paragraph','wid','word','data','modify_time','receive_time','status','owner') VALUES (?,?,?,?,?,?,?,?,?,?,?)"; $stmtWbwData = $dbhWBW->prepare($query); foreach($arrNewBlockData as $oneParam){ $stmtWbwData->execute($oneParam); } // 提交更改 $dbhWBW->commit(); if (!$stmtWbwData || ($stmtWbwData && $stmtWbwData->errorCode() != 0)) { $error = $dbhWBW->errorInfo(); echo "error - $error[2]
"; } else{ //逐词解析 数据 复刻成功 $count=count($arrNewBlockData); echo "new wbw $count recorders."; } } //译文 block数据块 if(count($arrSentNewBlock)>0){ $dbhSent->beginTransaction(); $query="INSERT INTO sent_block ('id','parent_id','book','paragraph','owner','lang','author','editor','tag','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)"; $stmtSentNewBlock = $dbhSent->prepare($query); foreach($arrSentNewBlock as $oneParam){ //print_r($oneParam); $stmtSentNewBlock->execute($oneParam); } // 提交更改 $dbhSent->commit(); if (!$stmtSentNewBlock || ($stmtSentNewBlock && $stmtSentNewBlock->errorCode() != 0)){ $error = $dbhSent->errorInfo(); echo "error - $error[2]
"; } else{ //译文 block块复刻成功 $count=count($arrNewBlock); echo "wbw block $count recorders.
"; } } if(count($arrSentNewBlockData)>0){ // 开始一个事务,逐词解析数据 关闭自动提交 $dbhSent->beginTransaction(); $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 (? , ? , ? , ? , ? ,?, ? , ? , ? , ? , ? , ? , ? , ? , ?, ? , ? ,?)"; $stmtSentData = $dbhSent->prepare($query); foreach($arrSentNewBlockData as $oneParam){ $stmtSentData->execute($oneParam); } // 提交更改 $dbhSent->commit(); if (!$stmtSentData || ($stmtSentData && $stmtSentData->errorCode() != 0)) { $error = $dbhSent->errorInfo(); echo "error - $error[2]
"; } else{ //译文 数据 复刻成功 $count=count($arrSentNewBlockData); echo "new translation $count recorders."; } } //插入记录到文件索引 $filesize=0; //服务器端文件列表 PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_); $query="INSERT INTO fileindex ('id', 'parent_id', 'user_id', 'book', 'paragraph', 'file_name', 'title', 'tag', 'status', 'create_time', 'modify_time', 'accese_time', 'file_size', 'share', 'doc_info', 'doc_block', 'receive_time' ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; $stmt = $PDO->prepare($query); $query="UPDATE 'fileindex' SET 'doc_info' = ? , 'doc_block' = ? WHERE id = ? "; $stmt = $PDO->prepare($query); $newData=array( $strHead, json_encode($newDocBlockList, JSON_UNESCAPED_UNICODE), $_GET["doc_id"] ); $stmt->execute($newData); if (!$stmt || ($stmt && $stmt->errorCode() != 0)) { $error = PDO_ErrorInfo(); echo "error - $error[2]
"; } else{ //文档列表插入成功 echo "doc list updata 1 recorders."; echo "在编辑器中打开"; } } ?>