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

Added "external link" forum type

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

+ 1 - 1
README.md

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

+ 25 - 1
flaskbb/admin/forms.py

@@ -254,6 +254,10 @@ class ForumForm(Form):
         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",
         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."
     )
 
+    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):
         if field.data and not self.moderators.data:
             raise ValidationError("You also need to specify some moderators.")
@@ -302,7 +312,10 @@ class ForumForm(Form):
     def save(self):
         forum = Forum(title=self.title.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:
             # is already validated
@@ -313,6 +326,17 @@ class ForumForm(Form):
         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):
     title = TextField("Category title", validators=[
         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.forum.models import Post, Topic, Forum, Category
 from flaskbb.admin.forms import (AddUserForm, EditUserForm, AddGroupForm,
-                                 EditGroupForm, ForumForm, CategoryForm)
+                                 EditGroupForm, EditForumForm, AddForumForm,
+                                 CategoryForm)
 
 
 admin = Blueprint("admin", __name__)
@@ -199,16 +200,9 @@ def add_group():
 def edit_forum(forum_id):
     forum = Forum.query.filter_by(id=forum_id).first_or_404()
 
-    form = ForumForm()
-
+    form = EditForumForm(forum)
     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)
 
         flash("Forum successfully edited.", "success")
@@ -218,6 +212,7 @@ def edit_forum(forum_id):
         form.description.data = forum.description
         form.position.data = forum.position
         form.category.data = forum.category
+        form.external.data = forum.external
         form.locked.data = forum.locked
         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_required
 def add_forum(category_id=None):
-    form = ForumForm()
+    form = AddForumForm()
 
     if form.validate_on_submit():
         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)
     locked = 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)
     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.position) }}
 
+        {{ horizontal_field(form.external) }}
+
         {{ horizontal_field(form.moderators) }}
         {{ render_boolean_field(form.show_moderators) }}
 

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

@@ -19,7 +19,29 @@
         <tr>
             <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>
             {% else %}
                 <span class="fa fa-comments-o" style="font-size: 2em"></span>
@@ -65,6 +87,7 @@
                 {% else %}
                 No posts
                 {% endif %}
+            {% endif %}
             </td>
         </tr>
         {% endfor %}