Browse Source

Change admin search forms to admin filter forms

rafalp 6 years ago
parent
commit
9b7d2232be

+ 18 - 18
misago/admin/views/generic/list.py

@@ -74,7 +74,7 @@ class ListView(AdminView):
             "page": None,
             "page": None,
             "order_by": [],
             "order_by": [],
             "order": None,
             "order": None,
-            "search_form": None,
+            "filter_form": None,
             "active_filters": {},
             "active_filters": {},
             "querystring": "",
             "querystring": "",
             "query_order": {},
             "query_order": {},
@@ -114,15 +114,15 @@ class ListView(AdminView):
                 # So address ball contains copy-friendly link
                 # So address ball contains copy-friendly link
                 refresh_querystring = True
                 refresh_querystring = True
 
 
-        search_form = self.get_search_form(request)
-        if search_form:
-            filtering_methods = self.get_filtering_methods(request, search_form)
+        filter_form = self.get_filter_form(request)
+        if filter_form:
+            filtering_methods = self.get_filtering_methods(request, filter_form)
             active_filters = self.get_filtering_method_to_use(filtering_methods)
             active_filters = self.get_filtering_method_to_use(filtering_methods)
             if request.GET.get("clear_filters"):
             if request.GET.get("clear_filters"):
                 # Clear filters from querystring
                 # Clear filters from querystring
                 request.session.pop(self.filters_session_key, None)
                 request.session.pop(self.filters_session_key, None)
                 active_filters = {}
                 active_filters = {}
-            self.apply_filtering_on_context(context, active_filters, search_form)
+            self.apply_filtering_on_context(context, active_filters, filter_form)
 
 
             if (
             if (
                 filtering_methods["GET"]
                 filtering_methods["GET"]
@@ -174,19 +174,19 @@ class ListView(AdminView):
         context["items"] = context["page"].object_list
         context["items"] = context["page"].object_list
 
 
     # Filter list items
     # Filter list items
-    search_form = None
+    filter_form = None
 
 
-    def get_search_form(self, request):
-        return self.search_form
+    def get_filter_form(self, request):
+        return self.filter_form
 
 
     @property
     @property
     def filters_session_key(self):
     def filters_session_key(self):
         return "misago_admin_%s_filters" % self.root_link
         return "misago_admin_%s_filters" % self.root_link
 
 
-    def get_filtering_methods(self, request, search_form):
+    def get_filtering_methods(self, request, filter_form):
         methods = {
         methods = {
-            "GET": self.get_filters_from_GET(request, search_form),
-            "session": self.get_filters_from_session(request, search_form),
+            "GET": self.get_filters_from_GET(request, filter_form),
+            "session": self.get_filters_from_session(request, filter_form),
         }
         }
 
 
         if request.GET.get("set_filters"):
         if request.GET.get("set_filters"):
@@ -194,14 +194,14 @@ class ListView(AdminView):
 
 
         return methods
         return methods
 
 
-    def get_filters_from_GET(self, request, search_form):
-        form = search_form(request.GET)
+    def get_filters_from_GET(self, request, filter_form):
+        form = filter_form(request.GET)
         form.is_valid()
         form.is_valid()
         return self.clean_filtering_data(form.cleaned_data)
         return self.clean_filtering_data(form.cleaned_data)
 
 
-    def get_filters_from_session(self, request, search_form):
+    def get_filters_from_session(self, request, filter_form):
         session_filters = request.session.get(self.filters_session_key, {})
         session_filters = request.session.get(self.filters_session_key, {})
-        form = search_form(session_filters)
+        form = filter_form(session_filters)
         form.is_valid()
         form.is_valid()
         return self.clean_filtering_data(form.cleaned_data)
         return self.clean_filtering_data(form.cleaned_data)
 
 
@@ -217,12 +217,12 @@ class ListView(AdminView):
                 return methods.get(method)
                 return methods.get(method)
         return {}
         return {}
 
 
-    def apply_filtering_on_context(self, context, active_filters, search_form):
+    def apply_filtering_on_context(self, context, active_filters, filter_form):
         context["active_filters"] = active_filters
         context["active_filters"] = active_filters
-        context["search_form"] = search_form(initial=context["active_filters"])
+        context["filter_form"] = filter_form(initial=context["active_filters"])
 
 
         if context["active_filters"]:
         if context["active_filters"]:
-            context["items"] = context["search_form"].filter_queryset(
+            context["items"] = context["filter_form"].filter_queryset(
                 active_filters, context["items"]
                 active_filters, context["items"]
             )
             )
 
 

+ 2 - 3
misago/legal/forms.py

@@ -57,14 +57,13 @@ class AgreementForm(forms.ModelForm):
         return agreement
         return agreement
 
 
 
 
-class SearchAgreementsForm(forms.Form):
+class FilterAgreementsForm(forms.Form):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         label=_("Type"), required=False, choices=Agreement.TYPE_CHOICES
         label=_("Type"), required=False, choices=Agreement.TYPE_CHOICES
     )
     )
     content = forms.CharField(label=_("Content"), required=False)
     content = forms.CharField(label=_("Content"), required=False)
 
 
