summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-07-08 13:38:33 -0600
committerAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-07-08 13:38:33 -0600
commitf12e2c38da271e44cd497de737023f165fdcb6c3 (patch)
treedcbc15a951223887724c81f0b363e90046be9ec4
parente019c4125b402ecdd26f6d41368725aa48a68337 (diff)
downloadaskbot-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.js20
-rw-r--r--askbot/models/__init__.py10
-rw-r--r--askbot/templates/meta/html_head_javascript.html1
-rw-r--r--askbot/templates/question.html1
-rw-r--r--askbot/views/readers.py4
-rw-r--r--askbot/views/writers.py3
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)