2
0
Эх сурвалжийг харах

article redis优化 状态修改10 30

visuddhinanda 5 жил өмнө
parent
commit
f96bff2b69

+ 3 - 2
app/article/card.php

@@ -2,9 +2,10 @@
 //
 
 require_once "../path.php";
-require_once "./function.php";
-require_once '../ucenter/function.php';
 require_once '../redis/function.php';
+require_once "../article/function.php";
+require_once '../ucenter/function.php';
+
 
 if (isset($_GET["id"])) {
 	$output["id"]=$_GET["id"];

+ 43 - 27
app/article/function.php

@@ -15,28 +15,34 @@ class Article
     public function getInfo($id){
 		$output = array();
 		if($this->_redis!==false){
-			if($this->_redis->exists("article://info/".$id)===1){
-				$output["title"]=$this->_redis->hGet("article://info/".$id,"title");
-				$output["owner"]=$this->_redis->hGet("article://info/".$id,"owner");
-				$output["summary"]=$this->_redis->hGet("article://info/".$id,"summary");
-				$output["status"]=$this->_redis->hGet("article://info/".$id,"status");
-				$output["create_time"]=$this->_redis->hGet("article://info/".$id,"create_time");
-				$output["modify_time"]=$this->_redis->hGet("article://info/".$id,"modify_time");
+			if($this->_redis->exists("article://".$id)===1){
+				$output["id"]=$this->_redis->hGet("article://".$id,"id");
+				$output["title"]=$this->_redis->hGet("article://".$id,"title");
+				$output["subtitle"]=$this->_redis->hGet("article://".$id,"subtitle");
+				$output["owner"]=$this->_redis->hGet("article://".$id,"owner");
+				$output["summary"]=$this->_redis->hGet("article://".$id,"summary");
+				$output["tag"]=$this->_redis->hGet("article://".$id,"tag");
+				$output["status"]=$this->_redis->hGet("article://".$id,"status");
+				$output["create_time"]=$this->_redis->hGet("article://".$id,"create_time");
+				$output["modify_time"]=$this->_redis->hGet("article://".$id,"modify_time");
 				return $output;
 			}
 		}
-        $query = "SELECT title,owner,summary,status,create_time,modify_time FROM article WHERE id= ? ";
+        $query = "SELECT id,title,owner,summary,tag,status,create_time,modify_time FROM article WHERE id= ? ";
         $stmt = $this->dbh->prepare($query);
         $stmt->execute(array($id));
         $output = $stmt->fetch(PDO::FETCH_ASSOC);
         if($output){
 			if($this->_redis!==false){
-				$this->_redis->hSet("article://info/".$id,"title",$output["title"]);
-				$this->_redis->hSet("article://info/".$id,"owner",$output["owner"]);
-				$this->_redis->hSet("article://info/".$id,"summary",$output["summary"]);
-				$this->_redis->hSet("article://info/".$id,"status",$output["status"]);
-				$this->_redis->hSet("article://info/".$id,"create_time",$output["create_time"]);
-				$this->_redis->hSet("article://info/".$id,"modify_time",$output["modify_time"]);
+				$this->_redis->hSet("article://".$id,"id",$output["id"]);
+				$this->_redis->hSet("article://".$id,"title",$output["title"]);
+				$this->_redis->hSet("article://".$id,"subtitle",$output["subtitle"]);
+				$this->_redis->hSet("article://".$id,"summary",$output["summary"]);
+				$this->_redis->hSet("article://".$id,"owner",$output["owner"]);
+				$this->_redis->hSet("article://".$id,"tag",$output["tag"]);
+				$this->_redis->hSet("article://".$id,"status",$output["status"]);
+				$this->_redis->hSet("article://".$id,"create_time",$output["create_time"]);
+				$this->_redis->hSet("article://".$id,"modify_time",$output["modify_time"]);
 			}
             return $output;
         }
@@ -44,23 +50,33 @@ class Article
             return false;
         }
 	}
-	public function getTitle($id){
-
-		$query = "SELECT title FROM article  WHERE id = ? ";
-		$stmt = $this->dbh->prepare($query);
-		$stmt->execute(array($id));
-		$channal = $stmt->fetch(PDO::FETCH_ASSOC);
-		if ($channel) {
-			return $channel["name"];
-		} else {
-			return "";
+    public function getContent($id){
+		$output = array();
+		if($this->_redis!==false){
+			if($this->_redis->hExists("article://".$id,"content")===TRUE){
+				$content=$this->_redis->hGet("article://".$id,"content");
+				return $content;
+			}
 		}
+        $query = "SELECT content FROM article WHERE id= ? ";
+        $stmt = $this->dbh->prepare($query);
+        $stmt->execute(array($id));
+        $output = $stmt->fetch(PDO::FETCH_ASSOC);
+        if($output){
+			if($this->_redis!==false){
+				$this->_redis->hSet("article://".$id,"content",$output["content"]);
+			}
+            return $output["content"];
+        }
+        else{
+            return false;
+        }
 	}
 	public function getPower($id){
-		#查询用户对此channel是否有权限		
+		#查询用户对此是否有权限		
 
 		$iPower = 0;
-		$query = "SELECT owner,status FROM article WHERE id=? and status>0 ";
+		$query = "SELECT owner,status FROM article WHERE id=?  ";
 		$stmt = $this->dbh->prepare($query);
 		$stmt->execute(array($id));
 		$channel = $stmt->fetch(PDO::FETCH_ASSOC);
@@ -68,7 +84,7 @@ class Article
 			if(!isset($_COOKIE["userid"])  ){
 				#未登录用户
 				if($channel["status"]==30){
-					#全网公开有建议权限
+					#全网公开有读取和建议权限
 					return 10;
 				}
 				else{

+ 24 - 0
app/article/get.php

@@ -5,14 +5,38 @@ require_once "../path.php";
 require_once "../public/_pdo.php";
 require_once '../public/function.php';
 require_once '../ucenter/function.php';
+require_once '../redis/function.php';
+require_once "../article/function.php";
+
 
 
 if(isset($_GET["id"])){
+	//查询权限
+	$redis = redis_connect();
+	$article = new Article($redis); 
+	$power = $article->getPower($_GET["id"]);
+	if($power<10){
+		$output = array();
+		$output["title"]="error";
+		$output["subtitle"]="No Power For Read";
+		$output["summary"]="";
+		$output["content"]="该资源不是公开资源。您**没有**阅读权限。";
+		$output["owner"]="";
+		$output["username"]=array("username"=>"","nickname"=>"");
+		$output["status"]="";
+		echo json_encode($output, JSON_UNESCAPED_UNICODE);
+		exit;
+	}
+	#查询权限结束
+	/*
     PDO_Connect(""._FILE_DB_USER_ARTICLE_);
     $id=$_GET["id"];
     $query = "SELECT * FROM article  WHERE id = ? ";
     $Fetch = PDO_FetchRow($query,array($id));
+	*/
+	$Fetch = $article->getInfo($_GET["id"]);
     if($Fetch){
+		$Fetch["content"] = $article->getContent($_GET["id"]);
         $userinfo = new UserInfo();
         $user = $userinfo->getName($Fetch["owner"]);
         $Fetch["username"] = $user;

+ 1 - 1
app/article/list_new.php

@@ -25,7 +25,7 @@ require_once '../collect/function.php';
         $begin = 0;
     }
     PDO_Connect(""._FILE_DB_USER_ARTICLE_);
-    $query = "SELECT id,title,subtitle,summary,owner,modify_time from article  where status <> 0 ";
+    $query = "SELECT id,title,subtitle,summary,owner,modify_time from article  where status >= 30 ";
     
     if(isset($_GET["orderby"])){
         switch ($_GET["orderby"]) {

+ 36 - 17
app/article/my_article.js

@@ -67,31 +67,50 @@ function my_article_list() {
 function article_share(id) {
 	share_win.show("../share/share.php?id=" + id + "&type=3");
 }
-function render_status(status) {
+function render_status(status, readonly = true) {
 	status = parseInt(status);
 	let html = "";
 	let objStatus = [
 		{
-			id: 1,
-			name:
-				"<svg class='icon'><use xlink:href='../studio/svg/icon.svg#ic_lock'></use></svg>" + gLocal.gui.private,
+			id: 10,
+			icon: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#ic_lock'></use></svg>",
+			name: gLocal.gui.private,
 			tip: gLocal.gui.private_note,
-		},
-		{
-			id: 2,
-			name:
-				"<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_disable'></use></svg>" +
-				gLocal.gui.unlisted,
+		} /*
+		,{
+			id: 20,
+			icon: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_disable'></use></svg>",
+			name: gLocal.gui.unlisted,
 			tip: gLocal.gui.unlisted_note,
-		},
+		}*/,
 		{
-			id: 3,
-			name:
-				"<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_enable'></use></svg>" +
-				gLocal.gui.public,
+			id: 30,
+			icon: "<svg class='icon'><use xlink:href='../studio/svg/icon.svg#eye_enable'></use></svg>",
+			name: gLocal.gui.public,
 			tip: gLocal.gui.public_note,
 		},
 	];
+	if (readonly) {
+		for (const iterator of objStatus) {
+			if (iterator.id == status) {
+				return "<div >" + iterator.icon + iterator.name + "</div>";
+			}
+		}
+	} else {
+		let html = "";
+		html += "<select name='status'>";
+		for (const iterator of objStatus) {
+			html += "<option value='" + iterator.id + "' ";
+			if (iterator.id == status) {
+				html += "selected";
+			}
+			html += " >";
+			html += iterator.name;
+			html += "</option>";
+		}
+		html += "</select>";
+		return html;
+	}
 	html += '<div class="case_dropdown"  style="flex:7;">';
 	html += '<input type="hidden" name="status"  value ="' + status + '" />';
 
@@ -142,7 +161,7 @@ function my_article_edit(id) {
 					html += "<input type='hidden' name='tag' value='" + result.tag + "'/>";
 					html += "<input type='hidden' name='status' value='" + result.status + "'/>";
 
-					html += "<input type='checkbox' name='import' />" + gLocal.gui.import + gLocal.gui.text;
+					//html += "<input type='checkbox' name='import' />" + gLocal.gui.import + gLocal.gui.text;
 					html += "<div>";
 					//html += "<div id='article_collect' vui='collect-dlg' ></div>"
 					html += "<div style='display:flex;'>";
@@ -185,7 +204,7 @@ function my_article_edit(id) {
 					$("#article_list").html(html);
 					channal_select_init("channal_selector");
 					tran_lang_select_init("article_lang_select");
-					$("#aritcle_status").html(render_status(result.status));
+					$("#aritcle_status").html(render_status(result.status, false));
 					let html_title =
 						"<input id='input_article_title' type='input' name='title' value='" + result.title + "' />";
 					$("#article_title").html(html_title);

+ 19 - 10
app/article/my_article_post.php

@@ -4,17 +4,19 @@ require_once "../public/_pdo.php";
 require_once '../public/function.php';
 require_once '../hostsetting/function.php';
 require_once "../ucenter/active.php";
+require_once "../article/function.php";
+require_once "../redis/function.php";
 
 add_edit_event(_ARTICLE_EDIT_,$_POST["id"]);
 
 $respond=array("status"=>0,"message"=>"");
 
-# 检查是否修改权限
-PDO_Connect(""._FILE_DB_USER_ARTICLE_);
-$query = "SELECT owner FROM  article WHERE id= ?";
-$owner = PDO_FetchOne($query,array($_POST["id"]));
-if($owner!=$_COOKIE["userid"]){
-    $respond["status"]=1;
+# 检查是否修改权限
+$redis = redis_connect();
+$article = new Article($redis); 
+$power = $article->getPower($_POST["id"]);
+if($power<20){
+	$respond["status"]=1;
     $respond["message"]="No Power For Edit";
     echo json_encode($respond, JSON_UNESCAPED_UNICODE);
     exit;
@@ -22,6 +24,7 @@ if($owner!=$_COOKIE["userid"]){
 
 $_content = $_POST["content"];
 
+/*
 if($_POST["import"]=='on'){
     $sent = explode("\n",$_POST["content"]);
     if($sent && count($sent)>0){
@@ -45,7 +48,7 @@ if($_POST["import"]=='on'){
         }
         PDO_Connect(""._FILE_DB_SENTENCE_);
 
-        /* 开始一个事务,关闭自动提交 */
+        # 开始一个事务,关闭自动提交 
         $PDO->beginTransaction();
         $query="INSERT INTO sentence ('id','block_id','channal','book','paragraph','begin','end','tag','author','editor','text','language','ver','status','strlen','create_time','modify_time','receive_time') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?)";
         
@@ -96,7 +99,7 @@ if($_POST["import"]=='on'){
         $PDO->commit();
         
         if (!$sth || ($sth && $sth->errorCode() != 0)) {
-            /*  识别错误且回滚更改  */
+            #  识别错误且回滚更改  
             $PDO->rollBack();
             $error = PDO_ErrorInfo();
             $respond['status']=1;
@@ -111,8 +114,8 @@ if($_POST["import"]=='on'){
         }		        
     }
 }
-
-PDO_Connect(""._FILE_DB_USER_ARTICLE_);
+*/
+PDO_Connect(_FILE_DB_USER_ARTICLE_);
 
 $query="UPDATE article SET title = ? , subtitle = ? , summary = ?, content = ?  , tag = ? , setting = ? , status = ? , receive_time= ?  , modify_time= ?   where  id = ?  ";
 $sth = $PDO->prepare($query);
@@ -123,5 +126,11 @@ if (!$sth || ($sth && $sth->errorCode() != 0)) {
 	$respond['status']=1;
 	$respond['message']=$error[2];
 }
+else{
+	if($redis){
+		$redis->del("article://".$_POST["id"]);
+	}
+	
+}
 echo json_encode($respond, JSON_UNESCAPED_UNICODE);
 ?>

+ 2 - 2
app/redis/redis.json

@@ -15,9 +15,9 @@
 		"description": "译文句子列表 key: sent://channel/book-para-start-end "
 	},
 	{
-		"key": "article://info/*",
+		"key": "article://*",
 		"type": "hash",
 		"valid": true,
-		"description": "article 主要信息 key: article://info/id  字段 title,owner,summary,create_time,modify_time "
+		"description": "article 主要信息 key: article://id  字段 title,owner,summary,create_time,modify_time "
 	}
 ]