Notifications: unsubscribe from extension approval activity (#177) #207

Merged
Oleg-Komarov merged 5 commits from approval-follow into main 2024-07-30 12:11:05 +02:00
3 changed files with 36 additions and 1 deletions
Showing only changes of commit 416becc09a - Show all commits

View File

@ -80,6 +80,20 @@
<section id="activity" class="mt-4"> <section id="activity" class="mt-4">
<hr class="my-4"> <hr class="my-4">
<h2>Activity</h2> <h2>Activity</h2>
{% if request.user.is_authenticated %}
<form method="post" action="{% url 'reviewers:approval-follow' extension.slug %}">
{% csrf_token %}
<button type="submit" class="btn">
{% if user_is_following %}
<i class="i-bell-off"></i> Unsubscribe
<input type="hidden" name="follow" value="" />
{% else %}
<i class="i-bell"></i> Subscribe
<input type="hidden" name="follow" value="True" />
{% endif %}
</button>
</form>
{% endif %}
{% if review_activity %} {% if review_activity %}
<ul class="activity-list"> <ul class="activity-list">

View File

@ -15,4 +15,9 @@ urlpatterns = [
views.ExtensionsApprovalFormView.as_view(), views.ExtensionsApprovalFormView.as_view(),
name='approval-comment', name='approval-comment',
), ),
path(
'approval-queue-follow/<slug:slug>/',
views.ExtensionsApprovalFollowView.as_view(),
name='approval-follow',
),
] ]

View File

@ -1,12 +1,14 @@
from collections import defaultdict from collections import defaultdict
import logging import logging
from actstream.actions import follow, is_following, unfollow
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.views.generic import DetailView, FormView from django.views.generic import DetailView, FormView
from django.shortcuts import reverse from django.shortcuts import redirect, reverse
import django.forms import django.forms
from constants.activity import Flag
from extensions.models import Extension from extensions.models import Extension
from reviewers.forms import CommentForm from reviewers.forms import CommentForm
from reviewers.models import ApprovalActivity from reviewers.models import ApprovalActivity
@ -134,6 +136,7 @@ class ExtensionsApprovalDetailView(DetailView):
form.fields['type'].widget.choices = choices form.fields['type'].widget.choices = choices
if len(choices) == 1: if len(choices) == 1:
form.fields['type'].widget = django.forms.HiddenInput() form.fields['type'].widget = django.forms.HiddenInput()
ctx['user_is_following'] = is_following(user, self.object, flag=Flag.REVIEWER)
return ctx return ctx
@ -158,3 +161,16 @@ class ExtensionsApprovalFormView(LoginRequiredMixin, FormView):
form.save() form.save()
self.approve_if_allowed(form) self.approve_if_allowed(form)
return super().form_valid(form) return super().form_valid(form)
class ExtensionsApprovalFollowView(LoginRequiredMixin, DetailView):
model = Extension
def post(self, request, *args, **kwargs):
extension = self.get_object()
user = request.user
if request.POST.get('follow'):
follow(user, extension, flag=Flag.REVIEWER)
else:
unfollow(user, extension, flag=Flag.REVIEWER)
return redirect(extension.get_review_url() + '#activity')