diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index e461d1da61..f0cbaa0ea9 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -278,6 +278,39 @@ class SubEventFilterForm(FilterForm): return qs +class OrganizerFilterForm(FilterForm): + orders = { + 'slug': 'slug', + 'name': 'name', + } + query = forms.CharField( + label=_('Organizer name'), + widget=forms.TextInput(attrs={ + 'placeholder': _('Organizer name'), + 'autofocus': 'autofocus' + }), + required=False + ) + + def __init__(self, *args, **kwargs): + kwargs.pop('request') + super().__init__(*args, **kwargs) + + def filter_qs(self, qs): + fdata = self.cleaned_data + + if fdata.get('query'): + query = fdata.get('query') + qs = qs.filter( + Q(name__icontains=query) | Q(slug__icontains=query) + ) + + if fdata.get('ordering'): + qs = qs.order_by(dict(self.fields['ordering'].choices)[fdata.get('ordering')]) + + return qs + + class EventFilterForm(FilterForm): orders = { 'slug': 'slug', diff --git a/src/pretix/control/templates/pretixcontrol/organizers/index.html b/src/pretix/control/templates/pretixcontrol/organizers/index.html index 0564bb34b8..9a41c46654 100644 --- a/src/pretix/control/templates/pretixcontrol/organizers/index.html +++ b/src/pretix/control/templates/pretixcontrol/organizers/index.html @@ -1,20 +1,46 @@ {% extends "pretixcontrol/base.html" %} {% load i18n %} +{% load bootstrap3 %} +{% load urlreplace %} {% load eventurl %} {% block title %}{% trans "Organizers" %}{% endblock %} {% block content %}
{% trans "The list below shows all organizer accounts you have administrative access to." %}
+ {% if request.user.is_superuser %} - - - {% trans "Create a new organizer" %} - ++ + + {% trans "Create a new organizer" %} + +
{% endif %}| {% trans "Organizer name" %} | ++ {% trans "Organizer name" %} + + + | ++ {% trans "Short form" %} + + + | {{ o.name }} | +{{ o.slug }} | {% endfor %} diff --git a/src/pretix/control/views/organizer.py b/src/pretix/control/views/organizer.py index aba6206d58..8915bda5ef 100644 --- a/src/pretix/control/views/organizer.py +++ b/src/pretix/control/views/organizer.py @@ -17,6 +17,7 @@ from pretix.base.models import Organizer, Team, TeamInvite, User from pretix.base.models.event import EventMetaProperty from pretix.base.models.organizer import TeamAPIToken from pretix.base.services.mail import SendMailException, mail +from pretix.control.forms.filter import OrganizerFilterForm from pretix.control.forms.organizer import ( EventMetaPropertyForm, OrganizerDisplaySettingsForm, OrganizerForm, OrganizerSettingsForm, OrganizerUpdateForm, TeamForm, @@ -34,10 +35,22 @@ class OrganizerList(ListView): paginate_by = 30 def get_queryset(self): + qs = Organizer.objects.all() + if self.filter_form.is_valid(): + qs = self.filter_form.filter_qs(qs) if self.request.user.is_superuser: - return Organizer.objects.all() + return qs else: - return Organizer.objects.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True)) + return qs.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True)) + + def get_context_data(self, **kwargs): + ctx = super().get_context_data(**kwargs) + ctx['filter_form'] = self.filter_form + return ctx + + @cached_property + def filter_form(self): + return OrganizerFilterForm(data=self.request.GET, request=self.request) class InviteForm(forms.Form):
|---|