';
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_);
$channelInfo= new Channal($redis);
$srcPower = (int)$channelInfo->getPower($_GET["src_channel"]);
{
{
if ($srcPower == 30) {
//自己的文档
echo "这是自己的文档,不能复刻。";
} else {
//别人的文档
//查询以前自己是否曾经复刻
$query = "SELECT * from "._TABLE_USER_WBW_BLOCK_." where parent_channel=? and owner=? ";
$FetchSelf = PDO_FetchAll($query,array($_GET["src_channel"],$_COOKIE["userid"]));
$iFetchSelf = count($FetchSelf);
if ($iFetchSelf > 0) {
//以前打开过
echo "文档已经复刻";
echo "正在打开文档";
echo "";
} else {
//以前没打开过
echo "共享的文档,正在fork...
";
echo "";
{
//复制数据
//打开逐词解析数据库
$dns = _FILE_DB_USER_WBW_;
$dbhWBW = new PDO($dns, "", "", 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++) {
$query = "SELECT id from "._TABLE_USER_WBW_BLOCK_." where book= ? and paragraph = ? and channal = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($_GET["book"],$iPara,$_GET["dest_channel"]));
$fDest = $stmt->fetch(PDO::FETCH_ASSOC);
if($fDest){
#旧的逐词解析数据块wbw_block id
$destId = $fDest["id"];
}
#逐词解析
$iPara = $blocks[$i];
$query = "SELECT * from "._TABLE_USER_WBW_BLOCK_." where book= ? and paragraph = ? and channal = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute(array($_GET["book"],$iPara,$_GET["src_channel"]));
$fBlock = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(isset($destId)){
$newBlockId = $destId;
}
else{
$newBlockId = UUID::V4();
}
$arrBlockTransform[$fBlock[0]["id"]] = $newBlockId;
if (count($fBlock) > 0) {
array_push($arrNewBlock,
array($newBlockId,
"",
$_GET["dest_channel"],
$_GET["src_channel"],
$_COOKIE["userid"],
$fBlock[0]["book"],
$fBlock[0]["paragraph"],
$fBlock[0]["style"],
$fBlock[0]["lang"],
$fBlock[0]["status"],
mTime(),
mTime(),
mTime()
));
}
$query = "SELECT * from "._TABLE_USER_WBW_." where block_id= ? ";
$stmtWBW = $dbhWBW->prepare($query);
$stmtWBW->execute(array($fBlock[0]["id"]));
$fBlockData = $stmtWBW->fetchAll(PDO::FETCH_ASSOC);
foreach ($fBlockData as $value) {
array_push($arrNewBlockData,
array(UUID::V4(),
$arrBlockTransform[$value["block_id"]],
$value["book"],
$value["paragraph"],
$value["wid"],
$value["word"],
$value["data"],
mTime(),
mTime(),
$value["status"],
$_COOKIE["userid"],
));
}
}
# 查找目标block是否存在
//删除旧的逐词解析block数据块
$query = "DELETE from "._TABLE_USER_WBW_BLOCK_." where paragraph = ? AND book = ? AND channal = ? ";
$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','parent_id','channal','parent_channel','owner','book','paragraph','style','lang','status','modify_time','receive_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.
";
}
}
//删除逐词解析数据块
if(isset($destId)){
$query = "DELETE from "._TABLE_USER_WBW_." where block_id = ? ";
$stmt = $dbhWBW->prepare($query);
$stmt->execute($destId);
}
if (count($arrNewBlockData) > 0) {
// 开始一个事务,逐词解析数据 关闭自动提交
$dbhWBW->beginTransaction();
$query = "INSERT INTO "._TABLE_USER_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]
";
exit;
} else {
//逐词解析 数据 复刻成功
$count = count($arrNewBlockData);
echo "new wbw $count recorders.";
}
}
{
//成功
echo "doc list updata 1 recorders.";
echo "
";
echo "复刻成功
";
echo "正在打开文档";
echo "";
}
}
}
}
}
}
echo "";
?>