-    def filter_queryset(self, search_criteria, queryset):
-        criteria = search_criteria
+    def filter_queryset(self, criteria, queryset):
         if criteria.get("type") is not None:
         if criteria.get("type") is not None:
             queryset = queryset.filter(type__in=criteria["type"])
             queryset = queryset.filter(type__in=criteria["type"])
 
 

+ 2 - 2
misago/legal/views/admin.py

@@ -3,7 +3,7 @@ from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
 from django.utils.translation import gettext_lazy as _
 
 
 from ...admin.views import generic
 from ...admin.views import generic
-from ..forms import AgreementForm, SearchAgreementsForm
+from ..forms import AgreementForm, FilterAgreementsForm
 from ..models import Agreement
 from ..models import Agreement
 from ..utils import set_agreement_as_active
 from ..utils import set_agreement_as_active
 
 
@@ -27,7 +27,7 @@ class AgreementAdmin(generic.AdminBaseMixin):
 class AgreementsList(AgreementAdmin, generic.ListView):
 class AgreementsList(AgreementAdmin, generic.ListView):
     items_per_page = 30
     items_per_page = 30
     ordering = [("-id", _("From newest")), ("id", _("From oldest"))]
     ordering = [("-id", _("From newest")), ("id", _("From oldest"))]
-    search_form = SearchAgreementsForm
+    filter_form = FilterAgreementsForm
     selection_label = _("With agreements: 0")
     selection_label = _("With agreements: 0")
     empty_selection_label = _("Select agreements")
     empty_selection_label = _("Select agreements")
     mass_actions = (
     mass_actions = (

+ 4 - 9
misago/templates/misago/admin/agreements/list.html

@@ -133,20 +133,15 @@
 {% endblock %}
 {% endblock %}
 
 
 
 
-{% block modal-title %}
-{% trans "Search bans" %}
-{% endblock modal-title %}
-
-
-{% block modal-body %}
+{% block filters-modal-body %}
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.type %}
+    {% form_row filter_form.type %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.content %}
+    {% form_row filter_form.content %}
   </div>
   </div>
 </div>
 </div>
-{% endblock modal-body %}
+{% endblock filters-modal-body %}

+ 6 - 11
misago/templates/misago/admin/attachments/list.html

@@ -77,33 +77,28 @@
 {% endblock emptylist %}
 {% endblock emptylist %}
 
 
 
 
-{% block modal-title %}
-{% trans "Search attachments" %}
-{% endblock modal-title %}
-
-
-{% block modal-body %}
+{% block filters-modal-body %}
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.uploader %}
+    {% form_row filter_form.uploader %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.filename %}
+    {% form_row filter_form.filename %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.filetype %}
+    {% form_row filter_form.filetype %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.is_orphan %}
+    {% form_row filter_form.is_orphan %}
   </div>
   </div>
 </div>
 </div>
-{% endblock modal-body %}
+{% endblock filters-modal-body %}
 
 
 
 
 {% block javascripts %}
 {% block javascripts %}

+ 6 - 11
misago/templates/misago/admin/bans/list.html

@@ -93,27 +93,22 @@
 {% endblock %}
 {% endblock %}
 
 
 
 
