Plop
This commit is contained in:
parent
20a02d1013
commit
34d56e8635
62 changed files with 97 additions and 31 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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
BIN
calendrier/__init__.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -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'),
|
||||
|
|
|
@ -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)
|
||||
|
|
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
0
manage.py
Executable file → Normal file
0
manage.py
Executable file → Normal file
BIN
partitions/__init__.pyc
Normal file
BIN
partitions/__init__.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
partitions/models.pyc
Normal file
BIN
partitions/models.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
propositions/__init__.pyc
Normal file
BIN
propositions/__init__.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
15
templates/calendrier/resend.html
Normal file
15
templates/calendrier/resend.html
Normal 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 %}
|
|
@ -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>
|
||||
|
|
|
@ -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 %}
|
||||
|
|
Loading…
Add table
Reference in a new issue