Просмотр исходного кода

Added "external link" forum type

sh4nks 11 лет назад
Родитель
Сommit
2004374d1a

+ 1 - 1
README.md

@@ -18,7 +18,7 @@ using the micro framework Flask.
 ## TODO
 ## TODO
 
 
 * Searching for members, posts,...
 * Searching for members, posts,...
-* "Link to"-Forum type
+* ~~"Link to"-Forum type~~
 * ~~Move a topic in a other forum~~
 * ~~Move a topic in a other forum~~
 * Merging 2 topics together
 * Merging 2 topics together
 * Reporting posts
 * Reporting posts

+ 25 - 1
flaskbb/admin/forms.py

@@ -254,6 +254,10 @@ class ForumForm(Form):
         description="The category that contains this forum."
         description="The category that contains this forum."
     )
     )
 
 
+    external = TextField("External link", validators=[
+        Optional(), URL()],
+        description="A link to a website i.e. 'http://flaskbb.org'")
+
     moderators = TextField(
     moderators = TextField(
         "Moderators",
         "Moderators",
         description="Comma seperated usernames. Leave it blank if you do not \
         description="Comma seperated usernames. Leave it blank if you do not \
@@ -270,6 +274,12 @@ class ForumForm(Form):
         description="Disable new posts and topics in this forum."
         description="Disable new posts and topics in this forum."
     )
     )
 
 
+    def validate_external(self, field):
+        if hasattr(self, "forum"):
+            if self.forum.topics:
+                raise ValidationError("You cannot convert a forum that \
+                                       contain topics in a external link")
+
     def validate_show_moderators(self, field):
     def validate_show_moderators(self, field):
         if field.data and not self.moderators.data:
         if field.data and not self.moderators.data:
             raise ValidationError("You also need to specify some moderators.")
             raise ValidationError("You also need to specify some moderators.")
@@ -302,7 +312,10 @@ class ForumForm(Form):
     def save(self):
     def save(self):
         forum = Forum(title=self.title.data,
         forum = Forum(title=self.title.data,
                       description=self.description.data,
                       description=self.description.data,
-                      position=self.position.data)
+                      position=self.position.data,
+                      external=self.external.data,
+                      show_moderators=self.show_moderators.data,
+                      locked=self.locked.data)
 
 
         if self.moderators.data:
         if self.moderators.data:
             # is already validated
             # is already validated
@@ -313,6 +326,17 @@ class ForumForm(Form):
         return forum.save()
         return forum.save()
 
 
 
 
+class EditForumForm(ForumForm):
+    def __init__(self, forum, *args, **kwargs):
+        self.forum = forum
+        kwargs['obj'] = self.forum
+        super(ForumForm, self).__init__(*args, **kwargs)
+
+
+class AddForumForm(ForumForm):
+    pass
+
+
 class CategoryForm(Form):
 class CategoryForm(Form):
     title = TextField("Category title", validators=[
     title = TextField("Category title", validators=[
         Required(message="Category title required")])
         Required(message="Category title required")])

+ 6 - 11
flaskbb/admin/views.py

@@ -20,7 +20,8 @@ from flaskbb.extensions import db
 from flaskbb.user.models import User, Group
 from flaskbb.user.models import User, Group
 from flaskbb.forum.models import Post, Topic, Forum, Category
 from flaskbb.forum.models import Post, Topic, Forum, Category
 from flaskbb.admin.forms import (AddUserForm, EditUserForm, AddGroupForm,
 from flaskbb.admin.forms import (AddUserForm, EditUserForm, AddGroupForm,
-                                 EditGroupForm, ForumForm, CategoryForm)
+                                 EditGroupForm, EditForumForm, AddForumForm,
+                                 CategoryForm)
 
 
 
 
 admin = Blueprint("admin", __name__)
 admin = Blueprint("admin", __name__)
@@ -199,16 +200,9 @@ def add_group():
 def edit_forum(forum_id):
 def edit_forum(forum_id):
     forum = Forum.query.filter_by(id=forum_id).first_or_404()
     forum = Forum.query.filter_by(id=forum_id).first_or_404()
 
 
-    form = ForumForm()
-
+    form = EditForumForm(forum)
     if form.validate_on_submit():
     if form.validate_on_submit():
