function.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. require_once "../path.php";
  3. require_once "../share/function.php";
  4. require_once "../db/table.php";
  5. class Article extends Table
  6. {
  7. function __construct($redis=false) {
  8. parent::__construct(_FILE_DB_USER_ARTICLE_, "article", "", "",$redis);
  9. }
  10. public function getInfo($id){
  11. $output = array();
  12. if($this->redis!==false){
  13. if($this->redis->exists("article://".$id)===1){
  14. $output["id"]=$this->redis->hGet("article://".$id,"id");
  15. $output["title"]=$this->redis->hGet("article://".$id,"title");
  16. $output["subtitle"]=$this->redis->hGet("article://".$id,"subtitle");
  17. $output["owner"]=$this->redis->hGet("article://".$id,"owner");
  18. $output["summary"]=$this->redis->hGet("article://".$id,"summary");
  19. $output["tag"]=$this->redis->hGet("article://".$id,"tag");
  20. $output["status"]=$this->redis->hGet("article://".$id,"status");
  21. $output["create_time"]=$this->redis->hGet("article://".$id,"create_time");
  22. $output["modify_time"]=$this->redis->hGet("article://".$id,"modify_time");
  23. return $output;
  24. }
  25. }
  26. $query = "SELECT id,title,owner,subtitle,summary,tag,status,create_time,modify_time FROM article WHERE id= ? ";
  27. $stmt = $this->dbh->prepare($query);
  28. $stmt->execute(array($id));
  29. $output = $stmt->fetch(PDO::FETCH_ASSOC);
  30. if($output){
  31. if($this->redis!==false){
  32. $this->redis->hSet("article://".$id,"id",$output["id"]);
  33. $this->redis->hSet("article://".$id,"title",$output["title"]);
  34. if(isset($output["subtitle"])){
  35. $this->redis->hSet("article://".$id,"subtitle",$output["subtitle"]);
  36. }
  37. $this->redis->hSet("article://".$id,"summary",$output["summary"]);
  38. $this->redis->hSet("article://".$id,"owner",$output["owner"]);
  39. $this->redis->hSet("article://".$id,"tag",$output["tag"]);
  40. $this->redis->hSet("article://".$id,"status",$output["status"]);
  41. $this->redis->hSet("article://".$id,"create_time",$output["create_time"]);
  42. $this->redis->hSet("article://".$id,"modify_time",$output["modify_time"]);
  43. }
  44. return $output;
  45. }
  46. else{
  47. return false;
  48. }
  49. }
  50. public function getContent($id){
  51. $output = array();
  52. if($this->redis!==false){
  53. if($this->redis->hExists("article://".$id,"content")===TRUE){
  54. $content=$this->redis->hGet("article://".$id,"content");
  55. return $content;
  56. }
  57. }
  58. $query = "SELECT content FROM article WHERE id= ? ";
  59. $stmt = $this->dbh->prepare($query);
  60. $stmt->execute(array($id));
  61. $output = $stmt->fetch(PDO::FETCH_ASSOC);
  62. if($output){
  63. if($this->redis!==false){
  64. $this->redis->hSet("article://".$id,"content",$output["content"]);
  65. }
  66. return $output["content"];
  67. }
  68. else{
  69. return false;
  70. }
  71. }
  72. public function getPower($id,$collectionId=""){
  73. #查询用户对此是否有权限
  74. if(isset($_COOKIE["userid"])){
  75. $userId = $_COOKIE["userid"];
  76. }
  77. else{
  78. $userId=0;
  79. }
  80. if($this->redis!==false){
  81. $power = $this->redis->hGet("power://article/".$id,$userId);
  82. if($power!==FALSE){
  83. return $power;
  84. }
  85. }
  86. $iPower = 0;
  87. $query = "SELECT owner,status FROM article WHERE id=? ";
  88. $stmt = $this->dbh->prepare($query);
  89. $stmt->execute(array($id));
  90. $channel = $stmt->fetch(PDO::FETCH_ASSOC);
  91. if($channel){
  92. if(!isset($_COOKIE["userid"])){
  93. #未登录用户
  94. if($channel["status"]==30){
  95. #全网公开有读取和建议权限
  96. return 10;
  97. }
  98. else{
  99. #其他状态没有任何权限
  100. return 0;
  101. }
  102. }
  103. else{
  104. if($channel["owner"]==$_COOKIE["userid"]){
  105. #自己的
  106. return 30;
  107. }
  108. else if($channel["status"]>=30){
  109. #全网公开的 可以提交pr
  110. $iPower = 10;
  111. }
  112. }
  113. }
  114. #查询共享权限,如果共享权限更大,覆盖上面的的
  115. $sharePower = share_get_res_power($_COOKIE["userid"],$id);
  116. if($collectionId!=""){
  117. $sharePowerCollection = share_get_res_power($_COOKIE["userid"],$collectionId);
  118. }
  119. else{
  120. $sharePowerCollection =0;
  121. }
  122. if($sharePower>$iPower){
  123. $iPower=$sharePower;
  124. }
  125. if($sharePowerCollection>$iPower){
  126. $iPower=$sharePowerCollection;
  127. }
  128. if($this->redis!==false){
  129. $this->redis->hSet("power://article/".$id,$_COOKIE["userid"],$iPower);
  130. }
  131. return $iPower;
  132. }
  133. }
  134. class ArticleList extends Table
  135. {
  136. function __construct($redis=false) {
  137. parent::__construct(_FILE_DB_USER_ARTICLE_, "article_list", "", "",$redis);
  138. }
  139. function upgrade($collectionId,$articleList=array()){
  140. # 更新 article_list 表
  141. $query = "DELETE FROM article_list WHERE collect_id = ? ";
  142. $stmt = $this->dbh->prepare($query);
  143. if($stmt){
  144. $stmt->execute(array($collectionId));
  145. }
  146. if(count($articleList)>0){
  147. /* 开始一个事务,关闭自动提交 */
  148. $this->dbh->beginTransaction();
  149. $query = "INSERT INTO article_list (collect_id, article_id,level,title) VALUES ( ?, ?, ? , ? )";
  150. $sth = $this->dbh->prepare($query);
  151. foreach ($articleList as $row) {
  152. $sth->execute(array($collectionId,$row["article"],$row["level"],$row["title"]));
  153. if($this->redis){
  154. #删除article权限缓存
  155. $this->redis->del("power://article/".$row["article"]);
  156. }
  157. }
  158. $this->dbh->commit();
  159. if (!$sth || ($sth && $sth->errorCode() != 0)) {
  160. /* 识别错误且回滚更改 */
  161. $this->dbh->rollBack();
  162. $error = $this->dbh->errorInfo();;
  163. $respond['status']=1;
  164. $respond['message']=$error[2];
  165. }
  166. }
  167. }
  168. }
  169. ?>