2
0

fork.php 21 KB

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