fork.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. <?php
  2. /*
  3. *
  4. *
  5. */
  6. require_once "../public/_pdo.php";
  7. require_once "../public/function.php";
  8. require_once "../path.php";
  9. if($_COOKIE["uid"]){
  10. $uid=$_COOKIE["uid"];
  11. }
  12. else{
  13. echo "尚未登录";
  14. exit;
  15. }
  16. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  17. if(isset($_GET["doc_id"])){
  18. $doc_id=$_GET["doc_id"];
  19. $query = "select * from fileindex where id='{$doc_id}' ";
  20. $Fetch = PDO_FetchAll($query);
  21. $iFetch=count($Fetch);
  22. if($iFetch>0){
  23. //文档信息
  24. $orgFileInfo = $Fetch[0];
  25. $owner=$Fetch[0]["user_id"];
  26. $filename=$Fetch[0]["file_name"];
  27. $title=$Fetch[0]["title"];
  28. $tag=$Fetch[0]["tag"];
  29. $mbook=$Fetch[0]["book"];
  30. $paragraph=$Fetch[0]["paragraph"];
  31. if($owner==$uid){
  32. //自己的文档
  33. echo "这是自己的文档,不能复刻。";
  34. }
  35. else{
  36. //别人的文档
  37. //查询自己是否以前打开过
  38. $query = "select * from fileindex where parent_id='{$doc_id}' and user_id='{$uid}' ";
  39. $FetchSelf = PDO_FetchAll($query);
  40. $iFetchSelf=count($FetchSelf);
  41. if($iFetchSelf>0){
  42. //以前打开过
  43. echo "文档已经复刻";
  44. echo "<a href='../studio/editor.php?op=opendb&doc_id={$doc_id}'>在编辑器中打开</a>";
  45. }
  46. else{
  47. //以前没打开过
  48. echo "共享的文档,fork并打开...";
  49. //获取文件路径
  50. PDO_Connect("sqlite:"._FILE_DB_USERINFO_);
  51. $query = "select userid from user where id='{$owner}'";
  52. $FetchUid = PDO_FetchOne($query);
  53. if($FetchUid){
  54. //$source=$dir_user_base.$FetchUid.$dir_mydocument.$filename;
  55. //$dest=$dir_user_base.$userid.$dir_mydocument.$filename;
  56. //复制数据
  57. //打开逐词解析数据库
  58. $dns = "sqlite:"._FILE_DB_USER_WBW_;
  59. $dbhWBW = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  60. $dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  61. //打开译文数据库
  62. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  63. $dbhSent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  64. $dbhSent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  65. //逐词解析新数据数组
  66. $arrNewBlock = array();
  67. $arrNewBlockData = array();
  68. $arrBlockTransform = array();
  69. //译文新数据数组
  70. $arrSentNewBlock = array();
  71. $arrSentNewBlockData = array();
  72. $arrSentBlockTransform = array();
  73. $newDocBlockList=array();
  74. $blocks = json_decode($Fetch[0]["doc_block"]);
  75. for ($i=0;$i<count($blocks);$i++) {
  76. switch($blocks[$i]->type){
  77. case 1:
  78. break;
  79. case 2:
  80. //译文
  81. $blockid = $blocks[$i]->block_id;
  82. $query = "select * from sent_block where id= ? ";
  83. $stmt = $dbhSent->prepare($query);
  84. $stmt->execute(array($blockid));
  85. $fBlock = $stmt->fetchAll(PDO::FETCH_ASSOC);
  86. $newBlockId = UUID::V4();
  87. $newDocBlockList[]=array('type' => 2,'block_id' => $newBlockId);
  88. $arrSentBlockTransform[$fBlock[0]["id"]] = $newBlockId;
  89. if(count($fBlock)>0){
  90. array_push( $arrSentNewBlock,array($newBlockId,
  91. $fBlock[0]["id"],
  92. $fBlock[0]["book"],
  93. $fBlock[0]["paragraph"],
  94. $_COOKIE["userid"],
  95. $fBlock[0]["lang"],
  96. $fBlock[0]["author"],
  97. $fBlock[0]["editor"],
  98. $fBlock[0]["tag"],
  99. $fBlock[0]["status"],
  100. mTime(),
  101. mTime()
  102. ));
  103. }
  104. $query = "select * from sentence where block_id= ? ";
  105. $stmtSent = $dbhSent->prepare($query);
  106. $stmtSent->execute(array($fBlock[0]["id"]));
  107. $fBlockData = $stmtSent->fetchAll(PDO::FETCH_ASSOC);
  108. foreach($fBlockData as $value){
  109. array_push( $arrSentNewBlockData,array(UUID::V4(),
  110. $arrSentBlockTransform[$value["block_id"]],
  111. $value["book"],
  112. $value["paragraph"],
  113. $value["begin"],
  114. $value["end"],
  115. $value["tag"],
  116. $value["author"],
  117. $_COOKIE["userid"],
  118. $value["text"],
  119. $value["language"],
  120. $value["ver"],
  121. $value["status"],
  122. mTime(),
  123. mTime()
  124. ));
  125. }
  126. break;
  127. case 3:
  128. break;
  129. case 4:
  130. break;
  131. case 5:
  132. break;
  133. case 6:
  134. $blockid = $blocks[$i]->block_id;
  135. $query = "select * from wbw_block where id= ? ";
  136. $stmt = $dbhWBW->prepare($query);
  137. $stmt->execute(array($blockid));
  138. $fBlock = $stmt->fetchAll(PDO::FETCH_ASSOC);
  139. $newBlockId = UUID::V4();
  140. $newDocBlockList[]=array('type' => 6,'block_id' => $newBlockId);
  141. $arrBlockTransform[$fBlock[0]["id"]] = $newBlockId;
  142. if(count($fBlock)>0){
  143. array_push( $arrNewBlock,array($newBlockId,
  144. $fBlock[0]["id"],
  145. $_COOKIE["userid"],
  146. $fBlock[0]["book"],
  147. $fBlock[0]["paragraph"],
  148. $fBlock[0]["style"],
  149. $fBlock[0]["lang"],
  150. $fBlock[0]["status"],
  151. mTime(),
  152. mTime()
  153. ));
  154. }
  155. $query = "select * from wbw where block_id= ? ";
  156. $stmtWBW = $dbhWBW->prepare($query);
  157. $stmtWBW->execute(array($fBlock[0]["id"]));
  158. $fBlockData = $stmtWBW->fetchAll(PDO::FETCH_ASSOC);
  159. foreach($fBlockData as $value){
  160. array_push( $arrNewBlockData,array(UUID::V4(),
  161. $arrBlockTransform[$value["block_id"]],
  162. $value["book"],
  163. $value["paragraph"],
  164. $value["wid"],
  165. $value["word"],
  166. $value["data"],
  167. mTime(),
  168. mTime(),
  169. $value["status"],
  170. $_COOKIE["userid"]
  171. ));
  172. }
  173. break;
  174. case 2:
  175. break;
  176. }
  177. }
  178. //逐词解析block数据块
  179. if(count($arrNewBlock)>0){
  180. $dbhWBW->beginTransaction();
  181. $query="INSERT INTO wbw_block ('id','parent_id','owner','book','paragraph','style','lang','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?)";
  182. $stmtNewBlock = $dbhWBW->prepare($query);
  183. foreach($arrNewBlock as $oneParam){
  184. //print_r($oneParam);
  185. $stmtNewBlock->execute($oneParam);
  186. }
  187. // 提交更改
  188. $dbhWBW->commit();
  189. if (!$stmtNewBlock || ($stmtNewBlock && $stmtNewBlock->errorCode() != 0)) {
  190. $error = $dbhWBW->errorInfo();
  191. echo "error - $error[2] <br>";
  192. }
  193. else{
  194. //逐词解析block块复刻成功
  195. $count=count($arrNewBlock);
  196. echo "wbw block $count recorders.<br/>";
  197. }
  198. }
  199. if(count($arrNewBlockData)>0){
  200. // 开始一个事务,逐词解析数据 关闭自动提交
  201. $dbhWBW->beginTransaction();
  202. $query="INSERT INTO wbw ('id','block_id','book','paragraph','wid','word','data','modify_time','receive_time','status','owner') VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  203. $stmtWbwData = $dbhWBW->prepare($query);
  204. foreach($arrNewBlockData as $oneParam){
  205. $stmtWbwData->execute($oneParam);
  206. }
  207. // 提交更改
  208. $dbhWBW->commit();
  209. if (!$stmtWbwData || ($stmtWbwData && $stmtWbwData->errorCode() != 0)) {
  210. $error = $dbhWBW->errorInfo();
  211. echo "error - $error[2] <br>";
  212. }
  213. else{
  214. //逐词解析 数据 复刻成功
  215. $count=count($arrNewBlockData);
  216. echo "new wbw $count recorders.";
  217. }
  218. }
  219. //译文 block数据块
  220. if(count($arrSentNewBlock)>0){
  221. $dbhSent->beginTransaction();
  222. $query="INSERT INTO sent_block ('id','parent_id','book','paragraph','owner','lang','author','editor','tag','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
  223. $stmtSentNewBlock = $dbhSent->prepare($query);
  224. foreach($arrSentNewBlock as $oneParam){
  225. //print_r($oneParam);
  226. $stmtSentNewBlock->execute($oneParam);
  227. }
  228. // 提交更改
  229. $dbhSent->commit();
  230. if (!$stmtSentNewBlock || ($stmtSentNewBlock && $stmtSentNewBlock->errorCode() != 0)) {
  231. $error = $dbhSent->errorInfo();
  232. echo "error - $error[2] <br>";
  233. }
  234. else{
  235. //译文 block块复刻成功
  236. $count=count($arrNewBlock);
  237. echo "wbw block $count recorders.<br/>";
  238. }
  239. }
  240. if(count($arrSentNewBlockData)>0){
  241. // 开始一个事务,逐词解析数据 关闭自动提交
  242. $dbhSent->beginTransaction();
  243. $query="INSERT INTO sentence ('id','block_id','book','paragraph','begin','end','tag','author','editor','text','language','ver','status','modify_time','receive_time') VALUES (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?, ?)";
  244. $stmtSentData = $dbhSent->prepare($query);
  245. foreach($arrSentNewBlockData as $oneParam){
  246. $stmtSentData->execute($oneParam);
  247. }
  248. // 提交更改
  249. $dbhSent->commit();
  250. if (!$stmtSentData || ($stmtSentData && $stmtSentData->errorCode() != 0)) {
  251. $error = $dbhSent->errorInfo();
  252. echo "error - $error[2] <br>";
  253. }
  254. else{
  255. //译文 数据 复刻成功
  256. $count=count($arrSentNewBlockData);
  257. echo "new translation $count recorders.";
  258. }
  259. }
  260. //插入记录到文件索引
  261. $filesize=0;
  262. //服务器端文件列表
  263. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  264. $query="INSERT INTO fileindex ('id',
  265. 'parent_id',
  266. 'user_id',
  267. 'book',
  268. 'paragraph',
  269. 'file_name',
  270. 'title',
  271. 'tag',
  272. 'status',
  273. 'create_time',
  274. 'modify_time',
  275. 'accese_time',
  276. 'file_size',
  277. 'share',
  278. 'doc_info',
  279. 'doc_block',
  280. 'receive_time'
  281. )
  282. VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  283. $stmt = $PDO->prepare($query);
  284. $newDocId = UUID::v4();
  285. $newDocInfo = $orgFileInfo;
  286. $newDocInfo["id"] = $newDocId;
  287. $newDocInfo["parent_id"] = $orgFileInfo["id"];
  288. $newDocInfo["user_id"] = $_COOKIE["uid"];
  289. $newDocInfo["doc_block"] = json_encode($newDocBlockList, JSON_UNESCAPED_UNICODE);
  290. $newData=array($newDocInfo["id"],
  291. $newDocInfo["parent_id"],
  292. $newDocInfo["user_id"],
  293. $newDocInfo["book"],
  294. $newDocInfo["paragraph"],
  295. $newDocInfo["file_name"],
  296. $newDocInfo["title"],
  297. $newDocInfo["tag"],
  298. $newDocInfo["status"],
  299. mTime(),
  300. mTime(),
  301. mTime(),
  302. $newDocInfo["file_size"],
  303. $newDocInfo["share"],
  304. $newDocInfo["doc_info"],
  305. $newDocInfo["doc_block"],
  306. mTime()
  307. );
  308. $stmt->execute($newData);
  309. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  310. $error = PDO_ErrorInfo();
  311. echo "error - $error[2] <br>";
  312. }
  313. else{
  314. //文档列表插入成功
  315. echo "doc list updata 1 recorders.";
  316. echo "<a href='../studio/editor.php?op=opendb&doc_id={$newDocId}'>在编辑器中打开</a>";
  317. }
  318. }
  319. else{
  320. echo "无效的文档id";
  321. }
  322. }
  323. }
  324. }
  325. }
  326. ?>