-{% block modal-title %}
-{% trans "Search bans" %}
-{% endblock modal-title %}
-
-
-{% block modal-body %}
+{% block filters-modal-body %}
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.check_type %}
+    {% form_row filter_form.check_type %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.value %}
+    {% form_row filter_form.value %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.registration_only %}
+    {% form_row filter_form.registration_only %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.state %}
+    {% form_row filter_form.state %}
   </div>
   </div>
 </div>
 </div>
-{% endblock modal-body %}
+{% endblock filters-modal-body %}
 
 

+ 1 - 2
misago/templates/misago/admin/categoryroles/categoryroles.html

@@ -6,7 +6,7 @@
 {% blocktrans trimmed with category=target %}
 {% blocktrans trimmed with category=target %}
   {{ category }}: Permissions
   {{ category }}: Permissions
 {% endblocktrans %} | {{ block.super }}
 {% endblocktrans %} | {{ block.super }}
-{% endblock title%}
+{% endblock title %}
 
 
 
 
 {% block page-actions %}
 {% block page-actions %}
@@ -35,7 +35,6 @@
     {{ category }}: Permissions
     {{ category }}: Permissions
   {% endblocktrans %}
   {% endblocktrans %}
 </div>
 </div>
-{% endif %}
 {% endblock %}
 {% endblock %}
 
 
 
 

+ 1 - 1
misago/templates/misago/admin/categoryroles/rolecategories.html

@@ -6,7 +6,7 @@
 {% blocktrans trimmed with role=target %}
 {% blocktrans trimmed with role=target %}
   {{ role }}: Category permissions
   {{ role }}: Category permissions
 {% endblocktrans %} | {{ block.super }}
 {% endblocktrans %} | {{ block.super }}
-{% endblock title%}
+{% endblock title %}
 
 
 
 
 {% block page-header %}
 {% block page-header %}

+ 5 - 10
misago/templates/misago/admin/datadownloads/list.html

@@ -91,25 +91,20 @@
 {% endblock emptylist %}
 {% endblock emptylist %}
 
 
 
 
-{% block modal-title %}
-{% trans "Search data downloads" %}
-{% endblock modal-title %}
-
-
-{% block modal-body %}
+{% block filters-modal-body %}
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.status %}
+    {% form_row filter_form.status %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.user %}
+    {% form_row filter_form.user %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.requested_by %}
+    {% form_row filter_form.requested_by %}
   </div>
   </div>
 </div>
 </div>
-{% endblock modal-body %}
+{% endblock filters-modal-body %}

+ 3 - 3
misago/templates/misago/admin/generic/search_form.html → misago/templates/misago/admin/generic/filter_form.html

@@ -3,8 +3,8 @@
   <form method="get">
   <form method="get">
     <input type="hidden" name="clear_filters" value="1">
     <input type="hidden" name="clear_filters" value="1">
     <button class="btn btn-light btn-sm" type="button" data-toggle="modal" data-target="#filter-modal">
     <button class="btn btn-light btn-sm" type="button" data-toggle="modal" data-target="#filter-modal">
-      <span class="fa fa-search"></span>
-      {% trans "Search" %}
+      <span class="fa fa-filter"></span>
+      {% trans "Filter" %}
       {% if active_filters %}
       {% if active_filters %}
         <span class="badge badge-primary">
         <span class="badge badge-primary">
           {{ active_filters|length }}
           {{ active_filters|length }}
@@ -14,7 +14,7 @@
     {% if active_filters %}
     {% if active_filters %}
       <button class="btn btn-light btn-sm ml-1" type="submit">
       <button class="btn btn-light btn-sm ml-1" type="submit">
         <span class="fa fa-times"></span>
         <span class="fa fa-times"></span>
-        {% trans "Remove search" %}
+        {% trans "Clear filters" %}
       </button>
       </button>
     </form>
     </form>
   {% endif %}
   {% endif %}

+ 15 - 11
misago/templates/misago/admin/generic/list.html

@@ -4,12 +4,12 @@
 
 
 {% block title %}
 {% block title %}
 {{ active_link.name }} | {{ block.super }}
 {{ active_link.name }} | {{ block.super }}
