Browse Source

Users are now searchable by rank or role

Ralfp 12 years ago
parent
commit
e9cafd7597

+ 4 - 0
misago/acl/models.py

@@ -1,4 +1,5 @@
 from django.db import models
+from django.utils.translation import ugettext_lazy as _
 
 class Role(models.Model):
     """
@@ -7,5 +8,8 @@ class Role(models.Model):
     name = models.CharField(max_length=255)
     token = models.CharField(max_length=255,null=True,blank=True)
     
+    def __unicode__(self):
+        return unicode(_(self.name))
+    
     def is_special(self):
         return token

+ 7 - 1
misago/users/admin/users/forms.py

@@ -1,11 +1,15 @@
 from django.utils.translation import ugettext_lazy as _
 from django import forms
+from misago.acl.models import Role
 from misago.forms import Form
+from misago.users.models import Rank
 
 class SearchUsersForm(Form):
     username = forms.CharField(max_length=255, required=False)
     email = forms.CharField(max_length=255, required=False)
-    activation = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,choices=(('0', _("Already Active")), ('1', _("By User")), ('2', _("By Administrator"))),required=False)
+    activation = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=(('0', _("Already Active")), ('1', _("By User")), ('2', _("By Administrator"))), required=False)
+    rank = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Rank.objects.order_by('order').all(), required=False)
+    role = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Role.objects.order_by('name').all(), required=False)
     layout = (
               (
                _("Search Users"),
@@ -13,6 +17,8 @@ class SearchUsersForm(Form):
                 ('username', {'label': _("Username"), 'attrs': {'placeholder': _("Username contains...")}}),
                 ('email', {'label': _("E-mail Address"), 'attrs': {'placeholder': _("E-mail address contains...")}}),
                 ('activation', {'label': _("Activation Requirement")}),
+                ('rank', {'label': _("Rank is")}),
+                ('role', {'label': _("Has Role")}),
                ),
               ),
              )

+ 4 - 0
misago/users/admin/users/views.py

@@ -36,6 +36,10 @@ class List(ListWidget):
              )
     
     def set_filters(self, model, filters):
+        if 'role' in filters:
+            model = model.filter(roles__in=filters['role']).distinct()
+        if 'rank' in filters:
+            model = model.filter(rank__in=filters['rank'])
         if 'username' in filters:
             model = model.filter(username_slug__contains=filters['username'])
         if 'email' in filters:

+ 3 - 0
misago/users/models.py

@@ -384,6 +384,9 @@ class Rank(models.Model):
     order = models.IntegerField(default=0)
     criteria = models.CharField(max_length=255,null=True,blank=True)
     
+    def __unicode__(self):
+        return unicode(_(self.name))
+    
     def assign_rank(self, users=0, special_ranks=None):
         if not self.criteria or self.special or users == 0:
             # Rank cant be rolled in