';
if ($_COOKIE["uid"]) {
$uid = $_COOKIE["uid"];
} else {
echo "尚未登录";
echo "登录后才可以打开文档
";
exit;
}
if(isset($_GET["para"])){
$_para = json_decode($_GET["para"]);
}
else{
echo "没有 para 编号";
exit;
}
if (isset($_GET["src_channel"]) == false) {
echo "没有 channel 编号";
exit;
}
//文档信息
$mbook = $_GET["book"];
$paragraph = implode(",",$_para);
if (isset($_GET["dest_channel"]) == false) {
echo '';
echo "
选择一个空白的版风存储新的文档
";
echo "
原有版本中相同段落的数据将被覆盖
";
echo "
";
echo "
";
exit;
}
PDO_Connect( _FILE_DB_USER_WBW_,_DB_USERNAME_,_DB_PASSWORD_);
$channelInfo= new Channal($redis);
$srcPower = (int)$channelInfo->getPower($_GET["src_channel"]);
{
if ($srcPower == 30) {
//自己的文档
echo "这是自己的文档,不能复刻。";
} else {
//别人的文档
{
//以前没打开过
echo "共享的文档,正在fork...
";
echo "";
//复制数据
//打开逐词解析数据库
$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);
//逐词解析新数据数组
$arrNewBlock = array();
$arrNewBlockData = array();
$arrBlockTransform = array();
$blocks = $_para;
for ($i = 0; $i < count($blocks); $i++) {
#查找是否有旧的wbw_block数据
$query = "SELECT id,uid from "._TABLE_USER_WBW_BLOCK_." where book_id= ? and paragraph = ? and channel_uid = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($_GET["book"],$blocks[$i],$_GET["dest_channel"]));
$fDest = $stmt->fetch(PDO::FETCH_ASSOC);
if($fDest){
#旧的逐词解析数据块wbw_block id
$destUid = $fDest["uid"];
$destId = $fDest["id"];
}
#复制源wbw_block
$iPara = $blocks[$i];
$query = "SELECT uid,book_id,paragraph,style,lang,status from "._TABLE_USER_WBW_BLOCK_." where book_id= ? and paragraph = ? and channel_uid = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($_GET["book"],$iPara,$_GET["src_channel"]));
$fSrcBlock = $stmt->fetch(PDO::FETCH_ASSOC);
if(isset($destId)){
#有旧的wbw_block uuid 使用旧的uuid
$newBlockId = $destId;
$newBlockUid = $destUid;
}
else{
$newBlockId = $snowflake->id();
$newBlockUid = UUID::V4();
}
if ($fSrcBlock) {
$arrBlockTransform[$fSrcBlock["uid"]] = $newBlockId;
array_push($arrNewBlock,
array(
$newBlockId,
$newBlockUid,
"",
$_GET["dest_channel"],
$_GET["src_channel"],
$_COOKIE["user_uid"],
$_COOKIE["user_id"],
$fSrcBlock["book_id"],
$fSrcBlock["paragraph"],
$fSrcBlock["style"],
$fSrcBlock["lang"],
$fSrcBlock["status"],
mTime(),
mTime()
));
}
#复制源数据
$query = "SELECT block_uid, book_id,paragraph,wid,word,data,status from "._TABLE_USER_WBW_." where block_uid= ? ";
$stmtWBW = $dbhWBW->prepare($query);
$stmtWBW->execute(array($fSrcBlock["uid"]));
$fBlockData = $stmtWBW->fetchAll(PDO::FETCH_ASSOC);
foreach ($fBlockData as $value) {
array_push($arrNewBlockData,
array(
$snowflake->id(),
UUID::V4(),
$newBlockUid,
$newBlockId,
$value["book_id"],
$value["paragraph"],
$value["wid"],
$value["word"],
$value["data"],
mTime(),
mTime(),
$value["status"],
$_COOKIE["user_uid"],
$_COOKIE["user_id"],
));
}
}
# 查找目标block是否存在
//删除旧的逐词解析block数据块
$query = "DELETE from "._TABLE_USER_WBW_BLOCK_." where paragraph = ? AND book_id = ? AND channel_uid = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($iPara,$_GET["book"],$_GET["dest_channel"]));
//新增逐词解析block数据块
if (count($arrNewBlock) > 0) {
$dbhWBW->beginTransaction();
$query = "INSERT INTO "._TABLE_USER_WBW_BLOCK_."
(
id,
uid ,
parent_id ,
channel_uid ,
parent_channel_uid ,
creator_uid ,
editor_id ,
book_id ,
paragraph ,
style ,
lang ,
status ,
modify_time ,
create_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]
";
exit;
} else {
//逐词解析block块复刻成功
$count = count($arrNewBlock);
echo "wbw block $count recorders.
";
}
}
//删除旧的wbw逐词解析数据块
if(isset($destId)){
$query = "DELETE from "._TABLE_USER_WBW_." where block_uid = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($destId));
}
if (count($arrNewBlockData) > 0) {
// 开始一个事务,逐词解析数据 关闭自动提交
$dbhWBW->beginTransaction();
$query = "INSERT INTO "._TABLE_USER_WBW_."
(
id,
uid ,
block_uid ,
block_id ,
book_id ,
paragraph ,
wid ,
word ,
data ,
modify_time ,
create_time ,
status ,
creator_uid,
editor_id
) 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]
";
exit;
} else {
//逐词解析 数据 复刻成功
$count = count($arrNewBlockData);
echo "new wbw $count recorders.";
}
}
//成功
echo "doc list updata 1 recorders.";
echo "
";
echo "复刻成功
";
echo "正在打开文档";
echo "";
}
}
}
echo "";
?>