Browse Source

Added moderators

sh4nks 11 years ago
parent
commit
0027117dd2
3 changed files with 35 additions and 1 deletions
  1. 26 0
      flaskbb/admin/forms.py
  2. 7 1
      flaskbb/admin/views.py
  3. 2 0
      flaskbb/templates/admin/edit_forum.html

+ 26 - 0
flaskbb/admin/forms.py

@@ -216,6 +216,7 @@ class AddGroupForm(GroupForm):
 
 class ForumForm(Form):
     _id = None
+    _moderators = set()
 
     title = TextField("Forum Title", validators=[
         Required(message="Forum title required")])
@@ -234,6 +235,11 @@ class ForumForm(Form):
                                            forum is a category (see \"Is a \
                                            category?\" field below).")
 
+    moderators = TextField("Moderators",
+                           description="Comma seperated usernames. Leave it \
+                                        blank if you do not want to set any \
+                                        moderators.")
+
     is_category = BooleanField("Is a category?",
                                description="Categories are root-level parents \
                                             for forums. They can not contain \
@@ -247,11 +253,31 @@ class ForumForm(Form):
             if field.data.id == self._id:
                 raise ValidationError("A forum cannot be it's own parent!")
 
+    def validate_moderators(self, field):
+        if field.data:
+            # Check if the usernames exist
+            for moderator in field.data.split(","):
+                user = User.query.filter_by(username=moderator).first()
+
+                # Check if the user has the permissions to moderate a forum
+                if user:
+                    if not user.get_permissions()["mod"]:
+                        raise ValidationError("The user is not in a moderators \
+                            group")
+                    else:
+                        self._moderators.add(user.id)
+                else:
+                    raise ValidationError("User not found")
+            field.data = self._moderators
+
     def save(self):
         forum = Forum(title=self.title.data,
                       description=self.description.data,
                       position=self.position.data)
 
+        if self.moderators.data:
+            forum.moderators = self.moderators.data
+
         if self.is_category.data:
             forum.is_category = True
             forum.parent_id = None

+ 7 - 1
flaskbb/admin/views.py

@@ -197,6 +197,7 @@ def edit_forum(forum_id):
         forum.parent_id = form.parent.data.id
         forum.is_category = form.is_category.data
         forum.locked = form.locked.data
+        forum.moderators = form.moderators.data
         forum.save()
 
         flash("Forum successfully edited.", "success")
@@ -208,7 +209,12 @@ def edit_forum(forum_id):
         form.parent.data = forum.parent
         form.is_category.data = forum.is_category
         form.locked.data = forum.locked
-        #form.moderators.data = forum.moderators
+
+        if forum.moderators:
+            mods = User.query.filter(User.id.in_(forum.moderators)).all()
+            form.moderators.data = ",".join([mod.username for mod in mods])
+        else:
+            form.moderators.data = None
 
     return render_template("admin/edit_forum.html", form=form)
 

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

@@ -14,6 +14,8 @@
         {{ horizontal_field(form.parent) }}
         {{ horizontal_field(form.position) }}
 
+        {{ horizontal_field(form.moderators) }}
+
         {{ render_boolean_field(form.is_category) }}
         {{ render_boolean_field(form.locked) }}