2
0

fork.php 17 KB

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