This commit is contained in:
Aymeric Fromherz 2015-09-23 08:08:26 +02:00
parent 20a02d1013
commit 34d56e8635
62 changed files with 97 additions and 31 deletions

Binary file not shown.

View file

@ -14,6 +14,8 @@ BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = 'media/' MEDIA_ROOT = 'media/'
MEDIA_URL = 'media/' MEDIA_URL = 'media/'
EMAIL_HOST='clipper.ens.fr'
EMAIL_PORT= 25
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/

Binary file not shown.

BIN
calendrier/__init__.pyc Normal file

Binary file not shown.

View file

@ -20,7 +20,7 @@ class EventCalendar(HTMLCalendar):
body = [] body = []
for ev in self.events[day]: for ev in self.events[day]:
body.append('<a href="/calendar/%s">' % ev.id) body.append('<a href="/calendar/%s">' % ev.id)
body.append(esc(ev.nom)) body.append(esc(ev.nomcourt))
body.append('</a><br/>') body.append('</a><br/>')
return self.day_cell(cssclass, '<div class="dayNumber">%d</div> %s' % (day, ''.join(body))) return self.day_cell(cssclass, '<div class="dayNumber">%d</div> %s' % (day, ''.join(body)))
return self.day_cell(cssclass, '<div class="dayNumber">%d</div>' % day) return self.day_cell(cssclass, '<div class="dayNumber">%d</div>' % day)

View file

@ -1,9 +1,7 @@
from django import forms from django import forms
from calendrier.models import Event, Participants from calendrier.models import Event, Participants
class EventForm(forms.ModelForm): class ModifEventForm(forms.ModelForm):
sendmail = forms.BooleanField(initial=False, label="Envoyer l'invitation à la liste fanfare")
message = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={"placeholder":"Remplir ici pour remplacer le mail automatique"}), required=False)
class Meta: class Meta:
model = Event model = Event
widgets = { widgets = {
@ -13,6 +11,21 @@ class EventForm(forms.ModelForm):
'fin': forms.TextInput(attrs={"placeholder": 'hh:mm facultatif'}) 'fin': forms.TextInput(attrs={"placeholder": 'hh:mm facultatif'})
} }
class SendMail(forms.Form):
message = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={"placeholder":"Remplir ici pour remplacer le mail automatique"}), required=False)
class EventForm(forms.ModelForm):
sendmail = forms.BooleanField(initial=False, label="Envoyer l'invitation à la liste fanfare", required=False)
message = forms.CharField(max_length=2000, widget=forms.Textarea(attrs={"placeholder":"Remplir ici pour remplacer le mail automatique"}), required=False)
class Meta:
model = Event
widgets = {
'description': forms.Textarea(attrs={"placeholder":"facultatif"}),
'date': forms.TextInput(attrs={"placeholder": 'jj/mm/aaaa'}),
'debut': forms.TextInput(attrs={"placeholder": 'hh:mm'}),
'fin': forms.TextInput(attrs={"placeholder": 'hh:mm facultatif'})
}
class ParticipantsForm(forms.ModelForm): class ParticipantsForm(forms.ModelForm):
class Meta: class Meta:
model = Participants model = Participants

View file

@ -9,13 +9,14 @@ ANSWERS = (
class Event(models.Model): class Event(models.Model):
nom = models.CharField(max_length=100) nom = models.CharField(max_length=100)
nomcourt = models.CharField(max_length=9, verbose_name="Nom court")
date = models.DateField() date = models.DateField()
debut = models.TimeField() debut = models.TimeField()
fin = models.TimeField(blank=True, null=True) fin = models.TimeField(blank=True, null=True)
slug = models.CharField(max_length=7, editable=False, unique=True) slug = models.CharField(max_length=7, editable=False, unique=True)
lieu = models.CharField(max_length=200) lieu = models.CharField(max_length=200)
description = models.TextField(blank=True) description = models.TextField(blank=True)
calendrier = models.BooleanField(default=False, verbose_name="Afficher dans le calendrier") calendrier = models.BooleanField(default=False, verbose_name="Afficher dans le calendrier pour tous")
def __str__(self): def __str__(self):
return self.nom return self.nom

View file

@ -6,6 +6,7 @@ urlpatterns = patterns('calendrier.views',
url(r'^$', 'home'), url(r'^$', 'home'),
url(r'^edition/(?P<pk>\d+)$', EventUpdate.as_view()), url(r'^edition/(?P<pk>\d+)$', EventUpdate.as_view()),
url(r'^supprimer/(?P<pk>\d+)$', EventDelete.as_view()), url(r'^supprimer/(?P<pk>\d+)$', EventDelete.as_view()),
url(r'^resend/(?P<id>\d+)$', 'resend'),
url(r'(?P<id>\d+)/reponse/?', 'reponse'), url(r'(?P<id>\d+)/reponse/?', 'reponse'),
url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/oui', 'repouidir'), url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/oui', 'repouidir'),
url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/pe', 'reppedir'), url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/pe', 'reppedir'),

