SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 7c02b7db authored by George Katsikas's avatar George Katsikas :goat:
Browse files

add mailing lists to communications page

add htmx toggle subscription action for mailing list
parent b3e79bb8
No related branches found
No related tags found
No related merge requests found
<div id="mailing-list-item-{{ mailing_list.id }}"
class="bg-secondary bg-opacity-10 d-flex flex-row p-2 rounded justify-content-between">
{{ mailing_list.name }}
<div>
<a role="button"
type="button"
class="btn-link"
hx-get="{% url 'mailing_lists:_hx_toggle_subscription' pk=mailing_list.id %}"
hx-swap="outerHTML"
hx-target="#mailing-list-item-{{ mailing_list.id }}">
{% if user.contributor in mailing_list.subscribed.all %}
Unsubscribe
{% else %}
Subscribe
{% endif %}
</a>
</div>
</div>
......@@ -2,7 +2,7 @@ __copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"
from django.urls import path
from django.urls import include, path
from . import views
......@@ -19,4 +19,16 @@ urlpatterns = [
views.export_non_registered_invitations,
name="export_non_registered_invitations",
),
path(
"mailing_list/<int:pk>/",
include(
[
path(
"_hx_toggle_subscription",
views._hx_toggle_subscription,
name="_hx_toggle_subscription",
),
]
),
),
]
......@@ -8,6 +8,7 @@ from django.contrib import messages
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.views.generic import UpdateView
from django.views.generic.list import ListView
from django.urls import reverse
......@@ -16,7 +17,7 @@ from django.shortcuts import redirect, get_object_or_404
from invitations.models import RegistrationInvitation
from .forms import MailchimpUpdateForm
from .models import MailchimpList
from .models import MailchimpList, MailingList
class MailchimpMixin(LoginRequiredMixin, PermissionRequiredMixin):
......@@ -110,3 +111,25 @@ class ListDetailView(MailchimpMixin, UpdateView):
def form_valid(self, form):
messages.success(self.request, "List succesfully updated")
return super().form_valid(form)
def _hx_toggle_subscription(request, pk):
"""
Toggle the subscription status of a user to a certain list.
Return the rerendered list item.
"""
mailing_list = get_object_or_404(MailingList, pk=pk)
is_subscribed = request.user.contributor in mailing_list.subscribed.all()
print("Toggle subscription", is_subscribed, request.user.contributor, mailing_list)
if is_subscribed:
mailing_list.unsubscribe(request.user.contributor)
else:
mailing_list.subscribe(request.user.contributor)
return TemplateResponse(
request,
"mailing_lists/_hx_mailing_list_item.html",
{"mailing_list": mailing_list},
)
......@@ -28,4 +28,19 @@
{% include 'profiles/_hx_profile_emails_table.html' with profile=contributor.profile %}
</div>
<div class="row">
<div class="col-12">
<h3 class="mb-3">Mailing list subscriptions:</h3>
{% for mailing_list in contributor.eligible_mailing_lists.all %}
{% include 'mailing_lists/_hx_mailing_list_item.html' %}
{% empty %}
There are no mailing lists available for subscription.
{% endfor %}
</div>
</div>
</div>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment