diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-07-08 13:38:33 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-07-08 13:38:33 -0600 |
commit | f12e2c38da271e44cd497de737023f165fdcb6c3 (patch) | |
tree | dcbc15a951223887724c81f0b363e90046be9ec4 | |
parent | e019c4125b402ecdd26f6d41368725aa48a68337 (diff) | |
download | askbot-f12e2c38da271e44cd497de737023f165fdcb6c3.tar.gz askbot-f12e2c38da271e44cd497de737023f165fdcb6c3.tar.bz2 askbot-f12e2c38da271e44cd497de737023f165fdcb6c3.zip |
Fixes: if "read only" user clicks "ask button" - show message via js and not
load the ask page
-rw-r--r-- | askbot/media/js/post.js | 20 | ||||
-rw-r--r-- | askbot/models/__init__.py | 10 | ||||
-rw-r--r-- | askbot/templates/meta/html_head_javascript.html | 1 | ||||
-rw-r--r-- | askbot/templates/question.html | 1 | ||||
-rw-r--r-- | askbot/views/readers.py | 4 | ||||
-rw-r--r-- | askbot/views/writers.py | 3 |
6 files changed, 32 insertions, 7 deletions
diff --git a/askbot/media/js/post.js b/askbot/media/js/post.js index bcc911b0..8ff2e840 100644 --- a/askbot/media/js/post.js +++ b/askbot/media/js/post.js @@ -4620,6 +4620,23 @@ CategorySelectorLoader.prototype.decorate = function(element) { ); }; +var AskButton = function(){ + WrappedElement.call(this); +}; +inherits(AskButton, WrappedElement); + +AskButton.prototype.decorate = function(element){ + this._element = element; + this._element.click(this.clickCallback); +}; + +AskButton.prototype.clickCallback = function(e){ + if (askbot['data']['groupReadOnly'] === true){ + notify.show(gettext('This group is read only.')); + e.preventDefault(); + } +}; + $(document).ready(function() { $('[id^="comments-for-"]').each(function(index, element){ var comments = new PostCommentsWidget(); @@ -4731,6 +4748,9 @@ $(document).ready(function() { groupsPopup.setHeadingText(gettext('Shared with the following groups:')); groupsPopup.decorate(showSharedGroups); } + + var askButton = new AskButton(); + askButton.decorate($("#askButton")); }); /* google prettify.js from google code */ diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 8538cb93..37210d78 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -527,6 +527,12 @@ def user_notify_users( activity.save() activity.add_recipients(recipients) +def user_is_read_only(self): + if self.is_authenticated() and askbot_settings.GROUPS_ENABLED: + return bool(self.get_groups().filter(read_only=True).count()) + else: + return False + def user_get_notifications(self, notification_types=None, **kwargs): """returns query set of activity audit status objects""" return ActivityAuditStatus.objects.filter( @@ -563,8 +569,7 @@ def _assert_user_can( if askbot_settings.GROUPS_ENABLED: assert(user) - is_on_read_only_group = user.get_groups().filter(read_only=True).count() - if is_on_read_only_group: + if user.is_read_only(): raise django_exceptions.PermissionDenied(group_read_only_error_message) if general_error_message is None: @@ -3054,6 +3059,7 @@ User.add_to_class( ) User.add_to_class('approve_post_revision', user_approve_post_revision) User.add_to_class('notify_users', user_notify_users) +User.add_to_class('is_read_only', user_is_read_only) #assertions User.add_to_class('assert_can_vote_for_post', user_assert_can_vote_for_post) diff --git a/askbot/templates/meta/html_head_javascript.html b/askbot/templates/meta/html_head_javascript.html index 1a1531f7..88071026 100644 --- a/askbot/templates/meta/html_head_javascript.html +++ b/askbot/templates/meta/html_head_javascript.html @@ -16,6 +16,7 @@ askbot['urls'] = {}; askbot['settings'] = {}; askbot['messages'] = {}; + askbot['data']['groupReadOnly'] = {{ request.user.is_read_only()|as_js_bool }}; </script> <script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script> {# avoid adding javascript here so that pages load faster #} diff --git a/askbot/templates/question.html b/askbot/templates/question.html index e768c44c..ca2f4022 100644 --- a/askbot/templates/question.html +++ b/askbot/templates/question.html @@ -15,7 +15,6 @@ //below is pure cross-browser javascript, no jQuery askbot['data']['userIsThreadModerator'] = {% if user_is_thread_moderator %}true{% else %}false{% endif %}; askbot['data']['oldestAnswerId'] = {% if oldest_answer_id %}{{ oldest_answer_id }}{% else %}-1{% endif %}; - askbot['data']['groupReadOnly'] = {% if group_read_only %}true{%else%}false{%endif%}; (function(){ var hasClass = function(node, selector) { diff --git a/askbot/views/readers.py b/askbot/views/readers.py index 2783a6b0..5c6f3477 100644 --- a/askbot/views/readers.py +++ b/askbot/views/readers.py @@ -241,7 +241,7 @@ def questions(request, **kwargs): ) template_data.update(extra_context) - #and one more thing:) give admin user heads up about + #and one more thing:) give admin user heads up about #setting the domain name if they have not done that yet #todo: move this out to a separate middleware if request.user.is_authenticated() and request.user.is_administrator(): @@ -581,7 +581,7 @@ def question(request, id):#refactor - long subroutine. display question body, an break if askbot_settings.GROUPS_ENABLED: - group_read_only = bool(request.user.get_groups().filter(read_only=True).count()) + group_read_only = request.user.is_read_only() else: group_read_only = False diff --git a/askbot/views/writers.py b/askbot/views/writers.py index 1986db41..6d79ae6e 100644 --- a/askbot/views/writers.py +++ b/askbot/views/writers.py @@ -221,8 +221,7 @@ def ask(request):#view used to ask a new question must login/register in order for the question go be shown """ if request.user.is_authenticated(): - is_on_read_only_group = request.user.get_groups().filter(read_only=True).count() - if is_on_read_only_group: + if request.user.is_read_only(): referer = request.META.get("HTTP_REFERER", reverse('questions')) request.user.message_set.create(message=_("You are not allowed to create content")) return HttpResponseRedirect(referer) |