Browse Source

feat: 设置文章置顶和取消置顶

SongZihuan 3 years ago
parent
commit
c5a99b7dea
4 changed files with 42 additions and 6 deletions
  1. 17 0
      app/docx.py
  2. 8 2
      object/blog.py
  3. 7 0
      sql/blog.py
  4. 10 4
      templates/docx/article.html

+ 17 - 0
app/docx.py

@@ -209,6 +209,23 @@ def delete_blog_page():
     return redirect(url_for("docx.docx_page", page=1))
 
 
+@docx.route("/article/set/top")
+@login_required
+@app.role_required("WriteBlog", "set blog top")
+def set_blog_top_page():
+    blog_id = int(request.args.get("blog", -1))
+    top = request.args.get("top", '0') != '0'
+    if blog_id == -1:
+        return abort(400)
+    if BlogArticle(blog_id, None, None, None, None).set_top(top):
+        app.HBlogFlask.print_sys_opt_success_log(f"set blog top ({top})")
+        flash(f"博文{'取消' if not top else ''}置顶成功")
+    else:
+        app.HBlogFlask.print_sys_opt_fail_log(f"set blog top ({top})")
+        flash(f"博文{'取消' if not top else ''}置顶失败")
+    return redirect(url_for("docx.docx_page", page=1))
+
+
 @docx.route('/comment/create', methods=["POST"])
 @login_required
 @app.form_required(WriteCommentForm, "write comment",

+ 8 - 2
object/blog.py

@@ -1,5 +1,6 @@
 from typing import Optional
 
+from sql.base import DBBit
 from sql.blog import (get_blog_list,
                       get_blog_count,
                       get_archive_blog_list,
@@ -9,6 +10,7 @@ from sql.blog import (get_blog_list,
                       update_blog,
                       create_blog,
                       delete_blog,
+                      set_blog_top,
                       get_user_user_count)
 import object.user
 import object.archive
@@ -34,14 +36,15 @@ def load_blog_by_id(blog_id) -> "Optional[BlogArticle]":
     content = blog[3]
     update_time = blog[4]
     create_time = blog[5]
-    top = blog[6]
+    top = blog[6] == DBBit.BIT_1
     comment = object.comment.load_comment_list(blog_id)
     archive = object.archive.Archive.get_blog_archive(blog_id)
     return BlogArticle(blog_id, auth, title, subtitle, content, update_time, create_time, top, comment, archive)
 
 
 class BlogArticle:
-    def __init__(self, blog_id, auth, title, subtitle, content, update_time=None, create_time=None, top=False, comment=None, archive=None):
+    def __init__(self, blog_id, auth, title, subtitle, content, update_time=None, create_time=None, top=False,
+                 comment=None, archive=None):
         self.blog_id = blog_id
         self.user = auth
         self.title = title
@@ -82,3 +85,6 @@ class BlogArticle:
             self.content = content
             return True
         return False
+
+    def set_top(self, top: bool):
+        set_blog_top(self.blog_id, top)

+ 7 - 0
sql/blog.py

@@ -56,6 +56,13 @@ def delete_blog(blog_id: int):
     return True
 
 
+def set_blog_top(blog_id: int, top: bool = True):
+    cur = db.update(table="blog", kw={"Top": "1" if top else "0"}, where=f"ID={blog_id}")
+    if cur is None or cur.rowcount != 1:
+        return False
+    return True
+
+
 def get_blog_list(limit: Optional[int] = None, offset: Optional[int] = None) -> list:
     """ 获得 blog 列表 """
     cur = db.search(columns=["ID", "Title", "SubTitle", "UpdateTime", "CreateTime", "Top"], table="blog_with_top",

+ 10 - 4
templates/docx/article.html

@@ -50,12 +50,18 @@
                                     </div>
                                 </div>
                             </div>
-
-                            <div class="text-right">
-                                <button type="button" class="btn btn-primary mb-2" data-toggle="modal" data-target="#UpdateModal"> 更新博文 </button>
-                            </div>
                         {% endif %}
                     </form>
+                        {% if can_update %}
+                            <div class="text-right mb-2">
+                                <a type="button" class="btn btn-primary" data-toggle="modal" data-target="#UpdateModal"> 更新博文 </a>
+                                {% if article.top %}
+                                    <a class="btn btn-danger" href="{{ url_for("docx.set_blog_top_page", blog=article.blog_id, top='0') }}"> 取消置顶 </a>
+                                {% else %}
+                                    <a class="btn btn-danger" href="{{ url_for("docx.set_blog_top_page", blog=article.blog_id, top='1') }}"> 置顶文章 </a>
+                                {% endif %}
+                            </div>
+                        {% endif %}
                 </article>
             </div>
         {% endif %}