View file

@ -1,5 +1,5 @@
from django.shortcuts import render from django.shortcuts import render, redirect
from calendrier.forms import EventForm, ParticipantsForm from calendrier.forms import ModifEventForm, EventForm, ParticipantsForm, SendMail
from calendrier.models import Event, Participants from calendrier.models import Event, Participants
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.views.generic import UpdateView, DeleteView from django.views.generic import UpdateView, DeleteView
@ -8,6 +8,7 @@ from partitions.decorators import chef_required
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from gestion.models import ErnestoUser from gestion.models import ErnestoUser
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.core.mail import send_mail
import smtplib import smtplib
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
@ -91,6 +92,34 @@ def view_eventbis(request, id):
desc = True desc = True
return render(request, 'calendrier/view_event.html', locals()) return render(request, 'calendrier/view_event.html', locals())
@chef_required
def resend(request, id):
if request.method=="POST":
form = SendMail(request.POST)
if form.is_valid():
ev = Event.objects.get(id=id)
users = ErnestoUser.objects.filter(is_ernesto=True)
message = form.cleaned_data["message"]
try:
for user in users:
Subject = ev.nom + ", le " + ev.date.strftime('%d/%m/%Y')
sender = 'fanfare@ens.fr'
receivers = [user.user.email]
text = "Bonjour, un évémenent a été créé."
if message != '':
text = message
text+= '\nPour répondre oui, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/oui'
text+= '\nPour répondre non, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/non'
text+= '\nPour répondre peut-être, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + ev.slug + '/pe'
send_mail(Subject, text, sender, receivers)
return redirect("calendrier.views.view_eventbis", id)
except:
erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé."
else:
form = SendMail()
return render(request, "calendrier/resend.html", locals())
@chef_required @chef_required
def create_event(request): def create_event(request):
if request.method == "POST": if request.method == "POST":
@ -110,28 +139,33 @@ def create_event(request):
debut = form.cleaned_data["debut"] debut = form.cleaned_data["debut"]
message = form.cleaned_data["message"] message = form.cleaned_data["message"]
obj = form.save(commit=False) obj = form.save(commit=False)
id= obj.id
obj.slug = code obj.slug = code
obj.save() obj.save()
id= obj.id
envoi = True envoi = True
if sendmail: if sendmail:
try: users = ErnestoUser.objects.filter(is_ernesto=True)
smtpObj = smtplib.SMTP('clipper.ens.fr', 25) for user in users:
sender = 'fanfare@ens.fr' try:
receivers = 'aymeric.fromherz@ens.fr' Subject = nom + ", le " + date
msg = MIMEMultipart("alternative") sender = 'fanfare@ens.fr'
msg["Subject"] = nom + ", le " + date receivers = [user.user.email]
msg["From"] = sender text = "Bonjour, un évémenent a été créé."
msg["To"] = receivers if message != '':
text = "Bonjour, un évémenent a été créé." text = message
if message != '': text+= '\nPour répondre oui, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/oui'
text = message text+= '\nPour répondre non, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/non'
text+= '\nPour répondre, allez sur www.ernestophone.ens.fr/calendar/' + id + '/reponse' text+= '\nPour répondre peut-être, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/pe'
text = MIMEText(text, 'plain') send_mail(Subject, text, sender, receivers)
msg.attach(text) # smtpObj = smtplib.SMTP('clipper.ens.fr', 25)
smtpObj.sendmail(sender, receivers, msg.as_string()) # msg = MIMEMultipart("alternative")
except: # msg["From"] = sender
erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé." # msg["To"] = receivers
# text = MIMEText(text, 'plain')
# msg.attach(text)
# smtpObj.sendmail(sender, receivers, msg.as_string())
except:
erreur = "Une erreur est survenue, le mail n'a pas pu être envoyé."
else: else:
form = EventForm() form = EventForm()
@ -172,7 +206,7 @@ def repouidir(request, codeus, codeev):
obj.reponse="oui" obj.reponse="oui"
obj.save() obj.save()
envoi = True envoi = True
return render(request,"calendrier/home.html", locals()) return redirect('calendrier.views.home')
def reppedir(request, codeus, codeev): def reppedir(request, codeus, codeev):
@ -189,7 +223,6 @@ def reppedir(request, codeus, codeev):
obj.reponse="pe" obj.reponse="pe"
obj.save() obj.save()
envoi = True envoi = True
return render(request,"calendrier/home.html", locals())
def repnondir(request, codeus, codeev): def repnondir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus) part = ErnestoUser.objects.get(slug=codeus)
@ -205,12 +238,12 @@ def repnondir(request, codeus, codeev):
obj.reponse="non" obj.reponse="non"
obj.save() obj.save()
envoi = True envoi = True
return render(request,"calendrier/home.html", locals()) return redirect('calendrier.views.home')
class EventUpdate(UpdateView): class EventUpdate(UpdateView):
model = Event model = Event
template_name = "calendrier/update.html" template_name = "calendrier/update.html"
form_class = EventForm form_class = ModifEventForm
success_url = reverse_lazy(home) success_url = reverse_lazy(home)
@method_decorator(chef_required) @method_decorator(chef_required)

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
manage.py Executable file → Normal file
View file

