-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
57569a9
commit 6790643
Showing
7 changed files
with
193 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
import logging | ||
|
||
from django import forms | ||
from django.db.models.fields import BLANK_CHOICE_DASH | ||
from django.utils.translation import ugettext_lazy as _ | ||
|
||
from ...constants import roles | ||
from ...models import Region | ||
from ...utils.user_utils import search_users | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class UserFilterForm(forms.Form): | ||
""" | ||
Form for filtering user objects | ||
""" | ||
|
||
role = forms.ChoiceField( | ||
label=_("Role"), | ||
choices=BLANK_CHOICE_DASH + roles.CHOICES, | ||
required=False, | ||
) | ||
permissions = forms.ChoiceField( | ||
label=_("Permissions"), | ||
choices=BLANK_CHOICE_DASH | ||
+ [ | ||
("is_superuser", _("Administrator")), | ||
("is_staff", _("Integreat team member")), | ||
], | ||
required=False, | ||
) | ||
region = forms.ModelChoiceField( | ||
label=_("Region"), | ||
queryset=Region.objects.all(), | ||
required=False, | ||
) | ||
query = forms.CharField(required=False) | ||
|
||
@property | ||
def is_enabled(self): | ||
""" | ||
This function determines whether the filters are applied. | ||
:return: Whether filtering should be performed | ||
:rtype: bool | ||
""" | ||
return self.is_valid() and self.has_changed() | ||
|
||
@property | ||
def filters_visible(self): | ||
""" | ||
This function determines whether the filter form is visible by default. | ||
:return: Whether any filters (other than search) were changed | ||
:rtype: bool | ||
""" | ||
return self.is_enabled and self.changed_data != ["query"] | ||
|
||
def apply(self, users): | ||
""" | ||
Filter the users list according to the given filter data | ||
:param users: The list of users | ||
:type users: list | ||
:return: The filtered page list | ||
:rtype: list | ||
""" | ||
if self.is_enabled: | ||
logger.debug("User list filtered with changed data %r", self.changed_data) | ||
if "query" in self.changed_data: | ||
users = self.filter_by_query(users) | ||
if "role" in self.changed_data: | ||
users = users.filter(groups__name=self.cleaned_data["role"]) | ||
if "permissions" in self.changed_data: | ||
users = users.filter(**{self.cleaned_data["permissions"]: True}) | ||
if "region" in self.changed_data: | ||
users = users.filter(regions=self.cleaned_data["region"]) | ||
return users | ||
|
||
def filter_by_query(self, users): | ||
""" | ||
Filter the pages list by a given search query | ||
:param users: The list of users | ||
:type users: list | ||
:return: The filtered page list | ||
:rtype: list | ||
""" | ||
query = self.cleaned_data["query"].lower() | ||
user_keys = search_users(region=None, query=query).values("pk") | ||
users = users.filter(pk__in=user_keys) | ||
return users |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{% load i18n %} | ||
{% load widget_tweaks %} | ||
|
||
<form class="p-4" id="user-filter-form"> | ||
<div class="grid grid-cols-3 gap-4 mb-4"> | ||
<div> | ||
<label for="{{ filter_form.role.id_for_label }}">{{ filter_form.role.label }}</label> | ||
{% render_field filter_form.role %} | ||
</div> | ||
<div> | ||
<label for="{{ filter_form.permissions.id_for_label }}">{{ filter_form.permissions.label }}</label> | ||
{% render_field filter_form.permissions %} | ||
</div> | ||
<div> | ||
<label for="{{ filter_form.region.id_for_label }}">{{ filter_form.region.label }}</label> | ||
{% render_field filter_form.region %} | ||
</div> | ||
</div> | ||
<div class="flex justify-end gap-4"> | ||
<a id="filter-reset" class="btn btn-light-blue">{% trans 'Reset filter' %}</a> | ||
<button class="btn">{% trans 'Apply filter' %}</button> | ||
</div> | ||
</form> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.