# HG changeset patch # User neko259 # Date 2015-04-17 19:11:15 # Node ID d995bcab8a7d46e78fbc2f7c940555fd32b6fcc6 # Parent c40debda2db8ce0209b7e981793c60d52b3226e9 Show moderator controls when downloading a single post over API. Removed duplicate code from get_post_data diff --git a/boards/context_processors.py b/boards/context_processors.py --- a/boards/context_processors.py +++ b/boards/context_processors.py @@ -4,7 +4,7 @@ from boards.models.user import Notificat __author__ = 'neko259' -from boards import settings +from boards import settings, utils from boards.models import Post, Tag CONTEXT_SITE_NAME = 'site_name' @@ -19,7 +19,6 @@ CONTEXT_NEW_NOTIFICATIONS_COUNT = 'new_n CONTEXT_USERNAME = 'username' CONTEXT_TAGS_STR = 'tags_str' -PERMISSION_MODERATE = 'moderation' def get_notifications(context, request): @@ -36,14 +35,6 @@ def get_notifications(context, request): context[CONTEXT_USERNAME] = username -def get_moderator_permissions(context, request): - try: - moderate = request.user.has_perm(PERMISSION_MODERATE) - except AttributeError: - moderate = False - context[CONTEXT_MODERATOR] = moderate - - def user_and_ui_processor(request): context = dict() @@ -58,7 +49,7 @@ def user_and_ui_processor(request): context[CONTEXT_THEME_CSS] = 'css/' + theme + '/base_page.css' # This shows the moderator panel - get_moderator_permissions(context, request) + context[CONTEXT_MODERATOR] = utils.is_moderator(request) context[CONTEXT_VERSION] = settings.VERSION context[CONTEXT_SITE_NAME] = settings.SITE_NAME diff --git a/boards/forms.py b/boards/forms.py --- a/boards/forms.py +++ b/boards/forms.py @@ -277,8 +277,8 @@ class PostForm(NeboardForm): can_post = False - if can_post: - self.session[LAST_POST_TIME] = now + if can_post: + self.session[LAST_POST_TIME] = now def validate_image_size(self, size: int): if size > board_settings.MAX_IMAGE_SIZE: diff --git a/boards/models/post.py b/boards/models/post.py --- a/boards/models/post.py +++ b/boards/models/post.py @@ -14,7 +14,7 @@ from boards import settings from boards.mdx_neboard import Parser from boards.models import PostImage from boards.models.base import Viewable -from boards.utils import datetime_to_epoch, cached_result +from boards import utils from boards.models.user import Notification, Ban import boards.models.thread @@ -122,7 +122,7 @@ class PostManager(models.Manager): for post in posts: post.delete() - @cached_result() + @utils.cached_result() def get_posts_per_day(self) -> float: """ Gets average count of posts per day for the last 7 days @@ -209,7 +209,7 @@ class Post(models.Model, Viewable): return self.get_thread().get_opening_post_id() == self.id - @cached_result() + @utils.cached_result() def get_url(self): """ Gets full url to the post. @@ -294,6 +294,7 @@ class Post(models.Model, Viewable): logging.getLogger('boards.post.delete').info( 'Deleted post {}'.format(self)) + # TODO Implement this with OOP, e.g. use the factory and HtmlPostData class def get_post_data(self, format_type=DIFF_TYPE_JSON, request=None, include_last_update=False) -> str: """ @@ -302,14 +303,15 @@ class Post(models.Model, Viewable): """ if format_type == DIFF_TYPE_HTML: - params = dict() - params['post'] = self if PARAMETER_TRUNCATED in request.GET: - params[PARAMETER_TRUNCATED] = True + truncated = True + reply_link = False else: - params[PARAMETER_REPLY_LINK] = True + truncated = False + reply_link = True - return render_to_string('boards/api_post.html', params) + return self.get_view(truncated=truncated, reply_link=reply_link, + moderator=utils.is_moderator(request)) elif format_type == DIFF_TYPE_JSON: post_json = { 'id': self.id, @@ -321,7 +323,7 @@ class Post(models.Model, Viewable): post_json['image'] = post_image.image.url post_json['image_preview'] = post_image.image.url_200x150 if include_last_update: - post_json['bump_time'] = datetime_to_epoch( + post_json['bump_time'] = utils.datetime_to_epoch( self.get_thread().bump_time) return post_json diff --git a/boards/templates/boards/api_post.html b/boards/templates/boards/api_post.html deleted file mode 100644 --- a/boards/templates/boards/api_post.html +++ /dev/null @@ -1,3 +0,0 @@ -{% load board %} - -{% post_view post truncated=truncated reply_link=reply_link %} \ No newline at end of file diff --git a/boards/utils.py b/boards/utils.py --- a/boards/utils.py +++ b/boards/utils.py @@ -14,7 +14,7 @@ from neboard import settings CACHE_KEY_DELIMITER = '_' - +PERMISSION_MODERATE = 'moderation' def get_client_ip(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') @@ -74,3 +74,12 @@ def cached_result(key_method=None): return inner_func return _cached_result + + +def is_moderator(request): + try: + moderate = request.user.has_perm(PERMISSION_MODERATE) + except AttributeError: + moderate = False + + return moderate \ No newline at end of file