1
0
mirror of https://gitlab.crans.org/bde/nk20 synced 2025-09-29 21:03:32 +02:00

Search activities

This commit is contained in:
Ehouarn
2025-09-26 22:58:30 +02:00
parent 47d2476b51
commit ad90887691
2 changed files with 30 additions and 6 deletions

View File

@@ -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
<h3 class="card-header text-center">
{% trans "All activities" %}
</h3>
{% render_table table %}
{% render_table all %}
</div>
{{ block.super }}
{% endblock %}

View File

@@ -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()