-{% endblock title%}
+{% endblock title %}
 
 
 
 
 {% block view %}
 {% block view %}
 <div class="card card-admin-table shadow-sm">
 <div class="card card-admin-table shadow-sm">
-  {% if paginator or order_by or search_form or mass_actions %}
+  {% if paginator or order_by or filter_form or mass_actions %}
     <div class="card-body">
     <div class="card-body">
       <div class="row align-items-center">
       <div class="row align-items-center">
 
 
@@ -19,8 +19,8 @@
         {% if order_by %}
         {% if order_by %}
           {% include "misago/admin/generic/order_by.html" %}
           {% include "misago/admin/generic/order_by.html" %}
         {% endif %}
         {% endif %}
-        {% if search_form %}
-          {% include "misago/admin/generic/search_form.html" %}
+        {% if filter_form %}
+          {% include "misago/admin/generic/filter_form.html" %}
         {% endif %}
         {% endif %}
         {% if mass_actions %}
         {% if mass_actions %}
           {% include "misago/admin/generic/mass_actions.html" %}
           {% include "misago/admin/generic/mass_actions.html" %}
@@ -72,12 +72,16 @@
 
 
 {% block content %}
 {% block content %}
 {{ block.super }}
 {{ block.super }}
-{% if search_form %}
+{% if filter_form %}
   <div class="modal fade" id="filter-modal" tabindex="-1" role="dialog" aria-labelledby="filter-modal-label" aria-hidden="true">
   <div class="modal fade" id="filter-modal" tabindex="-1" role="dialog" aria-labelledby="filter-modal-label" aria-hidden="true">
     <div class="modal-dialog" role="document">
     <div class="modal-dialog" role="document">
       <div class="modal-content">
       <div class="modal-content">
         <div class="modal-header">
         <div class="modal-header">
-          <h5 class="modal-title" id="exampleModalLabel">{% block modal-title %}{% endblock modal-title %}</h5>
+          <h5 class="modal-title" id="exampleModalLabel">
+            {% block filters-modal-title %}
+              {% trans "Filters" %}
+            {% endblock filters-modal-title %}
+          </h5>
           <button type="button" class="close" data-dismiss="modal" aria-label="{% trans 'Close' %}">
           <button type="button" class="close" data-dismiss="modal" aria-label="{% trans 'Close' %}">
             <span aria-hidden="true">&times;</span>
             <span aria-hidden="true">&times;</span>
           </button>
           </button>
@@ -88,17 +92,17 @@
             <input type="hidden" name="{{ name }}" value="{{ value }}">
             <input type="hidden" name="{{ name }}" value="{{ value }}">
           {% endfor %}
           {% endfor %}
           <div class="modal-body">
           <div class="modal-body">
-            {% block modal-body %}{% endblock modal-body %}
+            {% block filters-modal-body %}{% endblock filters-modal-body %}
           </div>
           </div>
           <div class="modal-footer">
           <div class="modal-footer">
-            {% block modal-footer %}
-              <button type="button" class="btn btn-default" data-dismiss="modal">
+            {% block filters-modal-footer %}
+              <button type="button" class="btn btn-light" data-dismiss="modal">
                 {% trans "Close" %}
                 {% trans "Close" %}
               </button>
               </button>
               <button type="submit" class="btn btn-primary">
               <button type="submit" class="btn btn-primary">
-                {% trans "Save changes" %}
+                {% trans "Done" %}
               </button>
               </button>
-            {% endblock modal-footer %}
+            {% endblock filters-modal-footer %}
           </div>
           </div>
         </form>
         </form>
       </div>
       </div>

+ 1 - 1
misago/templates/misago/admin/themes/assets/list.html

@@ -4,7 +4,7 @@
 
 
 {% block title %}
 {% block title %}
 {% trans "Assets" %} | {{ theme }} | {{ active_link.name }} | {{ block.super }}
 {% trans "Assets" %} | {{ theme }} | {{ active_link.name }} | {{ block.super }}
-{% endblock title%}
+{% endblock title %}
 
 
 
 
 {% block extra-head %}
 {% block extra-head %}

