summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-03 11:44:14 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-03 11:44:14 -0400
commit9babe8e48f4caaf58a7c5daf5b657b6438e7fb51 (patch)
tree607221bb2a1e2549dfc6fbd6d75119c87188ba55
parentc66ee4e94db3df1067cb484b1c9f8e4445600e3c (diff)
downloadaskbot-9babe8e48f4caaf58a7c5daf5b657b6438e7fb51.tar.gz
askbot-9babe8e48f4caaf58a7c5daf5b657b6438e7fb51.tar.bz2
askbot-9babe8e48f4caaf58a7c5daf5b657b6438e7fb51.zip
added more changes that should have been included into the previous commit
-rw-r--r--askbot/models/__init__.py10
-rw-r--r--askbot/models/user.py25
-rw-r--r--askbot/skins/common/media/js/post.js6
-rw-r--r--askbot/skins/default/templates/macros.html38
-rw-r--r--askbot/skins/default/templates/widgets/group_info.html4
-rw-r--r--askbot/views/commands.py6
-rw-r--r--askbot/views/users.py20
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 #}
<br/>
{{ 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') %}
<button
- class="group-join-btn follow-toggle {% if is_member %}on on-state{% endif %}"
+ class="group-join-btn follow-toggle {% if membership_level != 'none' %}on on-state{% endif %}"
data-group-id="{{group_id}}"
- data-off-prompt-text="{% trans %}Leave this group{% endtrans %}"
- data-on-prompt-text="{% trans %}Join this group{% endtrans %}"
- data-on-state-text="{% trans %}You are a member{% endtrans %}"
- data-off-state-text="{% trans %}Join this group{% endtrans %}"
+ {% if acceptance_level == 'open' %}
+ data-off-prompt-text="{% trans %}Leave this group{% endtrans %}"
+ data-on-prompt-text="{% trans %}Join this group{% endtrans %}"
+ data-on-state-text="{% trans %}You are a member{% endtrans %}"
+ data-off-state-text="{% trans %}Join this group{% endtrans %}"
+ {% else %}
+ {% if membership_level == 'full' %}
+ data-off-prompt-text="{% trans %}Leave this group{% endtrans %}"
+ data-on-state-text="{% trans %}You are a member{% endtrans %}"
+ {% else %}
+ data-off-prompt-text="{% trans %}Cancel application{% endtrans %}"
+ data-on-state-text="{% trans %}Waiting approval{% endtrans %}"
+ {% endif %}
+ data-on-prompt-text="{% trans %}Ask to join{% endtrans %}"
+ data-off-state-text="{% trans %}Ask to join{% endtrans %}"
+ {% endif %}
>
- {% if is_member %}
+ {% if membership_level == 'full' %}
{% trans %}You are a member{% endtrans %}
{% else %}
- {% if can_join %}
+ {% if acceptance_level == 'open' %}
{% trans %}Join this group{% endtrans %}
+ {% else %}
+ {% trans %}Ask to join{% endtrans %}
{% endif %}
{% endif %}
</button>
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 @@
<div class="clearfix"></div>
{{ 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
}