channal_list.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. #输入句子列表查询channel列表 和计算完成度
  3. require_once "../public/function.php";
  4. require_once "../public/_pdo.php";
  5. require_once "../path.php";
  6. require_once '../channal/function.php';
  7. require_once '../ucenter/function.php';
  8. $_data = array();
  9. $output = array();
  10. if(isset($_POST["data"])){
  11. $_data = json_decode($_POST["data"],true);
  12. }
  13. else{
  14. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  15. exit;
  16. }
  17. $_userinfo = new UserInfo();
  18. $_channal = new Channal();
  19. $dns = "sqlite:"._FILE_DB_SENTENCE_;
  20. $db_trans_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  21. $db_trans_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  22. $dns = "sqlite:"._FILE_DB_PALI_SENTENCE_;
  23. $db_pali_sent = new PDO($dns, "", "",array(PDO::ATTR_PERSISTENT=>true));
  24. $db_pali_sent->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  25. $channal = array();
  26. #查询有阅读权限的channel
  27. $channal_list = array();
  28. if(isset($_COOKIE["userid"])){
  29. PDO_Connect("sqlite:"._FILE_DB_CHANNAL_);
  30. $query = "SELECT id from channal where owner = ? limit 0,100";
  31. $Fetch_my = PDO_FetchAll($query,array($_COOKIE["userid"]));
  32. foreach ($Fetch_my as $key => $value) {
  33. # code...
  34. $channal_list[]=$value["id"];
  35. }
  36. # 找协作的
  37. $Fetch_coop = array();
  38. $query = "SELECT channal_id FROM cooperation WHERE user_id = ? ";
  39. $coop_channal = PDO_FetchAll($query,array($_COOKIE["userid"]));
  40. if(count($coop_channal)>0){
  41. foreach ($coop_channal as $key => $value) {
  42. # code...
  43. $channal_list[]=$value["channal_id"];
  44. }
  45. }
  46. /* 创建一个填充了和params相同数量占位符的字符串 */
  47. }
  48. if(count($channal_list)>0){
  49. $channel_place_holders = implode(',', array_fill(0, count($channal_list), '?'));
  50. $channel_query = " OR channal IN ($channel_place_holders)";
  51. }
  52. else{
  53. $channel_query = "";
  54. }
  55. # 查询有阅读权限的channel 结束
  56. $final = array();
  57. $article_len=0;
  58. foreach ($_data as $key => $value) {
  59. $pali_letter = array();
  60. # code...
  61. $id = $value["id"];
  62. $arrInfo = str_getcsv($value["data"],"@");
  63. $arrSent = str_getcsv($arrInfo[0],"-");
  64. $bookId=$arrSent[0];
  65. $para=$arrSent[1];
  66. $begin=$arrSent[2];
  67. $end=$arrSent[3];
  68. //find out translation
  69. $tran="";
  70. try{
  71. # 查询句子长度
  72. $pali_letter["id"]=$arrInfo[0];
  73. $query="SELECT length FROM pali_sent WHERE book= ? AND paragraph= ? AND begin= ? AND end= ? ";
  74. $stmt = $db_pali_sent->prepare($query);
  75. $stmt->execute(array($bookId,$para,$begin,$end));
  76. $Fetch = $stmt->fetch(PDO::FETCH_ASSOC);
  77. if($Fetch){
  78. $pali_letter["len"]=$Fetch["length"];
  79. $article_len+=$Fetch["length"];
  80. }
  81. else{
  82. $pali_letter["len"]=0;
  83. }
  84. #公开 或 channel有权限的
  85. $query="SELECT channal FROM sentence WHERE book= ? AND paragraph= ? AND begin= ? AND end= ? AND strlen >0 and (status = 30 {$channel_query} ) group by channal limit 0 ,20 ";
  86. $stmt = $db_trans_sent->prepare($query);
  87. $parm = array($bookId,$para,$begin,$end);
  88. $parm = array_merge_recursive($parm,$channal_list);
  89. $stmt->execute($parm);
  90. $Fetch = $stmt->fetchAll(PDO::FETCH_ASSOC);
  91. foreach ($Fetch as $key => $value) {
  92. # code...
  93. $pali_letter[$value["channal"]]=1;
  94. if(isset($channal[$value["channal"]])){
  95. $channal[$value["channal"]] ++;
  96. }
  97. else{
  98. $channal[$value["channal"]] = 1;
  99. }
  100. }
  101. $final[]=$pali_letter;
  102. }
  103. catch (Exception $e) {
  104. $tran = $e->getMessage();
  105. //echo 'Caught exception: ', $e->getMessage(), "\n";
  106. }
  107. }
  108. foreach ($channal as $key => $value) {
  109. # 计算句子的完成分布
  110. $arr_sent_final = array();
  111. foreach ($final as $final_value) {
  112. # code...
  113. $sent_final = array();
  114. $sent_final["id"]=$final_value["id"];
  115. $sent_final["len"]=$final_value["len"];
  116. if(isset($final_value[$key]) && $final_value[$key]==1){
  117. $sent_final["final"]=true;
  118. }
  119. else{
  120. $sent_final["final"]=false;
  121. }
  122. $arr_sent_final[] = $sent_final;
  123. }
  124. $channalInfo = $_channal->getChannal($key);
  125. $name = $_userinfo->getName($channalInfo["owner"]);
  126. $channalInfo["username"] = $name["username"];
  127. $channalInfo["nickname"] = $name["nickname"];
  128. $channalInfo["count"] = $value;
  129. $channalInfo["all"] = count($_data);
  130. $channalInfo["final"] =$arr_sent_final;
  131. $channalInfo["article_len"] =$article_len;
  132. $output[]= $channalInfo;
  133. }
  134. echo json_encode($output, JSON_UNESCAPED_UNICODE);
  135. ?>