src/cm/views/user.py
changeset 38 be1807d390d4
parent 0 40c8f766c9b8
child 42 82f6e2879e0a
--- a/src/cm/views/user.py	Thu Dec 10 13:44:01 2009 +0100
+++ b/src/cm/views/user.py	Thu Dec 10 14:27:12 2009 +0100
@@ -22,6 +22,7 @@
 from cm.views import get_keys_from_dict
 from cm.security import has_global_perm
 from cm.exception import UnauthorizedException
+from tagging.models import Tag
 import sys
 import re
 
@@ -30,6 +31,7 @@
 @has_global_perm('can_manage_workspace')
 def user_list(request):    
     display_suspended_users = get_int(request.GET, 'display', 0)
+    tag_selected = request.GET.get('tag_selected', 0)
     paginate_by = get_int(request.GET, 'paginate', USER_PAGINATION)
     order_by = get_among(request.GET, 'order', ('user__username',
                                               'user__email',
@@ -105,12 +107,26 @@
                'all_roles' : Role.objects.all(),
                'anon_roles' : Role.objects.filter(anon=True),
                'display_suspended_users' : display_suspended_users,
+               'tag_list' : Tag.objects.usage_for_model(UserProfile),
+               'tag_selected': tag_selected,
                }
     
-    query = UserRole.objects.filter(text=None).filter(~Q(user=None)).order_by(order_by)
+    query = UserRole.objects.select_related().filter(text=None).filter(~Q(user=None)).order_by(order_by)
     if not display_suspended_users:
         query = query.exclude(Q(user__userprofile__is_suspended=True) & Q(user__is_active=True))
-        
+
+    if tag_selected:     
+        tag_ids = Tag.objects.filter(name=tag_selected)
+        if tag_ids:   
+            content_type_id = ContentType.objects.get_for_model(UserProfile).pk
+            # table cm_userprofile is not present if display_suspended_users: fix this 
+            tables = ['tagging_taggeditem', 'cm_userprofile'] if display_suspended_users else ['tagging_taggeditem']  
+            query = query.extra(where=['tagging_taggeditem.object_id = cm_userprofile.id', 
+                                       'tagging_taggeditem.content_type_id = %i' %content_type_id,
+                                       'tagging_taggeditem.tag_id = %i' %tag_ids[0].id],
+                                tables=tables,
+                                )
+
     return object_list(request, query,
                        template_name='site/user_list.html',
                        paginate_by=paginate_by,
@@ -183,7 +199,7 @@
 class UserProfileForm(ModelForm):
     class Meta:
         model = UserProfile
-        fields = ('allow_contact', 'preferred_language', 'is_suspended')
+        fields = ('allow_contact', 'preferred_language', 'is_suspended', 'tags')
 
 class MyUserProfileForm(ModelForm):
     class Meta:
@@ -193,7 +209,7 @@
 class UserProfileAddForm(ModelForm):
     class Meta:
         model = UserProfile
-        fields = ('preferred_language',)
+        fields = ('preferred_language', 'tags')
 
 class UserAddForm(forms.Form):
     note = forms.CharField(label=ugettext_lazy(u'Note'),