note.php 6.6 KB

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