-        forum.title = form.title.data
-        forum.description = form.description.data
-        forum.position = form.position.data
-        forum.locked = form.locked.data
-        forum.category_id = form.category.data.id
-        forum.show_moderators = form.show_moderators.data
-
+        form.populate_obj(forum)
         forum.save(moderators=form.moderators.data)
         forum.save(moderators=form.moderators.data)
 
 
         flash("Forum successfully edited.", "success")
         flash("Forum successfully edited.", "success")
@@ -218,6 +212,7 @@ def edit_forum(forum_id):
         form.description.data = forum.description
         form.description.data = forum.description
         form.position.data = forum.position
         form.position.data = forum.position
         form.category.data = forum.category
         form.category.data = forum.category
+        form.external.data = forum.external
         form.locked.data = forum.locked
         form.locked.data = forum.locked
         form.show_moderators.data = forum.show_moderators
         form.show_moderators.data = forum.show_moderators
 
 
@@ -249,7 +244,7 @@ def delete_forum(forum_id):
 @admin.route("/forums/<int:category_id>/add", methods=["GET", "POST"])
 @admin.route("/forums/<int:category_id>/add", methods=["GET", "POST"])
 @admin_required
 @admin_required
 def add_forum(category_id=None):
 def add_forum(category_id=None):
-    form = ForumForm()
+    form = AddForumForm()
 
 
     if form.validate_on_submit():
     if form.validate_on_submit():
         form.save()
         form.save()

+ 1 - 0
flaskbb/forum/models.py

@@ -445,6 +445,7 @@ class Forum(db.Model):
     position = db.Column(db.Integer, default=1, nullable=False)
     position = db.Column(db.Integer, default=1, nullable=False)
     locked = db.Column(db.Boolean, default=False, nullable=False)
     locked = db.Column(db.Boolean, default=False, nullable=False)
     show_moderators = db.Column(db.Boolean, default=False, nullable=False)
     show_moderators = db.Column(db.Boolean, default=False, nullable=False)
+    external = db.Column(db.String)
 
 
     post_count = db.Column(db.Integer, default=0, nullable=False)
     post_count = db.Column(db.Integer, default=0, nullable=False)
     topic_count = db.Column(db.Integer, default=0, nullable=False)
     topic_count = db.Column(db.Integer, default=0, nullable=False)

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

@@ -14,6 +14,8 @@
         {{ horizontal_field(form.category) }}
         {{ horizontal_field(form.category) }}
         {{ horizontal_field(form.position) }}
         {{ horizontal_field(form.position) }}
 
 
+        {{ horizontal_field(form.external) }}
+
         {{ horizontal_field(form.moderators) }}
         {{ horizontal_field(form.moderators) }}
         {{ render_boolean_field(form.show_moderators) }}
         {{ render_boolean_field(form.show_moderators) }}
 
 

+ 24 - 1
flaskbb/templates/forum/category_layout.html

@@ -19,7 +19,29 @@
         <tr>
         <tr>
             <td align="center" valign="center" width="4%">
             <td align="center" valign="center" width="4%">
 
 
-            {% if forum[0]|forum_is_unread(forum[1], current_user) %}
+            {% if forum[0].external %}
+                <span class="fa fa-external-link" style="font-size: 2em"></span>
+            </td>
+
+            <td valign="top">
+                <strong><a href="{{ forum[0].external }}">{{ forum[0].title }}</a></strong>
+
+                <div class="forum-description">
+                    {% autoescape false %}
+                    {{ forum[0].description|markup }}
+                    {% endautoescape %}
+                </div>
+            </td>
+
+            <td valign="top" align="center" style="white-space: nowrap">-</td>
+            <td valign="top" align="center" style="white-space: nowrap">-</td>
+            <td valign="top" align="right" style="white-space: nowrap">-</td>
+            <!-- End external -->
+            {% else %}
+
+            {% if forum[0].locked %}
+                <span class="fa fa-lock" style="font-size: 2em"></span>
+            {% elif forum[0]|forum_is_unread(forum[1], current_user) %}
                 <span class="fa fa-comments" style="font-size: 2em"></span>
                 <span class="fa fa-comments" style="font-size: 2em"></span>
             {% else %}
             {% else %}
                 <span class="fa fa-comments-o" style="font-size: 2em"></span>
                 <span class="fa fa-comments-o" style="font-size: 2em"></span>
@@ -65,6 +87,7 @@
                 {% else %}
                 {% else %}
                 No posts
                 No posts
                 {% endif %}
                 {% endif %}
+            {% endif %}
             </td>
             </td>
         </tr>
         </tr>
         {% endfor %}
         {% endfor %}