From 9babe8e48f4caaf58a7c5daf5b657b6438e7fb51 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Mon, 3 Sep 2012 11:44:14 -0400 Subject: added more changes that should have been included into the previous commit --- askbot/models/__init__.py | 10 +++--- askbot/models/user.py | 25 +++++++++----- askbot/skins/common/media/js/post.js | 6 +++- askbot/skins/default/templates/macros.html | 38 +++++++++++++++------- .../default/templates/widgets/group_info.html | 4 +-- askbot/views/commands.py | 6 ++-- askbot/views/users.py | 20 ++++++------ 7 files changed, 68 insertions(+), 41 deletions(-) diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 63d89002..43bfeaad 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -2231,8 +2231,8 @@ def user_can_make_group_private_posts(self): def user_get_groups_membership_info(self, groups): """returts a defaultdict with values that are dictionaries with the following keys and values: - * key: can_join, value: True if user can join group - * key: is_member, value: True if user is member of group + * key: acceptance_level, value: 'closed', 'moderated', 'open' + * key: membership_level, value: 'none', 'pending', 'full' ``groups`` is a group tag query set """ @@ -2243,13 +2243,13 @@ def user_get_groups_membership_info(self, groups): ) info = collections.defaultdict( - lambda: {'can_join': False, 'is_member': False} + lambda: {'acceptance_level': 'closed', 'membership_level': 'none'} ) for membership in memberships: - info[membership.group_id]['is_member'] = True + info[membership.group_id]['membership_level'] = 'full' for group in groups: - info[group.id]['can_join'] = group.can_accept_user(self) + info[group.id]['acceptance_level'] = group.get_acceptance_level_for_user(self) return info diff --git a/askbot/models/user.py b/askbot/models/user.py index 14fa9f16..b489e2c6 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -442,29 +442,36 @@ class Group(AuthGroup): (Group.CLOSED, _('Moderator adds users')) ) - def can_accept_user(self, user): - """True if user is preapproved to join the group""" + def get_acceptance_level_for_user(self, user): + """returns descriptive value, because it is to be used in the + templates""" if user.is_anonymous(): - return False + return 'closed' #a special case - automatic global group cannot be joined or left if self.name == askbot_settings.GLOBAL_GROUP_NAME: - return False + return 'closed' + + #todo - return 'closed' for internal per user groups too if self.openness == Group.OPEN: - return True + return 'open' if user.is_administrator_or_moderator(): - return True + return 'open' #relying on a specific method of storage - return email_is_allowed( + if email_is_allowed( user.email, allowed_emails=self.preapproved_emails, allowed_email_domains=self.preapproved_email_domains - ) + ): + return 'open' + + if self.openness == Group.MODERATED: + return 'moderated' - return False + return 'closed' def clean(self): """called in `save()` diff --git a/askbot/skins/common/media/js/post.js b/askbot/skins/common/media/js/post.js index ab1d8b6e..22b8cf9b 100644 --- a/askbot/skins/common/media/js/post.js +++ b/askbot/skins/common/media/js/post.js @@ -2607,7 +2607,11 @@ GroupJoinButton.prototype.getHandler = function(){ url: askbot['urls']['join_or_leave_group'], success: function(data){ if (data['success']){ - var new_state = data['is_member'] ? 'on-state':'off-state'; + var level = data['membership_level']; + var new_state = 'off-state'; + if (level == 'full' || level == 'pending') { + new_state = 'on-state'; + } me.setState(new_state); } else { showMessage(me.getElement(), data['message']); diff --git a/askbot/skins/default/templates/macros.html b/askbot/skins/default/templates/macros.html index 122d90c8..cf6bb922 100644 --- a/askbot/skins/default/templates/macros.html +++ b/askbot/skins/default/templates/macros.html @@ -230,8 +230,8 @@ poor design of the data or methods on data objects #}
{{ group_join_button( group_id = group.id, - can_join = membership_info['can_join'], - is_member = membership_info['is_member'] + acceptance_level = membership_info['aceptance_level'], + membership_level = membership_info['membership_level'] ) }} {% endif %} @@ -248,21 +248,37 @@ poor design of the data or methods on data objects #} {% endif %} {%- endmacro -%} -{%- macro group_join_button(group_id = None, can_join = False, is_member = False) -%} - {% if can_join %} +{%- macro group_join_button( + group_id=None, acceptance_level='closed', membership_level='none') +-%} + {% if acceptance_level in ('open', 'moderated') %} diff --git a/askbot/skins/default/templates/widgets/group_info.html b/askbot/skins/default/templates/widgets/group_info.html index b0284cd5..ce7b252f 100644 --- a/askbot/skins/default/templates/widgets/group_info.html +++ b/askbot/skins/default/templates/widgets/group_info.html @@ -16,8 +16,8 @@
{{ macros.group_join_button( group_id = group.id, - can_join = user_can_join_group, - is_member = user_is_group_member + acceptance_level = user_acceptance_level, + membership_level = user_is_group_member ) }} {% if request.user.is_authenticated() and request.user.is_administrator() %} diff --git a/askbot/views/commands.py b/askbot/views/commands.py index 71059aa0..0f050573 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -1042,16 +1042,16 @@ def join_or_leave_group(request): if request.user.is_group_member(group): action = 'remove' - is_member = False + membership_level = 'none' else: action = 'add' - is_member = True + membership_level = 'full' request.user.edit_group_membership( user = request.user, group = group, action = action ) - return {'is_member': is_member} + return {'membership_level': membership_level} @csrf.csrf_exempt diff --git a/askbot/views/users.py b/askbot/views/users.py index 050f8ad2..d31d214d 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -71,8 +71,8 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): users = models.User.objects.exclude(status = 'b') group = None group_email_moderation_enabled = False - user_can_join_group = False - user_is_group_member = False + user_acceptance_level = 'closed' + user_membership_level = 'none' if by_group == True: if askbot_settings.GROUPS_ENABLED == False: raise Http404 @@ -87,18 +87,18 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): askbot_settings.GROUP_EMAIL_ADDRESSES_ENABLED \ and askbot_settings.ENABLE_CONTENT_MODERATION ) - user_can_join_group = group.can_accept_user(request.user) + user_acceptance_level = group.get_acceptance_level_for_user( + request.user + ) except models.Group.DoesNotExist: raise Http404 if group_slug == slugify(group.name): users = users.filter(groups__id = group_id ) if request.user.is_authenticated(): - user_is_group_member = bool( - users.filter( - id = request.user.id - ).count() - ) + if bool(users.filter(id = request.user.id).count()): + user_membership_level = 'full' + else: group_page_url = reverse( 'users_by_group', @@ -185,8 +185,8 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): 'tab_id' : sortby, 'paginator_context' : paginator_context, 'group_email_moderation_enabled': group_email_moderation_enabled, - 'user_can_join_group': user_can_join_group, - 'user_is_group_member': user_is_group_member, + 'user_acceptance_level': user_acceptance_level, + 'user_membership_level': user_membership_level, 'user_groups': user_groups, 'group_openness_choices': group_openness_choices } -- cgit v1.2.3-1-g7c22