From b7e9fa45c3139c5f79324e7d0d67defc2a44597a Mon Sep 17 00:00:00 2001 From: George Katsikas <giorgakis.katsikas@gmail.com> Date: Fri, 2 Aug 2024 15:22:38 +0200 Subject: [PATCH] add newsletters list and online display fixes #284 fixes #283 --- .../_hx_newsletter_list_item.html | 17 +++++- .../mailing_lists/_newsletter_email_body.html | 8 ++- .../mailing_lists/newsletter_detail.html | 36 +++++++++++ .../templates/mailing_lists/newsletters.html | 61 +++++++++++++++++++ scipost_django/mailing_lists/urls.py | 10 +++ scipost_django/mailing_lists/views.py | 38 ++++++++++++ .../news/templates/news/newsitem_list.html | 7 ++- .../scipost/personal_page/_hx_admin.html | 3 +- 8 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 scipost_django/mailing_lists/templates/mailing_lists/newsletter_detail.html create mode 100644 scipost_django/mailing_lists/templates/mailing_lists/newsletters.html diff --git a/scipost_django/mailing_lists/templates/mailing_lists/_hx_newsletter_list_item.html b/scipost_django/mailing_lists/templates/mailing_lists/_hx_newsletter_list_item.html index 1561bb27d..6f72407d1 100644 --- a/scipost_django/mailing_lists/templates/mailing_lists/_hx_newsletter_list_item.html +++ b/scipost_django/mailing_lists/templates/mailing_lists/_hx_newsletter_list_item.html @@ -4,8 +4,19 @@ <span class="text-truncate">{{ newsletter.content|striptags|truncatechars:200 }}</span> </div> - <div class="align-self-end d-flex flex-column align-items-end"> - <a href="{% url "mailing_lists:newsletter_edit" newsletter.id %}">Edit</a> - <span>{{ newsletter.get_status_display }}</span> + <div class="align-self-end d-flex align-items-end gap-2"> + + <div class="d-flex flex-column"> + <a href="{% url "mailing_lists:newsletter" newsletter.id %}">View</a> + </div> + + <div class="d-flex flex-column align-items-end"> + + {% if perms.scipost.can_manage_newsletters %} + <span>{{ newsletter.get_status_display }}</span> + <a href="{% url "mailing_lists:newsletter_edit" newsletter.id %}">Edit</a> + {% endif %} + + </div> </div> </li> diff --git a/scipost_django/mailing_lists/templates/mailing_lists/_newsletter_email_body.html b/scipost_django/mailing_lists/templates/mailing_lists/_newsletter_email_body.html index a5c6e96f2..bc614154f 100644 --- a/scipost_django/mailing_lists/templates/mailing_lists/_newsletter_email_body.html +++ b/scipost_django/mailing_lists/templates/mailing_lists/_newsletter_email_body.html @@ -6,7 +6,7 @@ <div style="max-width:600px; margin: 0 auto" class="bg-white"> <!-- Header --> - <table class="bg-dark-blue w-100" + <table class="w-100" align="center" border="0" cellpadding="0" @@ -14,6 +14,12 @@ role="presentation"> <tbody> <tr> + <td class="text-center" colspan="2"> + <a class="text-center" + href="{% url "mailing_lists:newsletter" newsletter.pk %}">View this newsletter online (login required)</a> + </td> + </tr> + <tr class="bg-dark-blue"> <td> <a href="{% url 'scipost:index' %}"> <img src="{% static 'scipost/images/logo_scipost_RGB_HTML_groot.png' %}" diff --git a/scipost_django/mailing_lists/templates/mailing_lists/newsletter_detail.html b/scipost_django/mailing_lists/templates/mailing_lists/newsletter_detail.html new file mode 100644 index 000000000..9de51eea0 --- /dev/null +++ b/scipost_django/mailing_lists/templates/mailing_lists/newsletter_detail.html @@ -0,0 +1,36 @@ +{% extends 'scipost/base.html' %} +{% load static %} + +{% block breadcrumb %} + <div class="breadcrumb-container"> + <div class="container"> + <nav class="breadcrumb"> + + {% block breadcrumb_items %} + {{ block.super }} + <a class="breadcrumb-item" href="{% url "mailing_lists:newsletters" %}">Newsletters</a> + <a class="breadcrumb-item">View Newsletter</a> + {% endblock %} + + </nav> + </div> + </div> +{% endblock %} + +{% block container_class %} +m-auto p-2 +{% endblock container_class %} + +{% block content %} + + <h1 class="mb-4">{{ newsletter }}</h1> + + {% include "mailing_lists/_newsletter_email_body.html" %} + +{% endblock content %} + + +{% block headsup %} + <link rel="stylesheet" + href="{% static 'scipost/assets/css/newsletter.css' %}" /> +{% endblock headsup %} diff --git a/scipost_django/mailing_lists/templates/mailing_lists/newsletters.html b/scipost_django/mailing_lists/templates/mailing_lists/newsletters.html new file mode 100644 index 000000000..6116e9217 --- /dev/null +++ b/scipost_django/mailing_lists/templates/mailing_lists/newsletters.html @@ -0,0 +1,61 @@ +{% extends 'scipost/base.html' %} + +{% block breadcrumb %} + <div class="breadcrumb-container"> + <div class="container"> + <nav class="breadcrumb"> + + {% block breadcrumb_items %} + {{ block.super }} + <a class="breadcrumb-item">Newsletters</a> + {% endblock %} + + </nav> + </div> + </div> +{% endblock %} + +{% block pagetitle %} + : Newsletters +{% endblock pagetitle %} + +{% block content %} + <h1 class="highlight">Newsletters</h1> + <p> + Here you can view all newsletters for the mailing lists you are subscribed to. + <nav> + You may manage your subscriptions on your <a href="{% url "scipost:personal_page" %}">personal page</a>, in the "Email Preferences" tab. + + {% if perms.scipost.can_manage_mailing_lists %} + You may also create new Newsletters or manage the Mailing Lists themselves on the <a href="{% url "mailing_lists:manage" %}">Mailing Lists management page</a>. + {% endif %} + + </nav> + </p> + + + <div class="row"> + <div class="col-12"> + + {% regroup newsletters by mailing_list as newsletters %} + + {% for mailing_list in newsletters %} + <h2>{{ mailing_list.grouper }}</h2> + + {% for newsletter in mailing_list.list %} + {% include "mailing_lists/_hx_newsletter_list_item.html" %} + {% endfor %} + + + {% empty %} + <h2>No Newsletters</h2> + <p>There are no newsletters visible to you.</p> + {% endfor %} + + + + + </div> + </div> + +{% endblock content %} diff --git a/scipost_django/mailing_lists/urls.py b/scipost_django/mailing_lists/urls.py index 8d4d81dc9..d0a50be45 100644 --- a/scipost_django/mailing_lists/urls.py +++ b/scipost_django/mailing_lists/urls.py @@ -49,6 +49,16 @@ urlpatterns = [ views._hx_newsletter_send, name="_hx_newsletter_send", ), + path( + "newsletters/<int:pk>", + views.newsletter_detail, + name="newsletter", + ), + path( + "newsletters", + views.newsletters, + name="newsletters", + ), path( "<int:pk>/", include( diff --git a/scipost_django/mailing_lists/views.py b/scipost_django/mailing_lists/views.py index cad168221..acc8bfb62 100644 --- a/scipost_django/mailing_lists/views.py +++ b/scipost_django/mailing_lists/views.py @@ -390,3 +390,41 @@ def _hx_newsletter_media_embed_list(request, pk): "mailing_lists/_hx_newsletter_media_embed_list.html", {"newsletter": newsletter}, ) + + +@login_required +def newsletters(request): + """ + Display a list of newsletters. + + - Regular user: newsletters in subscribed mailing lists after they have been sent. + - Users with `can_manage_newsletters`: all newsletters. + """ + newsletters = Newsletter.objects.all() + + # If not newsletter manager, only show sent newsletters from subscribed mailing lists + if not request.user.has_perm("scipost.can_manage_newsletters"): + newsletters = newsletters.filter( + mailing_list__subscribed=request.user.contributor, + status=Newsletter.STATUS_SENT, + ) + + return TemplateResponse( + request, + "mailing_lists/newsletters.html", + {"newsletters": newsletters}, + ) + + +@login_required +def newsletter_detail(request, pk): + """ + Display the newsletter content. + """ + newsletter = get_object_or_404(Newsletter, pk=pk) + + return TemplateResponse( + request, + "mailing_lists/newsletter_detail.html", + {"newsletter": newsletter}, + ) diff --git a/scipost_django/news/templates/news/newsitem_list.html b/scipost_django/news/templates/news/newsitem_list.html index 0f2b53144..243972080 100644 --- a/scipost_django/news/templates/news/newsitem_list.html +++ b/scipost_django/news/templates/news/newsitem_list.html @@ -18,7 +18,12 @@ <div class="col-12"> <h1 class="highlight">SciPost News</h1> {% if perms.scipost.can_manage_news %} - <p>Go to the <a href="{% url 'news:manage' %}">News management page</a></p> + <p>Go to the <a href="{% url 'news:manage' %}">News management page</a></p> + {% endif %} + + {% if request.user.is_authenticated %} + <nav>Visit the <a href="{% url "mailing_lists:newsletters" %}">newsletters page</a> to access past newsletters for your subscribed mailing lists. + Go to your <a href="{% url 'scipost:personal_page' %}">personal page</a> to manage your subscriptions.</nav> {% endif %} </div> </div> diff --git a/scipost_django/scipost/templates/scipost/personal_page/_hx_admin.html b/scipost_django/scipost/templates/scipost/personal_page/_hx_admin.html index a8c354d0f..1ddcb2f6e 100644 --- a/scipost_django/scipost/templates/scipost/personal_page/_hx_admin.html +++ b/scipost_django/scipost/templates/scipost/personal_page/_hx_admin.html @@ -30,7 +30,8 @@ <h3>News management</h3> <ul> <li><a href="{% url 'news:manage' %}">Manage News Items and Collections</a></li> - <li><a href="{% url 'mailing_lists:manage' %}">Manage Newsletters and Mailing lists</a></li> + <li><a href="{% url 'mailing_lists:manage' %}">Manage Mailing lists</a></li> + <li><a href="{% url 'mailing_lists:newsletters' %}">View Newsletters</a></li> </ul> {% endif %} -- GitLab