From b9936217737db5f6fdd41101d77d508f2bd3691b Mon Sep 17 00:00:00 2001 From: moanos Date: Tue, 31 Dec 2024 16:25:18 +0100 Subject: [PATCH] feat: add unsubscribe functionality --- .../templates/fellchensammlung/search.html | 10 +++++----- src/fellchensammlung/tools/search.py | 16 +++++++++++----- src/fellchensammlung/views.py | 12 +++++++++++- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/fellchensammlung/templates/fellchensammlung/search.html b/src/fellchensammlung/templates/fellchensammlung/search.html index 5070e8c..07e4c57 100644 --- a/src/fellchensammlung/templates/fellchensammlung/search.html +++ b/src/fellchensammlung/templates/fellchensammlung/search.html @@ -13,13 +13,13 @@ {% trans 'Suchen' %} {% if searched %} - {% if not user_is_subscribed_to_search %} - {% else %} - {% endif %} {% endif %} diff --git a/src/fellchensammlung/tools/search.py b/src/fellchensammlung/tools/search.py index c48e517..efa63a8 100644 --- a/src/fellchensammlung/tools/search.py +++ b/src/fellchensammlung/tools/search.py @@ -114,12 +114,18 @@ class Search: sex=self.sex, max_distance=self.max_distance) + def get_subscription_or_none(self, user): + user_subscriptions = SearchSubscription.objects.filter(owner=user) + for subscription in user_subscriptions: + if self == subscription: + return subscription + def is_subscribed(self, user): """ Returns true if a user is already subscribed to a search with these parameters """ - user_subscriptions = SearchSubscription.objects.filter(owner=user) - for subscription in user_subscriptions: - if self == subscription: - return True - return False + subscription = self.get_subscription_or_none() + if subscription is None: + return False + else: + return True diff --git a/src/fellchensammlung/views.py b/src/fellchensammlung/views.py index 34e1f2e..4d7416f 100644 --- a/src/fellchensammlung/views.py +++ b/src/fellchensammlung/views.py @@ -183,11 +183,21 @@ def search(request): if not request.user.is_authenticated: return redirect(f"{settings.LOGIN_URL}?next={request.path}") search.subscribe(request.user) + if "unsubscribe_to_search" in request.POST: + if not request.user.is_authenticated: + return redirect(f"{settings.LOGIN_URL}?next={request.path}") + search_subscription = SearchSubscription.objects.get(pk=request.POST["unsubscribe_to_search"]) + if search_subscription.owner == request.user: + search_subscription.delete() + else: + raise PermissionDenied + + context = {"adoption_notices": search.get_adoption_notices(), "search_form": search.search_form, "place_not_found": search.place_not_found, - "user_is_subscribed_to_search": search.is_subscribed(request.user), + "subscribed_search": search.get_subscription_or_none(request.user), "searched": searched} return render(request, 'fellchensammlung/search.html', context=context)