+ 11 - 16
misago/templates/misago/admin/users/list.html

@@ -109,47 +109,42 @@
 {% endblock emptylist %}
 {% endblock emptylist %}
 
 
 
 
-{% block modal-title %}
-{% trans "Search users" %}
-{% endblock modal-title %}
-
-
-{% block modal-body %}
+{% block filters-modal-body %}
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.username %}
+    {% form_row filter_form.username %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.email %}
+    {% form_row filter_form.email %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.rank %}
+    {% form_row filter_form.rank %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.role %}
+    {% form_row filter_form.role %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-12">
   <div class="col-md-12">
-    {% form_row search_form.profilefields %}
+    {% form_row filter_form.profilefields %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.inactive %}
+    {% form_row filter_form.inactive %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.disabled %}
+    {% form_row filter_form.disabled %}
   </div>
   </div>
 </div>
 </div>
 <div class="row">
 <div class="row">
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.is_deleting_account %}
+    {% form_row filter_form.is_deleting_account %}
   </div>
   </div>
   <div class="col-md-6">
   <div class="col-md-6">
-    {% form_row search_form.is_staff %}
+    {% form_row filter_form.is_staff %}
   </div>
   </div>
 </div>
 </div>
-{% endblock modal-body %}
+{% endblock filters-modal-body %}

+ 1 - 1
misago/threads/forms.py

@@ -10,7 +10,7 @@ def get_searchable_filetypes():
     return choices
     return choices
 
 
 
 
-class SearchAttachmentsForm(forms.Form):
+class FilterAttachmentsForm(forms.Form):
     uploader = forms.CharField(label=_("Uploader name contains"), required=False)
     uploader = forms.CharField(label=_("Uploader name contains"), required=False)
     filename = forms.CharField(label=_("Filename contains"), required=False)
     filename = forms.CharField(label=_("Filename contains"), required=False)
     filetype = forms.TypedChoiceField(
     filetype = forms.TypedChoiceField(

+ 2 - 4
misago/threads/views/admin/attachments.py

@@ -3,7 +3,7 @@ from django.db import transaction
 from django.utils.translation import gettext_lazy as _
 from django.utils.translation import gettext_lazy as _
 
 
 from ....admin.views import generic
 from ....admin.views import generic
-from ...forms import SearchAttachmentsForm
+from ...forms import FilterAttachmentsForm
 from ...models import Attachment, Post
 from ...models import Attachment, Post
 
 
 
 
@@ -41,9 +41,7 @@ class AttachmentsList(AttachmentAdmin, generic.ListView):
             "is_atomic": False,
             "is_atomic": False,
         }
         }
     ]
     ]
-
-    def get_search_form(self, request):
-        return SearchAttachmentsForm
+    filter_form = FilterAttachmentsForm
 
 
     def action_delete(self, request, attachments):
     def action_delete(self, request, attachments):
         deleted_attachments = []
         deleted_attachments = []

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

@@ -307,7 +307,7 @@ def EditUserFormFactory(
     return FormType
     return FormType
 
 
 
 
-class BaseSearchUsersForm(forms.Form):
+class BaseFilterUsersForm(forms.Form):
     username = forms.CharField(label=_("Username starts with"), required=False)
     username = forms.CharField(label=_("Username starts with"), required=False)
     email = forms.CharField(label=_("E-mail starts with"), required=False)
     email = forms.CharField(label=_("E-mail starts with"), required=False)
     profilefields = forms.CharField(label=_("Profile fields contain"), required=False)
     profilefields = forms.CharField(label=_("Profile fields contain"), required=False)
@@ -351,7 +351,7 @@ class BaseSearchUsersForm(forms.Form):
         return queryset
         return queryset
 
 
 
 
-def create_search_users_form():
+def create_filter_users_form():
     """
     """
     Factory that uses cache for ranks and roles,
     Factory that uses cache for ranks and roles,
     and makes those ranks and roles typed choice fields that play nice
     and makes those ranks and roles typed choice fields that play nice
@@ -374,7 +374,7 @@ def create_search_users_form():
         ),
         ),
     }
     }
 
 
