note.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <?php
  2. require_once "../path.php";
  3. require_once "../public/_pdo.php";
  4. require_once "../public/function.php";
  5. require_once "../channal/function.php";
  6. require_once "../redis/function.php";
  7. $redis = redis_connect();
  8. $_channal = new Channal();
  9. $_data = array();
  10. if (isset($_POST["data"])) {
  11. $_data = json_decode($_POST["data"], true);
  12. } else {
  13. if (isset($_GET["id"])) {
  14. $id = $_GET["id"];
  15. } else {
  16. echo "error: no id";
  17. return;
  18. }
  19. if (isset($_GET["info"])) {
  20. $info = $_GET["info"];
  21. } else {
  22. echo "error: no info";
  23. return;
  24. }
  25. $_data[] = array("id" => $id, "data" => $info);
  26. }
  27. if (isset($_POST["setting"])) {
  28. $_setting = json_decode($_POST["setting"], true);
  29. } else {
  30. $_setting["lang"] = "";
  31. $_setting["channal"] = "";
  32. }
  33. $dns = "" . _FILE_DB_PALI_SENTENCE_;
  34. $db_pali_sent = new PDO($dns, "", "", array(PDO::ATTR_PERSISTENT => true));
  35. $db_pali_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  36. $dns = "" . _FILE_DB_PALI_SENTENCE_SIM_;
  37. $db_pali_sent_sim = new PDO($dns, "", "", array(PDO::ATTR_PERSISTENT => true));
  38. $db_pali_sent_sim->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  39. $dns = "" . _FILE_DB_SENTENCE_;
  40. $db_trans_sent = new PDO($dns, "", "", array(PDO::ATTR_PERSISTENT => true));
  41. $db_trans_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  42. $output = array();
  43. #查询有阅读权限的channel
  44. $channal_list = array();
  45. if (isset($_COOKIE["userid"])) {
  46. PDO_Connect( _FILE_DB_CHANNAL_);
  47. $query = "SELECT id from channal where owner = ? limit 0,100";
  48. $Fetch_my = PDO_FetchAll($query, array($_COOKIE["userid"]));
  49. foreach ($Fetch_my as $key => $value) {
  50. # code...
  51. $channal_list[] = $value["id"];
  52. }
  53. # 找协作的
  54. $Fetch_coop = array();
  55. $query = "SELECT channal_id FROM cooperation WHERE user_id = ? ";
  56. $coop_channal = PDO_FetchAll($query, array($_COOKIE["userid"]));
  57. if (count($coop_channal) > 0) {
  58. foreach ($coop_channal as $key => $value) {
  59. # code...
  60. $channal_list[] = $value["channal_id"];
  61. }
  62. }
  63. /* 创建一个填充了和params相同数量占位符的字符串 */
  64. }
  65. if (count($channal_list) > 0) {
  66. $channel_place_holders = implode(',', array_fill(0, count($channal_list), '?'));
  67. $channel_query = " OR channal IN ($channel_place_holders)";
  68. } else {
  69. $channel_query = "";
  70. }
  71. # 查询有阅读权限的channel 结束
  72. foreach ($_data as $key => $value) {
  73. # code...
  74. $id = $value["id"];
  75. $arrInfo = explode("@", $value["data"]);
  76. if (isset($arrInfo[1])) {
  77. $sentChannal = $arrInfo[1];
  78. } else {
  79. $sentChannal = "";
  80. }
  81. if (isset($arrInfo[0])) {
  82. $arrSent = str_getcsv($arrInfo[0], "-");
  83. $bookId = $arrSent[0];
  84. $para = $arrSent[1];
  85. $begin = $arrSent[2];
  86. $end = $arrSent[3];
  87. } else {
  88. $bookId = 0;
  89. $para = 0;
  90. $begin = 0;
  91. $end = 0;
  92. }
  93. $pali_sim = 0;
  94. if ($redis != false) {
  95. $result = $redis->hGet('pali://sent/' . $bookId . "_" . $para . "_" . $begin . "_" . $end,"pali");
  96. $palitext = $result;
  97. $pali_text_id = $redis->hGet('pali://sent/' . $bookId . "_" . $para . "_" . $begin . "_" . $end,"id");
  98. $pali_sim = $redis->hGet('pali://sent/' . $bookId . "_" . $para . "_" . $begin . "_" . $end,"sim_count");
  99. } else {
  100. $query = "SELECT id,html FROM 'pali_sent' WHERE book = ? AND paragraph = ? AND begin = ? AND end = ? ";
  101. $sth = $db_pali_sent->prepare($query);
  102. $sth->execute(array($bookId, $para, $begin, $end));
  103. $row = $sth->fetch(PDO::FETCH_ASSOC);
  104. if ($row) {
  105. $palitext = $row['html'];
  106. $pali_text_id = $row['id'];
  107. } else {
  108. $palitext = "";
  109. $pali_text_id = 0;
  110. }
  111. //查询相似句
  112. $query = "SELECT count FROM 'sent_sim_index' WHERE sent_id = ? ";
  113. $sth = $db_pali_sent_sim->prepare($query);
  114. $sth->execute(array($pali_text_id));
  115. $row = $sth->fetch(PDO::FETCH_ASSOC);
  116. if ($row) {
  117. $pali_sim = $row["count"]; //explode(",",$row["sim_sents"]) ;
  118. }
  119. }
  120. //find out translation 查询译文
  121. $tran = "";
  122. $translation = array();
  123. $tran_channal = array();
  124. try {
  125. if (empty($_setting["channal"])) {
  126. if ($sentChannal == "") {
  127. $query = "SELECT * FROM sentence WHERE book= ? AND paragraph= ? AND begin= ? AND end= ? AND strlen >0 and (status = 30 {$channel_query} ) order by modify_time DESC limit 0 ,1 ";
  128. $channal = "";
  129. } else {
  130. $query = "SELECT * FROM sentence WHERE book= ? AND paragraph= ? AND begin= ? AND end= ? AND strlen >0 AND channal = ? limit 0 ,1 ";
  131. }
  132. } else {
  133. $query = "SELECT * FROM sentence WHERE book= ? AND paragraph= ? AND begin= ? AND end= ? AND strlen >0 AND channal = ? limit 0 ,1 ";
  134. $channal = $_setting["channal"];
  135. }
  136. $stmt = $db_trans_sent->prepare($query);
  137. if (empty($_setting["channal"])) {
  138. if ($sentChannal == "") {
  139. $parm = array($bookId, $para, $begin, $end);
  140. $parm = array_merge_recursive($parm, $channal_list);
  141. $stmt->execute($parm);
  142. $Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
  143. if ($Fetch) {
  144. $tran = $Fetch["text"];
  145. $translation[] = array("id" => $Fetch["id"], "text" => $Fetch["text"], "lang" => $Fetch["language"], "channal" => $Fetch["channal"], "editor" => $Fetch["editor"]);
  146. if (!empty($Fetch["channal"])) {
  147. $tran_channal[$Fetch["channal"]] = $Fetch["channal"];
  148. }
  149. }
  150. } else {
  151. $stmt->execute(array($bookId, $para, $begin, $end, $sentChannal));
  152. $Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
  153. if ($Fetch) {
  154. $tran = $Fetch["text"];
  155. $translation[] = array("id" => $Fetch["id"], "text" => $Fetch["text"], "lang" => $Fetch["language"], "channal" => $Fetch["channal"], "editor" => $Fetch["editor"]);
  156. $tran_channal[$Fetch["channal"]] = $Fetch["channal"];
  157. }
  158. }
  159. } else {
  160. $arrChannal = explode(",", $_setting["channal"]);
  161. foreach ($arrChannal as $key => $value) {
  162. # code...
  163. $stmt->execute(array($bookId, $para, $begin, $end, $value));
  164. $Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
  165. if ($Fetch) {
  166. $translation[] = array("id" => $Fetch["id"], "text" => $Fetch["text"], "lang" => $Fetch["language"], "channal" => $value, "editor" => $Fetch["editor"]);
  167. } else {
  168. $translation[] = array("id" => "", "text" => "", "lang" => "", "channal" => $value);
  169. }
  170. $tran_channal[$value] = $value;
  171. }
  172. }
  173. $tran_count = 1;
  174. } catch (Exception $e) {
  175. $tran = $e->getMessage();
  176. //echo 'Caught exception: ', $e->getMessage(), "\n";
  177. }
  178. foreach ($tran_channal as $key => $value) {
  179. # code...
  180. $tran_channal[$key] = $_channal->getChannal($key);
  181. }
  182. foreach ($translation as $key => $value) {
  183. # code...
  184. if ($value["channal"]) {
  185. $translation[$key]["channalinfo"] = $tran_channal[$value["channal"]];
  186. } else {
  187. $translation[$key]["channalinfo"] = false;
  188. }
  189. }
  190. //查询路径
  191. $para_path = _get_para_path($bookId, $para);
  192. $output[] = array("id" => $id,
  193. "palitext" => $palitext,
  194. "pali_sent_id" => $pali_text_id,
  195. "tran" => $tran,
  196. "translation" => $translation,
  197. "ref" => $para_path,
  198. "tran_count" => $tran_count,
  199. "book" => $bookId,
  200. "para" => $para,
  201. "begin" => $begin,
  202. "end" => $end,
  203. "sim" => $pali_sim,
  204. );
  205. }
  206. echo json_encode($output, JSON_UNESCAPED_UNICODE);