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

I have refactored the template filters a bit

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

+ 10 - 70
flaskbb/app.py

@@ -29,8 +29,9 @@ from flaskbb.forum.views import forum
 from flaskbb.forum.models import *
 
 from flaskbb.extensions import db, login_manager, mail, cache #toolbar
-from flaskbb.helpers import time_delta_format, last_seen, can_moderate
 
+from flaskbb.template_filters import (format_date, time_since, is_online,
+    edit_post, delete_post, delete_topic, post_reply, crop_title)
 
 DEFAULT_BLUEPRINTS = (
     (forum, ""),
@@ -125,75 +126,14 @@ def configure_template_filters(app):
     """
     Configures the template filters
     """
-
-    @app.template_filter()
-    def format_date(value, format='%Y-%m-%d'):
-        """
-        Returns a formatted time string
-        """
-        return value.strftime(format)
-
-    @app.template_filter()
-    def time_since(value):
-        return time_delta_format(value)
-
-    @app.template_filter()
-    def is_online(user):
-        return user.lastseen >= last_seen()
-
-    @app.template_filter()
-    def is_current_user(user, post):
-        """
-        Check if the post is written by the user
-        """
-        return post.user_id == user.id
-
-    @app.template_filter()
-    def edit_post(user, post, forum):
-        """
-        Check if the post can be edited by the user
-        """
-        if can_moderate(user, forum):
-            return True
-        if user.is_authenticated():
-            return post.user_id == user.id and user.permissions['editpost']
-        return False
-
-    @app.template_filter()
-    def delete_post(user, post, forum):
-        """
-        Check if the post can be edited by the user
-        """
-        if can_moderate(user, forum):
-            return True
-        if user.is_authenticated():
-            return post.user_id == user.id and user.permissions['deletepost']
-        return False
-
-    @app.template_filter()
-    def delete_topic(user, post, forum):
-        if can_moderate(user, forum):
-            return True
-        if user.is_authenticated():
-            return post.user_id == user.id and user.permissions['deletetopic']
-        return False
-
-
-    @app.template_filter()
-    def post_reply(user, forum):
-        if can_moderate(user, forum):
-            return True
-        if user.permissions['postreply']:
-            return True
-        return False
-
-
-    @app.template_filter()
-    def crop_topic_title(title):
-        if len(title) > 15:
-            return title[:15] + "..."
-        return title
-
+    app.jinja_env.filters['format_date'] = format_date
+    app.jinja_env.filters['time_since'] = time_since
+    app.jinja_env.filters['is_online'] = is_online
+    app.jinja_env.filters['edit_post'] = edit_post
+    app.jinja_env.filters['delete_post'] = delete_post
+    app.jinja_env.filters['delete_topic'] = delete_topic
+    app.jinja_env.filters['post_reply'] = post_reply
+    app.jinja_env.filters['crop_title'] = crop_title
 
 def configure_before_handlers(app):
     """

+ 1 - 0
flaskbb/configs/base.py

@@ -63,3 +63,4 @@ class BaseConfig(object):
     USERS_PER_PAGE = 10
 
     LAST_SEEN = 15
+    TITLE_LENGTH = 15

+ 3 - 3
flaskbb/forum/views.py

@@ -16,7 +16,7 @@ from flask import (Blueprint, render_template, redirect, url_for, current_app,
                    request, flash)
 from flask.ext.login import login_required, current_user
 
-from flaskbb.helpers import last_seen, can_moderate, check_perm
+from flaskbb.helpers import time_diff, check_perm
 from flaskbb.forum.models import Category, Forum, Topic, Post
 from flaskbb.forum.forms import QuickreplyForm, ReplyForm, NewTopicForm
 from flaskbb.user.models import User
@@ -35,7 +35,7 @@ def index():
     post_count = Post.query.count()
     newest_user = User.query.order_by(User.id.desc()).first()
 
-    online_users = User.query.filter(User.lastseen >= last_seen())
+    online_users = User.query.filter(User.lastseen >= time_diff())
 
     return render_template("forum/index.html", categories=categories,
                            stats={'user_count': user_count,
@@ -88,7 +88,7 @@ def view_topic(topic_id):
 
     return render_template("forum/topic.html", topic=topic, posts=posts,
                            per_page=current_app.config['POSTS_PER_PAGE'],
-                           last_seen=last_seen(), form=form)
+                           last_seen=time_diff(), form=form)
 
 
 @forum.route("/post/<int:post_id>")

+ 5 - 11
flaskbb/helpers.py

@@ -18,26 +18,20 @@ from wtforms.widgets.core import Select, HTMLString, html_params
 
 
 def check_perm(user, perm, forum, post_user_id=None):
-    if post_user_id:
-        return user.permissions[perm] and user.id == post_user_id
-    else:
-        return user.permissions[perm]
     if can_moderate(user, forum):
         return True
-    return False
+    if post_user_id and user.is_authenticated():
+        return user.permissions[perm] and user.id == post_user_id
+    return user.permissions[perm]
 
 
 def can_moderate(user, forum):
-    if not user.is_authenticated():
-        return False
-    if user.permissions['super_mod'] or user.permissions['admin']:
-        return True
     if user.permissions['mod'] and user.id in forum.moderators:
         return True
-    return False
+    return user.permissions['super_mod'] or user.permissions['admin']
 
 
-def last_seen():
+def time_diff():
     now = datetime.datetime.utcnow()
     diff = now - datetime.timedelta(minutes=current_app.config['LAST_SEEN'])
     return diff

+ 56 - 0
flaskbb/template_filters.py

@@ -0,0 +1,56 @@
+from flask import current_app
+from flaskbb.helpers import time_diff, time_delta_format, check_perm
+
+def format_date(value, format='%Y-%m-%d'):
+    """
+    Returns a formatted time string
+    """
+    return value.strftime(format)
+
+def time_since(value):
+    return time_delta_format(value)
+
+def is_online(user):
+    return user.lastseen >= time_diff()
+
+def is_current_user(user, post):
+    """
+    Check if the post is written by the user
+    """
+    return post.user_id == user.id
+
+def edit_post(user, post, forum):
+    """
+    Check if the post can be edited by the user
+    """
+    return check_perm(user, 'deletepost', forum, post.user_id)
+
+def delete_post(user, post, forum):
+    """
+    Check if the post can be edited by the user
+    """
+    return check_perm(user, 'deletepost', forum, post.user_id)
+
+
+def delete_topic(user, post, forum):
+    """
+    Check if the topic can be deleted by the user
+    """
+    return check_perm(user, 'deletetopic', forum, post.user_id)
+
+
+def post_reply(user, forum):
+    """
+    Check if the user is allowed to post in the forum
+    """
+    return check_perm(user, 'postreply', forum)
+
+
+def crop_title(title):
+    """
+    Crops the title to a specified length
+    """
+    length = current_app.config['TITLE_LENGTH']
+    if len(title) > length:
+        return title[:length] + "..."
+    return title

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

@@ -37,7 +37,7 @@
             <td valign="top" align="right" style="white-space: nowrap">
                 {% if forum.last_post_id %}
                 <a href="{{ url_for('forum.view_post', post_id=forum.last_post_id) }}" title="{{ forum.last_post.topic.title }}">
-                    <strong>{{ forum.last_post.topic.title|crop_topic_title() }}</strong>
+                    <strong>{{ forum.last_post.topic.title|crop_title }}</strong>
                 </a>
                 <br />
                 {{ forum.last_post.date_created|time_since }}<br />