feat: add unsubscribe functionality

This commit is contained in:
moanos [he/him] 2024-12-31 16:25:18 +01:00
parent 3816290eb7
commit b993621773
3 changed files with 27 additions and 11 deletions

View File

@ -13,13 +13,13 @@
<i class="fas fa-search"></i> {% trans 'Suchen' %}
</button>
{% if searched %}
{% if not user_is_subscribed_to_search %}
<button class="btn" type="submit" name="subscribe_to_search">
<i class="fas fa-bell"></i> {% trans 'Suche abonnieren' %}
{% if subscribed_search %}
<button class="btn" type="submit" value="{{ subscribed_search.pk }}" name="unsubscribe_to_search">
<i class="fas fa-bell-slash"></i> {% trans 'Suche nicht mehr abonnieren' %}
</button>
{% else %}
<button class="btn" type="submit" name="unsubscribe_to_search">
<i class="fas fa-bell-slash"></i> {% trans 'Suche nicht mehr abonnieren' %}
<button class="btn" type="submit" name="subscribe_to_search">
<i class="fas fa-bell"></i> {% trans 'Suche abonnieren' %}
</button>
{% endif %}
{% endif %}

View File

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

View File

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