Rafał Pitoń 11 лет назад
Родитель
Сommit
6437bb8286

+ 28 - 1
misago/templates/misago/admin/bans/list.html

@@ -1,5 +1,5 @@
 {% extends "misago/admin/generic/list.html" %}
-{% load i18n %}
+{% load crispy_forms_tags i18n %}
 
 
 {% block page-actions %}
@@ -70,7 +70,11 @@
 
 {% block emptylist %}
 <td colspan="{{ 6|add:extra_actions_len }}">
+  {% if active_filters %}
+  <p>{% trans "No bans matching search criteria have been found" %}</p>
+  {% else %}
   <p>{% trans "No bans are currently set." %}</p>
+  {% endif %}
 </td>
 {% endblock emptylist %}
 
@@ -86,3 +90,26 @@
   });
 </script>
 {% endblock %}
+
+
+{% block modal-title %}
+{% trans "Search bans" %}
+{% endblock modal-title %}
+
+
+{% block modal-body %}
+<div class="row">
+  <div class="col-md-6">
+    {{ search_form.test|as_crispy_field }}
+  </div>
+  <div class="col-md-6">
+    {{ search_form.value|as_crispy_field }}
+  </div>
+</div>
+<div class="row">
+  <div class="col-md-12">
+    {{ search_form.state|as_crispy_field }}
+  </div>
+</div>
+{% endblock modal-body %}
+

+ 50 - 17
misago/users/forms/admin.py

@@ -9,7 +9,7 @@ from misago.users.validators import (validate_username, validate_email,
 
 
 """
-Users forms
+Users
 """
 class UserBaseForm(forms.ModelForm):
     username = forms.CharField(
@@ -165,7 +165,6 @@ class SearchUsersFormBase(forms.Form):
         if criteria.get('inactive'):
             pass
 
-
         if criteria.get('is_staff'):
             queryset = criteria.filter(is_staff=True)
 
@@ -211,7 +210,7 @@ def SearchUsersForm(*args, **kwargs):
 
 
 """
-Ranks form
+Ranks
 """
 class RankForm(forms.ModelForm):
     name = forms.CharField(
@@ -267,7 +266,7 @@ class RankForm(forms.ModelForm):
 
 
 """
-Bans Form
+Bans
 """
 
 class BanForm(forms.ModelForm):
@@ -313,16 +312,50 @@ class BanForm(forms.ModelForm):
         ]
 
 
-class SearchBansForm(object):
-    test = forms.TypedChoiceField(
-        label=_("Ban type"),
-        coerce=int,
-        choices=BANS_CHOICES)
-    banned_value = forms.CharField(
-        label=_("Banned value"), max_length=250,
-        help_text=_('This value is case-insensitive and accepts asterisk (*) '
-                    'for rought matches. For example, making IP ban for value '
-                    '"83.*" will ban all IP addresses beginning with "83.".'),
-        error_messages={
-            'max_length': _("Banned value can't be longer than 250 characters.")
-        })
+SARCH_BANS_CHOICES = (
+    ('', _('All bans')),
+    ('names', _('Usernames')),
+    ('emails', _('E-mails')),
+    ('ips', _('IPs')),
+)
+
+
+class SearchBansForm(forms.Form):
+    test = forms.ChoiceField(
+        label=_("Type"), required=False,
+        choices=SARCH_BANS_CHOICES)
+    value = forms.CharField(
+        label=_("Banned value begins with"),
+        required=False)
+    state = forms.ChoiceField(
+        label=_("State"), required=False,
+        choices=(
+            ('', _('All states')),
+            ('valid', _('Valid bans')),
+            ('expired', _('Expired bans')),
+        ))
+
+    def filter_queryset(self, search_criteria, queryset):
+        criteria = search_criteria
+        if criteria.get('test') == 'names':
+            queryset = queryset.filter(test=0)
+
+        if criteria.get('test') == 'emails':
+            queryset = queryset.filter(test=1)
+
+        if criteria.get('test') == 'ips':
+            queryset = queryset.filter(test=2)
+
+        if criteria.get('value'):
+            queryset = queryset.filter(
+                banned_value__startswith=criteria.get('value').lower())
+
+        if criteria.get('state') == 'valid':
+            queryset = queryset.filter(is_valid=True)
+
+        if criteria.get('state') == 'expired':
+            queryset = queryset.filter(is_valid=False)
+
+        return queryset
+
+

+ 1 - 1
misago/users/views/bansadmin.py

@@ -26,7 +26,7 @@ class BanAdmin(generic.AdminBaseMixin):
 class BansList(BanAdmin, generic.ListView):
     items_per_page = 30
     ordering = (('-id', None),)
-    #search_form = SearchBansForm
+    SearchForm = SearchBansForm
     selection_label = _('With bans: 0')
     empty_selection_label = _('Select bans')
     mass_actions = (