-    return type("SearchUsersForm", (BaseSearchUsersForm,), extra_fields)
+    return type("FilterUsersForm", (BaseFilterUsersForm,), extra_fields)
 
 
 
 
 class RankForm(forms.ModelForm):
 class RankForm(forms.ModelForm):
@@ -568,7 +568,7 @@ class BanForm(forms.ModelForm):
         return data
         return data
 
 
 
 
-class SearchBansForm(forms.Form):
+class FilterBansForm(forms.Form):
     check_type = forms.ChoiceField(
     check_type = forms.ChoiceField(
         label=_("Type"),
         label=_("Type"),
         required=False,
         required=False,
@@ -591,8 +591,7 @@ class SearchBansForm(forms.Form):
         choices=[("", _("Any")), ("used", _("Active")), ("unused", _("Expired"))],
         choices=[("", _("Any")), ("used", _("Active")), ("unused", _("Expired"))],
     )
     )
 
 
-    def filter_queryset(self, search_criteria, queryset):
-        criteria = search_criteria
+    def filter_queryset(self, criteria, queryset):
         if criteria.get("check_type") == "names":
         if criteria.get("check_type") == "names":
             queryset = queryset.filter(check_type=0)
             queryset = queryset.filter(check_type=0)
 
 
@@ -668,15 +667,14 @@ class RequestDataDownloadsForm(forms.Form):
         return data
         return data
 
 
 
 
-class SearchDataDownloadsForm(forms.Form):
+class FilterDataDownloadsForm(forms.Form):
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         label=_("Status"), required=False, choices=DataDownload.STATUS_CHOICES
         label=_("Status"), required=False, choices=DataDownload.STATUS_CHOICES
     )
     )
     user = forms.CharField(label=_("User"), required=False)
     user = forms.CharField(label=_("User"), required=False)
     requested_by = forms.CharField(label=_("Requested by"), required=False)
     requested_by = forms.CharField(label=_("Requested by"), required=False)
 
 
-    def filter_queryset(self, search_criteria, queryset):
-        criteria = search_criteria
+    def filter_queryset(self, criteria, queryset):
         if criteria.get("status") is not None:
         if criteria.get("status") is not None:
             queryset = queryset.filter(status=criteria["status"])
             queryset = queryset.filter(status=criteria["status"])
 
 

+ 7 - 7
misago/users/tests/test_useradmin_views.py

@@ -33,8 +33,8 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertContains(response, self.user.username)
         self.assertContains(response, self.user.username)
 
 
-    def test_list_search(self):
-        """users list is searchable"""
+    def test_list_filtering(self):
+        """users list can be filtered"""
         response = self.client.get(reverse("misago:admin:users:accounts:index"))
         response = self.client.get(reverse("misago:admin:users:accounts:index"))
         self.assertEqual(response.status_code, 302)
         self.assertEqual(response.status_code, 302)
 
 
@@ -46,25 +46,25 @@ class UserAdminViewsTests(AdminTestCase):
         user_b = create_test_user("Tyrion", "t321@test.com")
         user_b = create_test_user("Tyrion", "t321@test.com")
         user_c = create_test_user("Karen", "t432@test.com")
         user_c = create_test_user("Karen", "t432@test.com")
 
 
-        # Search both
+        # Partial search for "tyr" returns both "tyrael" and "tyrion"
         response = self.client.get("%s&username=tyr" % link_base)
         response = self.client.get("%s&username=tyr" % link_base)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertContains(response, user_a.username)
         self.assertContains(response, user_a.username)
         self.assertContains(response, user_b.username)
         self.assertContains(response, user_b.username)
 
 
-        # Search tyrion
+        # Search for "tyrion" returns it only
         response = self.client.get("%s&username=tyrion" % link_base)
         response = self.client.get("%s&username=tyrion" % link_base)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertNotContains(response, user_a.username)
         self.assertNotContains(response, user_a.username)
         self.assertContains(response, user_b.username)
         self.assertContains(response, user_b.username)
 
 
