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_URL = 'media/'
EMAIL_HOST='clipper.ens.fr'
EMAIL_PORT= 25
# Quick-start development settings - unsuitable for production
# 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 = []
for ev in self.events[day]:
body.append('<a href="/calendar/%s">' % ev.id)
body.append(esc(ev.nom))
body.append(esc(ev.nomcourt))
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>' % day)

View file

@ -1,9 +1,7 @@
from django import forms
from calendrier.models import Event, Participants
class EventForm(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 ModifEventForm(forms.ModelForm):
class Meta:
model = Event
widgets = {
@ -13,6 +11,21 @@ class EventForm(forms.ModelForm):
'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 Meta:
model = Participants

View file

@ -9,13 +9,14 @@ ANSWERS = (
class Event(models.Model):
nom = models.CharField(max_length=100)
nomcourt = models.CharField(max_length=9, verbose_name="Nom court")
date = models.DateField()
debut = models.TimeField()
fin = models.TimeField(blank=True, null=True)
slug = models.CharField(max_length=7, editable=False, unique=True)
lieu = models.CharField(max_length=200)
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):
return self.nom

View file

@ -6,6 +6,7 @@ urlpatterns = patterns('calendrier.views',
url(r'^$', 'home'),
url(r'^edition/(?P<pk>\d+)$', EventUpdate.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<codeus>\w{6})/(?P<codeev>\w{6})/oui', 'repouidir'),
url(r'(?P<codeus>\w{6})/(?P<codeev>\w{6})/pe', 'reppedir'),

View file

@ -1,5 +1,5 @@
from django.shortcuts import render
from calendrier.forms import EventForm, ParticipantsForm
from django.shortcuts import render, redirect
from calendrier.forms import ModifEventForm, EventForm, ParticipantsForm, SendMail
from calendrier.models import Event, Participants
from django.utils.safestring import mark_safe
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 gestion.models import ErnestoUser
from django.utils.decorators import method_decorator
from django.core.mail import send_mail
import smtplib
from email.mime.multipart import MIMEMultipart
@ -91,6 +92,34 @@ def view_eventbis(request, id):
desc = True
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
def create_event(request):
if request.method == "POST":
@ -110,28 +139,33 @@ def create_event(request):
debut = form.cleaned_data["debut"]
message = form.cleaned_data["message"]
obj = form.save(commit=False)
id= obj.id
obj.slug = code
obj.save()
id= obj.id
envoi = True
if sendmail:
try:
smtpObj = smtplib.SMTP('clipper.ens.fr', 25)
sender = 'fanfare@ens.fr'
receivers = 'aymeric.fromherz@ens.fr'
msg = MIMEMultipart("alternative")
msg["Subject"] = nom + ", le " + date
msg["From"] = sender
msg["To"] = receivers
text = "Bonjour, un évémenent a été créé."
if message != '':
text = message
text+= '\nPour répondre, allez sur www.ernestophone.ens.fr/calendar/' + id + '/reponse'
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é."
users = ErnestoUser.objects.filter(is_ernesto=True)
for user in users:
try:
Subject = nom + ", le " + date
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 + '/' + obj.slug + '/oui'
text+= '\nPour répondre non, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/non'
text+= '\nPour répondre peut-être, allez sur http://www.ernestophone.ens.fr/calendar/' + user.slug + '/' + obj.slug + '/pe'
send_mail(Subject, text, sender, receivers)
# smtpObj = smtplib.SMTP('clipper.ens.fr', 25)
# msg = MIMEMultipart("alternative")
# msg["From"] = sender
# 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:
form = EventForm()
@ -172,7 +206,7 @@ def repouidir(request, codeus, codeev):
obj.reponse="oui"
obj.save()
envoi = True
return render(request,"calendrier/home.html", locals())
return redirect('calendrier.views.home')
def reppedir(request, codeus, codeev):
@ -189,7 +223,6 @@ def reppedir(request, codeus, codeev):
obj.reponse="pe"
obj.save()
envoi = True
return render(request,"calendrier/home.html", locals())
def repnondir(request, codeus, codeev):
part = ErnestoUser.objects.get(slug=codeus)
@ -205,12 +238,12 @@ def repnondir(request, codeus, codeev):
obj.reponse="non"
obj.save()
envoi = True
return render(request,"calendrier/home.html", locals())
return redirect('calendrier.views.home')
class EventUpdate(UpdateView):
model = Event
template_name = "calendrier/update.html"
form_class = EventForm
form_class = ModifEventForm
success_url = reverse_lazy(home)
@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 %}
<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/resend/{{ev.id}}">Renvoyer les mails</a></p>
{% endif %}
{% if user.is_authenticated %}
<p><a href="{% url 'calendrier.views.reponse' id %}">Répondre à l'événement</a></p>

View file

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