From dee9fa0cf551c7e11b1b225452526018bb016c93 Mon Sep 17 00:00:00 2001 From: Dorian Lesbre <dorian.lesbre@gmail.com> Date: Sun, 12 Sep 2021 02:44:21 +0200 Subject: [PATCH] WIP on send email --- admin_pages/forms.py | 27 +++++++++++++++++++++++++++ admin_pages/templates/admin.html | 8 ++++++++ admin_pages/templates/send_email.html | 16 ++++++++++++++++ admin_pages/urls.py | 1 + admin_pages/views.py | 23 ++++++++++++++++++++--- interludes/settings.py | 7 +++++-- 6 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 admin_pages/forms.py create mode 100644 admin_pages/templates/send_email.html diff --git a/admin_pages/forms.py b/admin_pages/forms.py new file mode 100644 index 0000000..09cef1b --- /dev/null +++ b/admin_pages/forms.py @@ -0,0 +1,27 @@ +from django import forms +from django.conf import settings +from django.db.models import TextChoices + +from shared.forms import FormRenderMixin + + +class Recipients(TextChoices): + ALL = ("a", "tous les utilisateurs") + REGISTERED = ("b", "tous les inscrits") + +class SendEmailForm(forms.Form): + """Formulaire pour un envoie d'email + à tous les utilisateurs/inscrits""" + + dest = forms.ChoiceField( + choices=Recipients.choices, required=True, + label="Envoyer à ", initial=Recipients.REGISTERED, + ) + subject = forms.CharField( + max_length=100, required=True, + label="Sujet", initial=settings.USER_EMAIL_SUBJECT_PREFIX, + strip=True + ) + text = forms.CharField( + label="Contenu", strip=True, widget=forms.Textarea + ) diff --git a/admin_pages/templates/admin.html b/admin_pages/templates/admin.html index c3191c6..e1528a3 100644 --- a/admin_pages/templates/admin.html +++ b/admin_pages/templates/admin.html @@ -237,4 +237,12 @@ <button class="button" onclick="mail_orgas();">Email aux orgas</button> {% endif %} </div> + + <h2>Mail aux utilisateurs</h2> + + <p>Écrire un mail aux utilisateurs (tous ou seulement les inscrits)</p> + + <p>Évitez de spammer. N'envoyez que si vraiment nécessaire.</p> + + <p><a class="button" href="{% url 'admin_pages:email_new' %}">Écrire un nouveau mail</a></p> {% endblock %} diff --git a/admin_pages/templates/send_email.html b/admin_pages/templates/send_email.html new file mode 100644 index 0000000..ca4ab9e --- /dev/null +++ b/admin_pages/templates/send_email.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} +{% load static %} + +{% block "content" %} +<h2>Envoyer un email</h2> + +<form method="post" action="{% url 'admin_pages:email_new' %}"> + {% csrf_token %} + {{ form.as_p }} + <br> + <div class="flex"> + <input type="submit" value="Envoyer"> + <a class="button" href="{% url 'admin_pages:index' %}">Annuler</a> + </div> +</form> +{% endblock %} diff --git a/admin_pages/urls.py b/admin_pages/urls.py index 831b902..81c0382 100644 --- a/admin_pages/urls.py +++ b/admin_pages/urls.py @@ -10,4 +10,5 @@ urlpatterns = [ path('export/activity_choices/', views.ExportActivityChoices.as_view(), name="activity_choices.csv"), path('email/send_user_emails_0564946523/', views.SendUserEmail.as_view(), name="email_users"), path('email/send_orga_emails_5682480453/', views.SendOrgaEmail.as_view(), name="email_orgas"), + path('email/new_email/', views.NewEmail.as_view(), name="email_new"), ] diff --git a/admin_pages/views.py b/admin_pages/views.py index 7ba8c0e..46cfad7 100644 --- a/admin_pages/views.py +++ b/admin_pages/views.py @@ -1,10 +1,11 @@ +from django.conf import settings from django.contrib import messages from django.core.mail import mail_admins, send_mass_mail from django.db.models import Count from django.shortcuts import redirect from django.template.loader import render_to_string from django.urls import reverse -from django.views.generic import RedirectView, TemplateView +from django.views.generic import FormView, RedirectView, TemplateView from accounts.models import EmailUser from home import models @@ -12,6 +13,8 @@ from home.views import get_planning_context from site_settings.models import Colors, SiteSettings from shared.views import CSVWriteView, SuperuserRequiredMixin +from admin_pages.forms import Recipients, SendEmailForm + # ============================== # Main Admin views # ============================== @@ -316,7 +319,7 @@ class SendUserEmail(SendEmailBase): "my_choices": my_choices.filter(accepted=True), }) emails.append(( - "[interludes] Vos activités", # subject + settings.USER_EMAIL_SUBJECT_PREFIX + "Vos activités", # subject message, self.from_address, # From: [participant.user.email], # To: @@ -360,7 +363,8 @@ class SendOrgaEmail(SendEmailBase): "slots": slots, }) emails.append(( - "[interludes] Liste d'inscrits à votre activité {}".format(activity.title), # subject + settings.USER_EMAIL_SUBJECT_PREFIX + + "Liste d'inscrits à votre activité {}".format(activity.title), # subject message, self.from_address, # From: [activity.host_email] # To: @@ -384,3 +388,16 @@ class SendOrgaEmail(SendEmailBase): "-- Site Interludes (mail généré automatiquement".format(nb_sent) ) messages.success(self.request, "{} mails envoyés aux orgas".format(nb_sent)) + + +class NewEmail(SuperuserRequiredMixin, FormView): + """Créer un nouveau mail""" + template_name = "send_email.html" + form_class = SendEmailForm + success_url = "admin_pages:index" + + def form_valid(self, form): + # This method is called when valid form data has been POSTed. + # It should return an HttpResponse. + #form.send_email() + return super().form_valid(form) diff --git a/interludes/settings.py b/interludes/settings.py index 4054abf..c96670b 100644 --- a/interludes/settings.py +++ b/interludes/settings.py @@ -177,8 +177,11 @@ STATIC_ROOT = os.path.join(BASE_DIR, 'static') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') -LOGIN_URL = "accounts:login" -LOGIN_REDIRECT_URL = "profile" +LOGIN_URL = 'accounts:login' +LOGIN_REDIRECT_URL = 'profile' # Prefix to mails to admins EMAIL_SUBJECT_PREFIX = '[DJANGO WEBLUDES] ' + +# Prefix to mails to users +USER_EMAIL_SUBJECT_PREFIX = "[interludes] " -- GitLab