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
- {% 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()