diff --git a/apps/activity/templates/activity/activity_list.html b/apps/activity/templates/activity/activity_list.html index bf5ba70f..79da6d97 100644 --- a/apps/activity/templates/activity/activity_list.html +++ b/apps/activity/templates/activity/activity_list.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "base_search.html" %} {% comment %} SPDX-License-Identifier: GPL-3.0-or-later {% endcomment %} @@ -44,6 +44,8 @@ SPDX-License-Identifier: GPL-3.0-or-later

{% trans "All activities" %}

- {% render_table table %} + {% render_table all %} + +{{ block.super }} {% endblock %} diff --git a/apps/activity/views.py b/apps/activity/views.py index 9011f0e1..9ef0d4f2 100644 --- a/apps/activity/views.py +++ b/apps/activity/views.py @@ -67,27 +67,49 @@ class ActivityListView(ProtectQuerysetMixin, LoginRequiredMixin, MultiTableMixin tables = [ lambda data: ActivityTable(data, prefix="all-"), lambda data: ActivityTable(data, prefix="upcoming-"), + lambda data: ActivityTable(data, prefix="search-"), ] extra_context = {"title": _("Activities")} def get_queryset(self, **kwargs): - return super().get_queryset(**kwargs).distinct() + """ + Filter the user list with the given pattern. + """ + return super().get_queryset().distinct() def get_tables_data(self): - # first table = all activities, second table = upcoming + # first table = all activities, second table = upcoming, third table = search + + # table search + qs = self.get_queryset().order_by('-date_start') + if "search" in self.request.GET and self.request.GET['search']: + pattern = self.request.GET['search'] + + # check regex + valid_regex = is_regex(pattern) + suffix = '__iregex' if valid_regex else '__istartswith' + prefix = '^' if valid_regex else '' + qs = qs.filter(Q(**{f'name{suffix}': prefix + pattern}) + | Q(**{f'organizer__name{suffix}': prefix + pattern}) + | Q(**{f'organizer__note__alias__name{suffix}': prefix + pattern})) + else: + qs = qs.none() + search_table = qs.filter(PermissionBackend.filter_queryset(self.request, Activity, 'view')) + return [ self.get_queryset().order_by("-date_start"), Activity.objects.filter(date_end__gt=timezone.now()) .filter(PermissionBackend.filter_queryset(self.request, Activity, "view")) .distinct() - .order_by("date_start") + .order_by("date_start"), + search_table, ] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) tables = context["tables"] - for name, table in zip(["table", "upcoming"], tables): + for name, table in zip(["all", "upcoming", "table"], tables): context[name] = table started_activities = self.get_queryset().filter(open=True, valid=True).distinct().all()