RJackson 11 лет назад
Родитель
Сommit
335eb66e33

+ 1 - 0
flaskbb/admin/forms.py

@@ -234,6 +234,7 @@ class ForumForm(Form):
                               description="This field is not saved if this forum is a category (see \"Is a category?\" field below).")
 
     is_category = BooleanField("Is a category?", description="Categories are root-level parents for forums.  They can not contain topics.")
+    locked = BooleanField("Locked?", description="Disable new posts and topics in this forum.")
 
     def validate_parent(self, field):
         if field.data.id == self._id:

+ 2 - 0
flaskbb/admin/views.py

@@ -196,6 +196,7 @@ def edit_forum(forum_id):
         forum.position = form.position.data
         forum.parent_id = form.parent.data.id
         forum.is_category = form.is_category.data
+        forum.locked = form.locked.data
         forum.save()
 
         flash("Forum successfully edited.", "success")
@@ -206,6 +207,7 @@ def edit_forum(forum_id):
         form.position.data = forum.position
         form.parent.data = forum.parent
         form.is_category.data = forum.is_category
+        form.locked.data = forum.locked
         #form.moderators.data = forum.moderators
 
     return render_template("admin/edit_forum.html", form=form)

+ 1 - 0
flaskbb/forum/models.py

@@ -249,6 +249,7 @@ class Forum(db.Model):
     position = db.Column(db.Integer, default=0)
     is_category = db.Column(db.Boolean, default=False)
     parent_id = db.Column(db.Integer, db.ForeignKey("forums.id"))
+    locked = db.Column(db.Boolean, default=False)
 
     # One-to-many
     topics = db.relationship("Topic", backref="forum", lazy="joined")

+ 18 - 4
flaskbb/forum/views.py

@@ -72,8 +72,10 @@ def view_topic(topic_id):
 
     form = None
 
-    if not topic.locked and perm_post_reply(user=current_user,
-                                            forum=topic.forum):
+    if not topic.locked \
+        and not topic.forum.locked \
+        and perm_post_reply(user=current_user,
+                            forum=topic.forum):
 
             form = QuickreplyForm()
             if form.validate_on_submit():
@@ -104,8 +106,8 @@ def view_post(post_id):
 def new_topic(forum_id):
     forum = Forum.query.filter_by(id=forum_id).first()
 
-    if forum.is_category:
-        flash("You cannot post a topic in a category.", "error")
+    if forum.locked:
+        flash("This forum is locked; you cannot submit new topics or posts.", "error")
         return redirect(url_for('forum.view_forum', forum_id=forum.id))
 
     if not perm_post_topic(user=current_user, forum=forum):
@@ -143,6 +145,10 @@ def delete_topic(topic_id):
 def new_post(topic_id):
     topic = Topic.query.filter_by(id=topic_id).first()
 
+    if topic.forum.locked:
+        flash("This forum is locked; you cannot submit new topics or posts.", "error")
+        return redirect(url_for('forum.view_forum', forum_id=topic.forum.id))
+
     if topic.locked:
         flash("The topic is locked.", "error")
         return redirect(url_for("forum.view_forum", forum_id=topic.forum_id))
@@ -164,6 +170,14 @@ def new_post(topic_id):
 def edit_post(post_id):
     post = Post.query.filter_by(id=post_id).first()
 
+    if post.topic.forum.locked:
+        flash("This forum is locked; you cannot submit new topics or posts.", "error")
+        return redirect(url_for('forum.view_forum', forum_id=post.topic.forum.id))
+
+    if post.topic.locked:
+        flash("The topic is locked.", "error")
+        return redirect(url_for("forum.view_forum", forum_id=post.topic.forum_id))
+
     if not perm_edit_post(user=current_user, forum=post.topic.forum,
                           post_user_id=post.user_id):
         flash("You do not have the permissions to edit this post", "error")

+ 1 - 0
flaskbb/templates/admin/edit_forum.html

@@ -15,6 +15,7 @@
         {{ horizontal_field(form.position) }}
 
         {{ render_boolean_field(form.is_category) }}
+        {{ render_boolean_field(form.locked) }}
 
         <div class="form-group">
             <div class="col-lg-offset-0 col-lg-9">

+ 1 - 1
flaskbb/templates/forum/topic.html

@@ -128,7 +128,7 @@
     </tbody>
 </table>
 
-{% if current_user|post_reply(topic.forum) and not topic.locked %}
+{% if form %}
     {% from "macros.html" import render_field %}
 <form class="form" action="#" method="post">
     {{ form.hidden_tag() }}