BIN
partitions/__init__.pyc Normal file

Binary file not shown.

BIN
partitions/models.pyc Normal file

Binary file not shown.

BIN
propositions/__init__.pyc Normal file

Binary file not shown.

View file

@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block titre %}Renvoyer les mails{% endblock %}
{% block content %}
{% if erreur %}
{{ erreur }}
{% endif %}
<form action="{% url 'calendrier.views.resend' id %}" method="post">
{% csrf_token %}
{{ form.as_p}}
<input type="submit" value="Renvoyer les mails" />
<input type="hidden" name="next" value="/" />
</form>
{% endblock %}

View file

@ -7,6 +7,7 @@
{% if user.profile.is_chef %} {% if user.profile.is_chef %}
<p><a href="/calendar/edition/{{ev.id}}">Modifier l'événement</a></p> <p><a href="/calendar/edition/{{ev.id}}">Modifier l'événement</a></p>
<p><a href="/calendar/supprimer/{{ev.id}}">Supprimer l'événement</a></p> <p><a href="/calendar/supprimer/{{ev.id}}">Supprimer l'événement</a></p>
<p><a href="/calendar/resend/{{ev.id}}">Renvoyer les mails</a></p>
{% endif %} {% endif %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<p><a href="{% url 'calendrier.views.reponse' id %}">Répondre à l'événement</a></p> <p><a href="{% url 'calendrier.views.reponse' id %}">Répondre à l'événement</a></p>

View file

@ -13,18 +13,18 @@
{% csrf_token %} {% csrf_token %}
<table> <table>
<tr> <tr>
<td><input type="{{ form.username.type }}" name="login" placeholder="Login"/></td> <td><input type="{{ form.username.type }}" name="{{ form.username.name }}" placeholder="Login"/></td>
</tr> </tr>
<tr> <tr>
<td><input type="password" name="{{ form.password.name }}" placeholder="Password"/></td> <td><input type="password" name="{{ form.password.name }}" placeholder="Password"/></td>
</tr> </tr>
</table> </table>
<input type="submit" value="Connexion" /> <input type="submit" value="Connexion" />
</form>
{% if next %} {% if next %}
<input type="hidden" name="next" value={{ next }} /> <input type="hidden" name="next" value={{ next }} />
{% else %} {% else %}
<input type="hidden" name="next" value="/" /> <input type="hidden" name="next" value="/" />
{% endif %} {% endif %}
</form>
</div> </div>
{% endblock %} {% endblock %}