';
echo "
转换PCS 到数据库格式
";
if ($_COOKIE["uid"]) {
$uid = $_COOKIE["uid"];
} else {
echo "尚未登录";
echo "
登录后才可以打开文档
";
exit;
}
if (isset($_GET["doc_id"]) == false) {
echo "没有 文档编号";
exit;
}
PDO_Connect(_FILE_DB_FILEINDEX_);
$doc_id = $_GET["doc_id"];
$query = "SELECT book,paragraph from "._TABLE_FILEINDEX_." where uid= ? ";
$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 "
";
exit;
}
$dir = _DIR_USER_DOC_ . '/' . $_COOKIE["userid"] . _DIR_MYDOCUMENT_;
PDO_Connect(_FILE_DB_FILEINDEX_);
$query = "SELECT file_name, doc_info, modify_time from "._TABLE_FILEINDEX_." where uid=? ";
$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;
}
}
echo "File Name:{$file}
";
if (!file_exists($file)) {
echo "文件不存在";
exit;
}
$xml = simplexml_load_file($file);
if ($xml == false) {
echo "载入pcs文件错误。文件名:{$file}";
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 = _FILE_DB_USER_WBW_;
$dbhWBW = new PDO($dns, _DB_USERNAME_, _DB_PASSWORD_, array(PDO::ATTR_PERSISTENT => true));
$dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
//打开译文数据库
$dns = _FILE_DB_SENTENCE_;
$dbhSent = new PDO($dns, _DB_USERNAME_, _DB_PASSWORD_, 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(),
$_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
));
}
$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,
$word->status,
$_COOKIE["userid"],
));
break;
case 2:
break;
}
}
//逐词解析block数据块结束
#插入逐词解析块数据
if (count($arrNewBlock) > 0) {
$dbhWBW->beginTransaction();
$query = "INSERT INTO "._TABLE_USER_WBW_BLOCK_." (
uid ,
parent_id ,
channel_uid ,
creator_uid ,
book_id ,
paragraph ,
style ,
lang ,
status ,
modify_time ,
updated_at
)
VALUES (?,?,?,?,?,?,?,?,?,?,now())";
$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 "._TABLE_USER_WBW_." ( uid , block_uid , book_id , paragraph , wid , word , data , modify_time , status , creator_uid ,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,now())";
$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 "._TABLE_SENTENCE_BLOCK_." (uid , parent_uid , book_id , paragraph , owner_uid , lang , author , editor_uid , status , modify_time , create_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 "._TABLE_SENTENCE_." ( uid , block_uid , book_id , paragraph , word_start , word_end , author , editor_uid , content , strlen , language , version , status , modify_time , create_time , channel_uid') 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( _FILE_DB_FILEINDEX_);
$query = "UPDATE "._TABLE_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 "
在编辑器中打开";
}
}
?>