Browse Source

I have refactored the template filters a bit

sh4nks 11 years ago
parent
commit
fb847ab34b

+ 10 - 70
flaskbb/app.py

@@ -29,8 +29,9 @@ from flaskbb.forum.views import forum
 from flaskbb.forum.models import *
 from flaskbb.forum.models import *
 
 
 from flaskbb.extensions import db, login_manager, mail, cache #toolbar
 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 = (
 DEFAULT_BLUEPRINTS = (
     (forum, ""),
     (forum, ""),
@@ -125,75 +126,14 @@ def configure_template_filters(app):
     """
     """
     Configures the template filters
     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):
 def configure_before_handlers(app):
     """
     """

+ 1 - 0
flaskbb/configs/base.py

@@ -63,3 +63,4 @@ class BaseConfig(object):
     USERS_PER_PAGE = 10
     USERS_PER_PAGE = 10
 
 
     LAST_SEEN = 15
     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)
                    request, flash)
 from flask.ext.login import login_required, current_user
 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.models import Category, Forum, Topic, Post
 from flaskbb.forum.forms import QuickreplyForm, ReplyForm, NewTopicForm
 from flaskbb.forum.forms import QuickreplyForm, ReplyForm, NewTopicForm
 from flaskbb.user.models import User
 from flaskbb.user.models import User
@@ -35,7 +35,7 @@ def index():
     post_count = Post.query.count()
     post_count = Post.query.count()
     newest_user = User.query.order_by(User.id.desc()).first()
     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,
     return render_template("forum/index.html", categories=categories,
                            stats={'user_count': user_count,
                            stats={'user_count': user_count,
@@ -88,7 +88,7 @@ def view_topic(topic_id):
 
 
     return render_template("forum/topic.html", topic=topic, posts=posts,
     return render_template("forum/topic.html", topic=topic, posts=posts,
                            per_page=current_app.config['POSTS_PER_PAGE'],
                            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>")
 @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):
 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):
     if can_moderate(user, forum):
         return True
         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):
 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:
     if user.permissions['mod'] and user.id in forum.moderators:
         return True
         return True
-    return False
+    return user.permissions['super_mod'] or user.permissions['admin']
 
 
 
 
-def last_seen():
+def time_diff():
     now = datetime.datetime.utcnow()
     now = datetime.datetime.utcnow()
     diff = now - datetime.timedelta(minutes=current_app.config['LAST_SEEN'])
     diff = now - datetime.timedelta(minutes=current_app.config['LAST_SEEN'])
     return diff
     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">
             <td valign="top" align="right" style="white-space: nowrap">
                 {% if forum.last_post_id %}
                 {% if forum.last_post_id %}
                 <a href="{{ url_for('forum.view_post', post_id=forum.last_post_id) }}" title="{{ forum.last_post.topic.title }}">
                 <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>
                 </a>
                 <br />
                 <br />
                 {{ forum.last_post.date_created|time_since }}<br />
                 {{ forum.last_post.date_created|time_since }}<br />