From 0cb6156c843686c4fbbbe1225cfa55c4c488eb89 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Tue, 20 Mar 2012 12:10:13 -0400 Subject: assigning users to groups works --- askbot/models/__init__.py | 2 +- askbot/models/tag.py | 29 +++++++++++++++++- askbot/models/user.py | 4 +-- askbot/skins/common/media/js/user.js | 34 ++++++++++++++++++++-- askbot/skins/default/templates/macros.html | 2 +- .../skins/default/templates/user_profile/user.html | 1 + askbot/urls.py | 5 ++++ askbot/utils/decorators.py | 2 ++ askbot/views/commands.py | 19 ++++++++++-- askbot/views/users.py | 2 +- 10 files changed, 89 insertions(+), 11 deletions(-) diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 19c1c559..bbda51bc 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -2176,7 +2176,7 @@ def user_update_wildcard_tag_selections( def user_add_user_to_group(self, user = None, group = None): """allows one user to add another to a pre-existing group""" - GroupMembership.objects.get_or_create(user, group) + GroupMembership.objects.get_or_create(user = user, group = group) User.add_to_class( diff --git a/askbot/models/tag.py b/askbot/models/tag.py index 1cfb1573..097c2df9 100644 --- a/askbot/models/tag.py +++ b/askbot/models/tag.py @@ -82,9 +82,23 @@ class TagManager(BaseQuerySetManager): def get_query_set(self): return TagQuerySet(self.model) - def get_or_create_group_tag(self, group_name = None, user = None): +#todo: implement this +#class GroupTagQuerySet(models.query.QuerySet): +# """Custom query set for the group""" +# def __init__(self, model): + +class GroupTagManager(TagManager): + """manager for group tags""" + +# def get_query_set(self): +# return GroupTagQuerySet(self.model) + + def get_or_create(self, group_name = None, user = None): """creates a group tag or finds one, if exists""" #todo: here we might fill out the group profile + + #replace spaces with dashes + group_name = re.sub('\s+', '-', group_name.strip()) try: tag = self.get(name = group_name) except self.model.DoesNotExist: @@ -92,6 +106,18 @@ class TagManager(BaseQuerySetManager): tag.save() return tag + #todo: maybe move this to query set + def get_for_user(self, user = None): + return self.filter(user_memberships__user = user) + + #todo: remove this when the custom query set is done + def get_all(self): + return self.annotate( + member_count = models.Count('user_memberships') + ).filter( + member_count__gt = 0 + ) + class Tag(models.Model): name = models.CharField(max_length=255, unique=True) created_by = models.ForeignKey(User, related_name='created_tags') @@ -109,6 +135,7 @@ class Tag(models.Model): ) objects = TagManager() + group_tags = GroupTagManager() class Meta: app_label = 'askbot' diff --git a/askbot/models/user.py b/askbot/models/user.py index c9a4e1e5..20861a2a 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -341,8 +341,8 @@ class GroupMembership(models.Model): that by being recorded with this relation automatically become group tags """ - group = models.ForeignKey(Tag) - user = models.ForeignKey(User) + group = models.ForeignKey(Tag, related_name = 'user_memberships') + user = models.ForeignKey(User, related_name = 'group_memberships') class Meta: app_label = 'askbot' diff --git a/askbot/skins/common/media/js/user.js b/askbot/skins/common/media/js/user.js index 8a8a7f50..aed926d1 100644 --- a/askbot/skins/common/media/js/user.js +++ b/askbot/skins/common/media/js/user.js @@ -26,7 +26,7 @@ $(document).ready(function(){ data: JSON.stringify({memo_list: id_list, action_type: action_type}), url: askbot['urls']['manageInbox'], success: function(response_data){ - if (response_data['success'] === true){ + if (response_data['success'] == true){ if (action_type == 'delete' || action_type == 'remove_flag' || action_type == 'close' || action_type == 'delete_post'){ elements.remove(); } @@ -220,6 +220,9 @@ FollowUser.prototype.toggleState = function(){ } }; +/** + * @constructor + */ GroupsContainer = function(){ WrappedElement.call(this); }; @@ -227,9 +230,22 @@ inherits(GroupsContainer, WrappedElement); GroupsContainer.prototype.decorate = function(element){ this._element = element; + var groups = {}; + //collect list of groups + $.each(element.find('li'), function(idx, li){ + groups[$(li).html()] = 1; + //var str = $(li).html(); + //var bytes = []; + //for (var i = 0; i {% if request.user|can_moderate_user(view_user) %} diff --git a/askbot/urls.py b/askbot/urls.py index 4cf00313..1cc51be3 100644 --- a/askbot/urls.py +++ b/askbot/urls.py @@ -192,6 +192,11 @@ urlpatterns = patterns('', views.commands.get_tag_list, name = 'get_tag_list' ), + url( + r'^get-groups-list/', + views.commands.get_groups_list, + name = 'get_groups_list' + ), url( r'^swap-question-with-answer/', views.commands.swap_question_with_answer, diff --git a/askbot/utils/decorators.py b/askbot/utils/decorators.py index 29e92645..c20b92e2 100644 --- a/askbot/utils/decorators.py +++ b/askbot/utils/decorators.py @@ -84,6 +84,8 @@ def ajax_only(view_func): raise Http404 try: data = view_func(request, *args, **kwargs) + if data is None: + data = {} except Exception, e: message = unicode(e) if message == '': diff --git a/askbot/views/commands.py b/askbot/views/commands.py index c534d87a..2a7f9a0a 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -436,7 +436,20 @@ def get_tag_list(request): 'name', flat = True ) output = '\n'.join(tag_names) - return HttpResponse(output, mimetype = "text/plain") + return HttpResponse(output, mimetype = 'text/plain') + +@decorators.get_only +def get_groups_list(request): + """returns names of group tags + for the autocomplete function""" + group_names = models.Tag.group_tags.get_all().filter( + deleted = False + ).values_list( + 'name', flat = True + ) + group_names = map(lambda v: v.replace('-', ' '), group_names) + output = '\n'.join(group_names) + return HttpResponse(output, mimetype = 'text/plain') @csrf.csrf_protect def subscribe_for_tags(request): @@ -656,8 +669,6 @@ def add_user_to_group(request): if form.is_valid(): group_name = form.cleaned_data['group_name'] user_id = form.cleaned_data['user_id'] - - group = models.Tag.get_or_create_group_tag(group_name) try: user = models.User.objects.get(id = user_id) except models.User.DoesNotExist: @@ -665,6 +676,8 @@ def add_user_to_group(request): 'user with id %d not found' % user_id ) + group_params = {'group_name': group_name, 'user': user} + group = models.Tag.group_tags.get_or_create(**group_params) request.user.add_user_to_group(user, group) else: raise exceptions.PermissionDenied() diff --git a/askbot/views/users.py b/askbot/views/users.py index c625aeab..9858b872 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -394,7 +394,7 @@ def user_stats(request, user, context): 'votes_total_per_day': votes_total, 'user_tags' : user_tags, - + 'user_groups': models.Tag.group_tags.get_for_user(user = user), 'badges': badges, 'total_badges' : len(badges), } -- cgit v1.2.3-1-g7c22