-        # Search tyrael
+        # Search for "tyrael" returns it only
         response = self.client.get("%s&email=t123@test.com" % link_base)
         response = self.client.get("%s&email=t123@test.com" % link_base)
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.status_code, 200)
         self.assertContains(response, user_a.username)
         self.assertContains(response, user_a.username)
         self.assertNotContains(response, user_b.username)
         self.assertNotContains(response, user_b.username)
 
 
-        # Search disabled
+        # Search for disabled user
         user_c.is_active = False
         user_c.is_active = False
         user_c.save()
         user_c.save()
 
 
@@ -74,7 +74,7 @@ class UserAdminViewsTests(AdminTestCase):
         self.assertNotContains(response, user_b.username)
         self.assertNotContains(response, user_b.username)
         self.assertContains(response, user_c.username)
         self.assertContains(response, user_c.username)
 
 
-        # Search requested own account delete
+        # Search for requested own account delete
         user_c.is_deleting_account = True
         user_c.is_deleting_account = True
         user_c.save()
         user_c.save()
 
 

+ 2 - 2
misago/users/views/admin/bans.py

@@ -2,7 +2,7 @@ from django.contrib import messages
 from django.utils.translation import gettext_lazy as _
 from django.utils.translation import gettext_lazy as _
 
 
 from ....admin.views import generic
 from ....admin.views import generic
-from ...forms.admin import BanForm, SearchBansForm
+from ...forms.admin import BanForm, FilterBansForm
 from ...models import Ban
 from ...models import Ban
 
 
 
 
@@ -26,7 +26,7 @@ class BansList(BanAdmin, generic.ListView):
         ("banned_value", _("A to z")),
         ("banned_value", _("A to z")),
         ("-banned_value", _("Z to a")),
         ("-banned_value", _("Z to a")),
     ]
     ]
-    search_form = SearchBansForm
+    filter_form = FilterBansForm
     selection_label = _("With bans: 0")
     selection_label = _("With bans: 0")
     empty_selection_label = _("Select bans")
     empty_selection_label = _("Select bans")
     mass_actions = (
     mass_actions = (

+ 2 - 4
misago/users/views/admin/datadownloads.py

@@ -7,7 +7,7 @@ from ...datadownloads import (
     request_user_data_download,
     request_user_data_download,
     user_has_data_download_request,
     user_has_data_download_request,
 )
 )
-from ...forms.admin import RequestDataDownloadsForm, SearchDataDownloadsForm
+from ...forms.admin import RequestDataDownloadsForm, FilterDataDownloadsForm
 from ...models import DataDownload
 from ...models import DataDownload
 
 
 
 
@@ -40,14 +40,12 @@ class DataDownloadsList(DataDownloadAdmin, generic.ListView):
             ),
             ),
         },
         },
     ]
     ]
+    filter_form = FilterDataDownloadsForm
 
 
     def get_queryset(self):
     def get_queryset(self):
         qs = super().get_queryset()
         qs = super().get_queryset()
         return qs.select_related("user", "requester")
         return qs.select_related("user", "requester")
 
 
-    def get_search_form(self, request):
-        return SearchDataDownloadsForm
-
     def action_expire(self, request, data_downloads):
     def action_expire(self, request, data_downloads):
         for data_download in data_downloads:
         for data_download in data_downloads:
             expire_user_data_download(data_download)
             expire_user_data_download(data_download)

+ 3 - 3
misago/users/views/admin/users.py

@@ -19,7 +19,7 @@ from ...forms.admin import (
     EditUserForm,
     EditUserForm,
     EditUserFormFactory,
     EditUserFormFactory,
     NewUserForm,
     NewUserForm,
-    create_search_users_form,
+    create_filter_users_form,
 )
 )
 from ...models import Ban
 from ...models import Ban
 from ...profilefields import profilefields
 from ...profilefields import profilefields
@@ -101,8 +101,8 @@ class UsersList(UserAdmin, generic.ListView):
         qs = super().get_queryset()
         qs = super().get_queryset()
         return qs.select_related("rank")
         return qs.select_related("rank")
 
 
-    def get_search_form(self, request):
-        return create_search_users_form()
+    def get_filter_form(self, request):
+        return create_filter_users_form()
 
 
     def action_activate(self, request, users):
     def action_activate(self, request, users):
         inactive_users = []
         inactive_users = []