fork.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. <?php
  2. /*拷贝其他人的文件
  3. *
  4. *
  5. */
  6. require_once '../studio/index_head.php';
  7. ?>
  8. <body id="file_list_body" >
  9. <?php
  10. require_once "../public/_pdo.php";
  11. require_once "../public/function.php";
  12. require_once "../path.php";
  13. require_once '../studio/index_tool_bar.php';
  14. echo '<div class="index_inner" style=" margin-left: 18em;margin-top: 5em;">';
  15. if($_COOKIE["uid"]){
  16. $uid=$_COOKIE["uid"];
  17. }
  18. else{
  19. echo "尚未登录";
  20. echo "<h3><a href='../ucenter/index.php?op=login'>登录</a>后才可以打开文档 </h3>";
  21. exit;
  22. }
  23. if(isset($_GET["doc_id"])==false){
  24. echo "没有 文档编号";
  25. exit;
  26. }
  27. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  28. $doc_id=$_GET["doc_id"];
  29. $query = "select * from fileindex where id= ? ";
  30. $Fetch = PDO_FetchAll($query,array($doc_id));
  31. $iFetch=count($Fetch);
  32. if($iFetch>0){
  33. //文档信息
  34. $mbook=$Fetch[0]["book"];
  35. $paragraph=$Fetch[0]["paragraph"];
  36. }
  37. if(isset($_GET["channel"])==false){
  38. echo '<div class="file_list_block">';
  39. echo "<h2>选择一个空白的版风存储新的文档</h2>";
  40. echo "<form action='fork.php' method='get'>";
  41. echo "<input type='hidden' name='doc_id' value='{$_GET["doc_id"]}' />";
  42. PDO_Connect("sqlite:"._FILE_DB_CHANNAL_);
  43. $query = "select * from channal where owner = '{$_COOKIE["userid"]}' limit 0,100";
  44. $Fetch = PDO_FetchAll($query);
  45. $i=0;
  46. foreach($Fetch as $row){
  47. echo '<div class="file_list_row" style="padding:5px;display:flex;">';
  48. echo '<div class="pd-10" style="max-width:2em;flex:1;">';
  49. echo '<input name="channel" value="'.$row["id"].'" ';
  50. if($i==0){
  51. echo "checked";
  52. }
  53. echo ' type="radio" />';
  54. echo '</div>';
  55. echo '<div class="title" style="flex:3;padding-bottom:5px;">'.$row["name"].'</div>';
  56. echo '<div class="title" style="flex:3;padding-bottom:5px;">'.$row["lang"].'</div>';
  57. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  58. PDO_Connect("sqlite:"._FILE_DB_USER_WBW_);
  59. $query = "select count(*) from wbw_block where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100";
  60. $FetchWBW = PDO_FetchOne($query);
  61. echo '</div>';
  62. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  63. if($FetchWBW==0){
  64. echo $_local->gui->blank;
  65. }
  66. else{
  67. echo $FetchWBW.$_local->gui->para;
  68. echo "<a href='../studio/editor.php?op=openchannal&book=$book&para={$paraList}&channal={$row["id"]}'>open</a>";
  69. }
  70. echo '</div>';
  71. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  72. PDO_Connect("sqlite:"._FILE_DB_SENTENCE_);
  73. $query = "select count(*) from sentence where channal = '{$row["id"]}' and book='{$mbook}' and paragraph in ({$paragraph}) limit 0,100";
  74. $FetchWBW = PDO_FetchOne($query);
  75. echo '</div>';
  76. echo '<div class="title" style="flex:2;padding-bottom:5px;">';
  77. if($FetchWBW==0){
  78. echo $_local->gui->blank;
  79. }
  80. else{
  81. echo $FetchWBW.$_local->gui->para;
  82. }
  83. echo '</div>';
  84. echo '<div class="summary" style="flex:1;padding-bottom:5px;">'.$row["status"].'</div>';
  85. echo '<div class="author" style="flex:1;padding-bottom:5px;">'.$row["create_time"].'</div>';
  86. echo '</div>';
  87. $i++;
  88. }
  89. echo "<input type='submit' />";
  90. echo "</form>";
  91. echo "</div>";
  92. exit;
  93. }
  94. //if(isset($_GET["doc_id"]))
  95. {
  96. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  97. $doc_id=$_GET["doc_id"];
  98. $query = "select * from fileindex where id= ? ";
  99. $Fetch = PDO_FetchAll($query,array($doc_id));
  100. $iFetch=count($Fetch);
  101. if($iFetch>0){
  102. //文档信息
  103. $orgFileInfo = $Fetch[0];
  104. $owner=$Fetch[0]["user_id"];
  105. $filename=$Fetch[0]["file_name"];
  106. $title=$Fetch[0]["title"];
  107. $tag=$Fetch[0]["tag"];
  108. $mbook=$Fetch[0]["book"];
  109. $paragraph=$Fetch[0]["paragraph"];
  110. if($owner==$uid){
  111. //自己的文档
  112. echo "这是自己的文档,不能复刻。";
  113. }
  114. else{
  115. //别人的文档
  116. //查询自己是否以前打开过
  117. $query = "select * from fileindex where parent_id='{$doc_id}' and user_id='{$uid}' ";
  118. $FetchSelf = PDO_FetchAll($query);
  119. $iFetchSelf=count($FetchSelf);
  120. if($iFetchSelf>0){
  121. //以前打开过
  122. echo "文档已经复刻";
  123. echo "正在<a href='../studio/editor.php?op=opendb&doc_id={$doc_id}'>打开</a>文档";
  124. echo "<script>";
  125. echo "window.location.assign(\"../studio/editor.php?op=opendb&doc_id={$doc_id}\");";
  126. echo "</script>";
  127. }
  128. else{
  129. //以前没打开过
  130. echo "<h3>共享的文档,正在fork...</h3>";
  131. echo "<div style='display:none;'>";
  132. //获取文件路径
  133. PDO_Connect("sqlite:"._FILE_DB_USERINFO_);
  134. $query = "select userid from user where id='{$owner}'";
  135. $FetchUid = PDO_FetchOne($query);
  136. if($FetchUid){
  137. //$source=$dir_user_base.$FetchUid.$dir_mydocument.$filename;
  138. //$dest=$dir_user_base.$userid.$dir_mydocument.$filename;
  139. //复制数据
  140. //打开逐词解析数据库
  141. $dns = "sqlite:"._FILE_DB_USER_WBW_;
  142. $dbhWBW = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  143. $dbhWBW->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  144. //打开译文数据库
  145. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  146. $dbhSent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  147. $dbhSent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  148. //逐词解析新数据数组
  149. $arrNewBlock = array();
  150. $arrNewBlockData = array();
  151. $arrBlockTransform = array();
  152. //译文新数据数组
  153. $arrSentNewBlock = array();
  154. $arrSentNewBlockData = array();
  155. $arrSentBlockTransform = array();
  156. $newDocBlockList=array();
  157. $blocks = json_decode($Fetch[0]["doc_block"]);
  158. for ($i=0;$i<count($blocks);$i++) {
  159. switch($blocks[$i]->type){
  160. case 1:
  161. break;
  162. case 2:
  163. //译文
  164. $blockid = $blocks[$i]->block_id;
  165. $query = "select * from sent_block where id= ? ";
  166. $stmt = $dbhSent->prepare($query);
  167. $stmt->execute(array($blockid));
  168. $fBlock = $stmt->fetchAll(PDO::FETCH_ASSOC);
  169. $newBlockId = UUID::V4();
  170. //不复刻译文
  171. //$newDocBlockList[]=array('type' => 2,'block_id' => $newBlockId);
  172. $arrSentBlockTransform[$fBlock[0]["id"]] = $newBlockId;
  173. if(count($fBlock)>0){
  174. array_push( $arrSentNewBlock,
  175. array($newBlockId,
  176. $fBlock[0]["id"],
  177. $fBlock[0]["book"],
  178. $fBlock[0]["paragraph"],
  179. $_COOKIE["userid"],
  180. $fBlock[0]["lang"],
  181. $fBlock[0]["author"],
  182. $fBlock[0]["editor"],
  183. $fBlock[0]["tag"],
  184. $fBlock[0]["status"],
  185. mTime(),
  186. mTime()
  187. ));
  188. }
  189. $query = "select * from sentence where block_id= ? ";
  190. $stmtSent = $dbhSent->prepare($query);
  191. $stmtSent->execute(array($fBlock[0]["id"]));
  192. $fBlockData = $stmtSent->fetchAll(PDO::FETCH_ASSOC);
  193. foreach($fBlockData as $value){
  194. array_push( $arrSentNewBlockData,
  195. array(UUID::V4(),
  196. $arrSentBlockTransform[$value["block_id"]],
  197. $value["book"],
  198. $value["paragraph"],
  199. $value["begin"],
  200. $value["end"],
  201. $value["channal"],
  202. $value["tag"],
  203. $value["author"],
  204. $_COOKIE["userid"],
  205. $value["text"],
  206. $value["language"],
  207. $value["ver"],
  208. $value["status"],
  209. mTime(),
  210. mTime()
  211. ));
  212. }
  213. break;
  214. case 3:
  215. break;
  216. case 4:
  217. break;
  218. case 5:
  219. break;
  220. case 6:
  221. #逐词解析
  222. $blockid = $blocks[$i]->block_id;
  223. $query = "select * from wbw_block where id= ? ";
  224. $stmt = $dbhWBW->prepare($query);
  225. $stmt->execute(array($blockid));
  226. $fBlock = $stmt->fetchAll(PDO::FETCH_ASSOC);
  227. $newBlockId = UUID::V4();
  228. $newDocBlockList[]=array('type' => 6,'block_id' => $newBlockId);
  229. $arrBlockTransform[$fBlock[0]["id"]] = $newBlockId;
  230. if(count($fBlock)>0){
  231. array_push( $arrNewBlock,
  232. array($newBlockId,
  233. $fBlock[0]["id"],
  234. $_GET["channel"],
  235. $_COOKIE["userid"],
  236. $fBlock[0]["book"],
  237. $fBlock[0]["paragraph"],
  238. $fBlock[0]["style"],
  239. $fBlock[0]["lang"],
  240. $fBlock[0]["status"],
  241. mTime(),
  242. mTime()
  243. ));
  244. }
  245. $query = "select * from wbw where block_id= ? ";
  246. $stmtWBW = $dbhWBW->prepare($query);
  247. $stmtWBW->execute(array($fBlock[0]["id"]));
  248. $fBlockData = $stmtWBW->fetchAll(PDO::FETCH_ASSOC);
  249. foreach($fBlockData as $value){
  250. array_push( $arrNewBlockData,
  251. array(UUID::V4(),
  252. $arrBlockTransform[$value["block_id"]],
  253. $value["book"],
  254. $value["paragraph"],
  255. $value["wid"],
  256. $value["word"],
  257. $value["data"],
  258. mTime(),
  259. mTime(),
  260. $value["status"],
  261. $_COOKIE["userid"]
  262. ));
  263. }
  264. break;
  265. case 2:
  266. break;
  267. }
  268. }
  269. //逐词解析block数据块
  270. if(count($arrNewBlock)>0){
  271. $dbhWBW->beginTransaction();
  272. $query="INSERT INTO wbw_block ('id','parent_id','channal','owner','book','paragraph','style','lang','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  273. $stmtNewBlock = $dbhWBW->prepare($query);
  274. foreach($arrNewBlock as $oneParam){
  275. $stmtNewBlock->execute($oneParam);
  276. }
  277. // 提交更改
  278. $dbhWBW->commit();
  279. if (!$stmtNewBlock || ($stmtNewBlock && $stmtNewBlock->errorCode() != 0)) {
  280. $error = $dbhWBW->errorInfo();
  281. echo "error - $error[2] <br>";
  282. }
  283. else{
  284. //逐词解析block块复刻成功
  285. $count=count($arrNewBlock);
  286. echo "wbw block $count recorders.<br/>";
  287. }
  288. }
  289. if(count($arrNewBlockData)>0){
  290. // 开始一个事务,逐词解析数据 关闭自动提交
  291. $dbhWBW->beginTransaction();
  292. $query="INSERT INTO wbw ('id','block_id','book','paragraph','wid','word','data','modify_time','receive_time','status','owner') VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  293. $stmtWbwData = $dbhWBW->prepare($query);
  294. foreach($arrNewBlockData as $oneParam){
  295. $stmtWbwData->execute($oneParam);
  296. }
  297. // 提交更改
  298. $dbhWBW->commit();
  299. if (!$stmtWbwData || ($stmtWbwData && $stmtWbwData->errorCode() != 0)) {
  300. $error = $dbhWBW->errorInfo();
  301. echo "error - $error[2] <br>";
  302. }
  303. else{
  304. //逐词解析 数据 复刻成功
  305. $count=count($arrNewBlockData);
  306. echo "new wbw $count recorders.";
  307. }
  308. }
  309. //不复刻译文
  310. //译文 block数据块
  311. /*
  312. if(count($arrSentNewBlock)>0){
  313. $dbhSent->beginTransaction();
  314. $query="INSERT INTO sent_block ('id','parent_id','book','paragraph','owner','lang','author','editor','tag','status','modify_time','receive_time') VALUES (?,?,?,?,?,?,?,?,?,?,?,?)";
  315. $stmtSentNewBlock = $dbhSent->prepare($query);
  316. foreach($arrSentNewBlock as $oneParam){
  317. //print_r($oneParam);
  318. $stmtSentNewBlock->execute($oneParam);
  319. }
  320. // 提交更改
  321. $dbhSent->commit();
  322. if (!$stmtSentNewBlock || ($stmtSentNewBlock && $stmtSentNewBlock->errorCode() != 0)) {
  323. $error = $dbhSent->errorInfo();
  324. echo "error - $error[2] <br>";
  325. }
  326. else{
  327. //译文 block块复刻成功
  328. $count=count($arrNewBlock);
  329. echo "wbw block $count recorders.<br/>";
  330. }
  331. }
  332. if(count($arrSentNewBlockData)>0){
  333. // 开始一个事务,逐词解析数据 关闭自动提交
  334. $dbhSent->beginTransaction();
  335. $query="INSERT INTO sentence ('id','block_id','book','paragraph','begin','end','channal','tag','author','editor','text','language','ver','status','modify_time','receive_time') VALUES (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?, ?)";
  336. $stmtSentData = $dbhSent->prepare($query);
  337. foreach($arrSentNewBlockData as $oneParam){
  338. $stmtSentData->execute($oneParam);
  339. }
  340. // 提交更改
  341. $dbhSent->commit();
  342. if (!$stmtSentData || ($stmtSentData && $stmtSentData->errorCode() != 0)) {
  343. $error = $dbhSent->errorInfo();
  344. echo "error - $error[2] <br>";
  345. }
  346. else{
  347. //译文 数据 复刻成功
  348. $count=count($arrSentNewBlockData);
  349. echo "new translation $count recorders.";
  350. }
  351. }
  352. */
  353. //插入记录到文件索引
  354. $filesize=0;
  355. //服务器端文件列表
  356. PDO_Connect("sqlite:"._FILE_DB_FILEINDEX_);
  357. $query="INSERT INTO fileindex ('id',
  358. 'parent_id',
  359. 'user_id',
  360. 'book',
  361. 'paragraph',
  362. 'file_name',
  363. 'title',
  364. 'tag',
  365. 'status',
  366. 'create_time',
  367. 'modify_time',
  368. 'accese_time',
  369. 'file_size',
  370. 'share',
  371. 'doc_info',
  372. 'doc_block',
  373. 'receive_time'
  374. )
  375. VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  376. $stmt = $PDO->prepare($query);
  377. $newDocId = UUID::v4();
  378. $newDocInfo = $orgFileInfo;
  379. $newDocInfo["id"] = $newDocId;
  380. $newDocInfo["parent_id"] = $orgFileInfo["id"];
  381. $newDocInfo["user_id"] = $_COOKIE["uid"];
  382. $newDocInfo["doc_block"] = json_encode($newDocBlockList, JSON_UNESCAPED_UNICODE);
  383. $newData=array($newDocInfo["id"],
  384. $newDocInfo["parent_id"],
  385. $newDocInfo["user_id"],
  386. $newDocInfo["book"],
  387. $newDocInfo["paragraph"],
  388. $newDocInfo["file_name"],
  389. $newDocInfo["title"],
  390. $newDocInfo["tag"],
  391. $newDocInfo["status"],
  392. mTime(),
  393. mTime(),
  394. mTime(),
  395. $newDocInfo["file_size"],
  396. $newDocInfo["share"],
  397. $newDocInfo["doc_info"],
  398. $newDocInfo["doc_block"],
  399. mTime()
  400. );
  401. $stmt->execute($newData);
  402. if (!$stmt || ($stmt && $stmt->errorCode() != 0)) {
  403. $error = PDO_ErrorInfo();
  404. echo "error - $error[2] <br>";
  405. }
  406. else{
  407. //文档列表插入成功
  408. echo "doc list updata 1 recorders.";
  409. echo "</div>";
  410. echo "<h3>复刻成功</h3>";
  411. echo "正在<a href='../studio/editor.php?op=opendb&doc_id={$newDocId}'>打开</a>文档";
  412. echo "<script>";
  413. echo "window.location.assign(\"../studio/editor.php?op=opendb&fileid={$newDocId}\");";
  414. echo "</script>";
  415. }
  416. }
  417. else{
  418. echo "无效的文档id";
  419. }
  420. }
  421. }
  422. }
  423. }
  424. echo "</div>";
  425. ?>
  426. </body>
  427. </html>