Skip to content
Snippets Groups Projects
Commit d2edd11f authored by Dorian Lesbre's avatar Dorian Lesbre
Browse files

Added start/end info date and global messages

parent 027c389a
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,9 @@
{% if user.profile.is_registered %}
<strong>Mon inscription&nbsp;:</strong>
{% if settings.inscriptions_open and settings.inscriptions_end %}
modifiable jusqu'au {{ settings.inscriptions_end|date:"l d F Y à H:i" }}
{% endif %}
<ul>
<li>{% if user.profile.sleeps %}Inscrit pour dormir sur place{% else %}Ne dors pas sur place{% endif %}</li>
<!--<li>{% if user.profile.mug %}Commande une tasse{% else %}Ne commande pas de tasse{% endif %}</li>-->
......@@ -50,7 +53,15 @@
<strong>Vous n'êtes pas incrit à l'événement.</strong>
{% if not settings.inscriptions_open %}
<p>Les inscriptions ne sont pas encore ouvertes ou ont été fermées.</p>
{% if settings.inscriptions_not_open_yet %}
<p>Les inscriptions ne sont pas encores ouvertes. Elles ouvrirons le <strong>{{ settings.inscriptions_start|date:"l d F Y à H:i" }}</strong>.</p>
{% elif settings.inscriptions_have_closed %}
<p>Les inscriptions sont fermées.</p>
{% else %}
<p>Les inscriptions ne sont pas encores ouvertes ou ont été fermées.</p>
{% endif %}
{% elif settings.inscriptions_end %}
<p>les inscriptions sont ouvertes jusqu'au {{ settings.inscriptions_end|date:"l d F Y à H:i" }}).</p>
{% endif %}
<br><br>
{% endif %}
......
......@@ -20,9 +20,15 @@
<ul>
<li>La création de compte est {% if settings.registrations_open %}ouverte{% else %}fermée{% endif %}.</li>
<li>Les inscriptions sont {% if settings.inscriptions_open %}ouvertes{% else %}fermées{% endif %}.</li>
<li>Les inscriptions sont {% if settings.inscriptions_open %}ouvertes{% else %}fermées{% endif %}. Dates informatives:
<ul>
<li>Ouverture : {{ settings.inscriptions_start|default:"non fixée" }}</li>
<li>Fermeture : {{ settings.inscriptions_end|default:"non fixée" }}</li>
</ul>
</li>
<li>Le planning {% if settings.display_planning %}est affiché{% else %}n'est pas affiché{% endif %}.</li>
<li>La répartition des activités {% if settings.activities_allocated %}est effectuée et affichée{% else %}n'est pas faite/affichée{% endif %}.</li>
<li>{% if settings.global_message %}Un message global est affiché{% else %}Aucun message global{% endif %}.</li>
</ul>
<h2>Métriques</h2>
......@@ -128,7 +134,7 @@
if (confirm(
`${errors}Cette action va envoyer {{ user_email_nb }} emails.\nÊtes-vous sur de vouloir continuer ?`
))
window.location = "{% url 'home' %}";
window.location = "{% url 'email_users' %}";
}
{% endif %}
{% if not settings.orga_notified %}
......
......@@ -84,11 +84,14 @@
</nav>
<main>
{% if messages %}
{% if messages or settings.global_message %}
<ul class="messagelist">
{% for message in messages %}
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
{% endfor %}
{% if settings.global_message %}
<li class="info">{{ settings.global_message }}</li>
{% endif %}
</ul>
{% endif %}
......
......@@ -16,4 +16,23 @@
il a été retardé et est prévu le week-end du vendredi 9 au dimanche 11
avril 2021.
</p>
<h2>Inscriptions</h2>
<p>
Ce site vous permettra de vous inscrire à l'événement et
de voir les activités qui y seront proposées. Cette année l'événement est
<strong>gratuir</strong> car entièrement financé par le
<a class="external" href="https://cof.ens.fr/">COF</a> (cela n'inclut pas
les éventuels frais de transport).
</p>
{% if settings.inscriptions_start and settings.inscriptions_end %}
<p>Les inscriptions seront ouvertes
du <strong>{{ settings.inscriptions_start|date:"l d F Y à H:i" }}</strong>
au <strong>{{ settings.inscriptions_end|date:"l d F Y à H:i" }}</strong>.
</p>
{% elif settings.inscriptions_start %}
<p>Les inscriptions ouvrirons le <strong>{{ settings.inscriptions_start|date:"l d F Y à H:i" }}</strong>.</p>
{% elif settings.inscriptions_end %}
<p>Les inscriptions fermerons le <strong>{{ settings.inscriptions_end|date:"l d F Y à H:i" }}</strong>.</p>
{% endif %}
{% endblock %}
......@@ -4,8 +4,19 @@
{% block "content" %}
<h2>Inscriptions</h2>
<p>
Les inscriptions ne sont pas encores ouvertes.
Nous communiquerons pas mail via les BDE des différentes écoles pour leur ouverture.
</p>
{% if settings.inscriptions_not_open_yet %}
<p>Les inscriptions ne sont pas encores ouvertes.</p>
<p>Leur ouverture est prévue le <strong>{{ settings.inscriptions_start|date:"l d F Y à H:i" }}</strong>.</p>
<p>Nous communiquerons pas mail via les BDE des différentes écoles pour leur ouverture.</p>
{% elif settings.inscriptions_have_closed %}
<p>Les inscriptions sont fermées.</p>
{% if settings.contact_email %}
<p>Pour tout problème, contacter&nbsp;:<br><span class="antispam">{{ settings.contact_email_reversed }}</span></p>
{% endif %}
{% else %}
<p>
Les inscriptions ne sont pas encores ouvertes ou ont été fermées.
Nous communiquerons pas mail via les BDE des différentes écoles pour leur ouverture.
</p>
{% endif %}
{% endblock %}
......@@ -38,7 +38,14 @@
<h3>Choix d'activités</h3>
<p>Saissisez les activités auquelles vous voulez vous inscrire, par ordre de préférence.</p>
<p>Vous pouvez revenir modifier votre choix jusqu'à la fermeture des inscriptions.</p>
<p>
Vous pouvez revenir modifier votre choix jusqu'à la fermeture des
inscriptions{% if settings.inscriptions_end %} (le {{ settings.inscriptions_end|date:"l d F Y à H:i" }}){% endif %}.
</p>
<p>Si vous vous inscrivez à une activité qui nécessite préparation, nous communiquerons
votre email aux orgas pour qu'iels puissent vous contacter.
</p>
{% if formset.non_form_errors %}
{{ formset.non_form_errors }}
......
......@@ -7,4 +7,7 @@
<p>Vous devez être connecté pour pouvoir vous inscrire à l'événement.</p>
<p>Aller à la page de <a href="{% url 'accounts:login' %}">connexion</a> pour vous connectez
ou à celle de <a href="{% url 'accounts:create' %}">création de compte</a> si vous n'avez pas de compte.</p>
{% if settings.inscriptions_end %}
<p>Les inscriptions seront ouvertes jusqu'au {{ settings.inscriptions_end|date:"l d F Y à H:i" }})</p>
{% endif %}
{% endblock %}
......@@ -17,6 +17,7 @@ urlpatterns = [
path('export/activities/', views.ExportActivities.as_view(), name="activities.csv"),
path('export/participants/', views.ExportParticipants.as_view(), name="participants.csv"),
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(
'sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'
......
from datetime import timedelta
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.sitemaps import Sitemap
from django.core.mail import mail_admins, send_mass_mail
from django.db.models import Count
from django.forms import formset_factory
from django.shortcuts import redirect, render
from django.template.loader import render_to_string
from django.urls import reverse
from django.views.generic import RedirectView, UpdateView, TemplateView, View
......@@ -318,6 +321,44 @@ class ExportActivityChoices(SuperuserRequiredMixin, CSVWriteView):
])
return rows
class SendUserEmail(SuperuserRequiredMixin, RedirectView):
"""Envoie aux utilisateurs leur repartition d'activité"""
pattern_name = "site_admin"
from_address = settings.DEFAULT_FROM_EMAIL
def get_emails(self):
"""genere les mails a envoyer"""
# on envoie qu'au participant qui se sont inscrit à des activites
participants = ActivityList.objects.filter(
participant__is_registered=True
).values("participant").distinct()
emails = []
for p in participants:
participant = InterludesParticipant.objects.get(id = p["participant"])
messages = render_to
emails.append((
"Vos activités interludes", # subject
message,
self.from_address, # From:
[participant.user.email] # To:
))
return emails
def send_emails(self):
settings = SiteSettings.load()
if settings.user_notified:
messages.error(self.request, "Les participants ont déjà reçu un mail annonçant la répartition. Modifiez les réglages pour en envoyer un autre")
return
settings.user_notified = True
settings.save()
messages.success(self.request, "Email aux utilisateurs envoyé")
send
def get_redirect_url(self, *args, **kwargs):
self.send_emails()
return reverse(self.pattern_name)
# ==============================
# Sitemap
# ==============================
......
......@@ -25,7 +25,7 @@ SECRET_KEY = 'tx$xi%n!8cghirp377zb)gd24g#=&w*ik(bx2h(i8ji0_&9_5l'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ADMINS = [("respos", "respointerludes2021@ens.psl.eu"),]
ADMINS = [("respos", "respointerludes21@ens.psl.eu"),]
ALLOWED_HOSTS = []
......@@ -143,3 +143,6 @@ LOGIN_REDIRECT_URL = "accounts:profile"
# This will display emails in Console.
# FIXME: remove in production
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Prefix to mails to admins
EMAIL_SUBJECT_PREFIX = '[DJANGO WEBLUDES] '
from django.db import models
from django.core.cache import cache
from django.utils.timezone import now
class SingletonModel(models.Model):
"""Table de la BDD qui ne possède qu'un seul élément"""
......@@ -39,6 +40,15 @@ class SiteSettings(SingletonModel):
registrations_open = models.BooleanField("Ouvrir la création de compte", default=False)
inscriptions_open = models.BooleanField("Ouvrir les inscriptions", default=False)
inscriptions_start = models.DateTimeField("Ouverture des inscriptions",
blank=True, null=True,
help_text="Cette date n'est qu'informative. Les inscription s'ouvrent via la checkbox uniquement"
)
inscriptions_end = models.DateTimeField("Fermeture des inscriptions",
blank=True, null=True,
help_text="Cette date n'est qu'informative. Les inscription se ferment via la checkbox uniquement"
)
display_planning = models.BooleanField("Afficher le planning", default=False)
activities_allocated = models.BooleanField(
......@@ -57,12 +67,29 @@ class SiteSettings(SingletonModel):
help_text="Ce champ existe pour éviter l'envoie de plusieurs mails successifs. Le decocher permet de renvoyer tous les mails"
)
global_message = models.TextField("Message global", blank=True, null=True,
help_text="Message affiché en haut de chaque page (si non vide)"
)
@property
def contact_email_reversed(self):
def contact_email_reversed(self) -> str:
return self.contact_email[::-1]
@property
def inscriptions_not_open_yet(self) -> bool:
if self.inscriptions_start:
return now() <= self.inscriptions_start
return False
@property
def inscriptions_have_closed(self) -> bool:
if self.inscriptions_end:
return now() >= self.inscriptions_end
return False
class Meta:
verbose_name = "paramètres"
verbose_name_plural = "paramètres"
def __str__(self) -> str:
return "Modifier les paramètres"
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