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