Commit 5dacb59d authored by Nicolas G.'s avatar Nicolas G.

Soumission à l'ADL pour les rencontres ponctuelles

parent 796877c6
......@@ -188,6 +188,12 @@ LOGIN_URL = '/admin/'
# Personnaliser cette valeur est fortement conseillée.
ADMIN_URL = 'admin42'
TINYMCE_DEFAULT_CONFIG = {
'plugins': "table,paste,searchreplace",
'cleanup_on_startup': True,
'min_height': 200,
'width': 700,
}
# Configuration locale
# Créez votre propre fichier local_settings.py afin de définir votre configuration personnelle
......
......@@ -16,7 +16,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.db import models
# Create your models here.
......
......@@ -15,11 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Bricole pour l'exécution du script de soumission
# Bricoles pour l'exécution du script de soumission
import os
import tempfile
import subprocess
#from subprocess import Popen, PIPE
from django.shortcuts import render
from django.http import Http404
......@@ -235,18 +234,11 @@ def adl(request, code):
if request.method== 'POST':
form = AgendaForm(request.POST)
if form.is_valid():
print('Le formulaire est valide')
print(form.cleaned_data['email'])
#print(request.POST['xml'])
#script = os.path.join(os.path.dirname(__file__),'../adl-submit.py')
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
script = BASE_DIR + '/adl-submit.py'
print(script)
with tempfile.TemporaryDirectory() as tempdir:
# Écrire le fichier XML
print("Le tempdir ⇒ " + tempdir)
fichier = tempdir + "/toto.xml"
print("Fichier ⇒ " + fichier)
fichier = tempdir + "/" + str(time.time()) + ".xml"
f = open(fichier, "w")
f.write(request.POST['xml'])
f.close()
......@@ -304,8 +296,6 @@ def stats(request, code):
# On récupère la ville :
ville = get_object_or_404(Ville, code=code)
toto = "Coucou c'est moi !"
if ville.numday == 0:
jour = list(rrule(MONTHLY, count=1, byweekday=SU(ville.numweek)))
......
......@@ -22,6 +22,8 @@ from django.db import models
from lieux.models import Lieu
from django.core.exceptions import ValidationError
from tinymce import models as tinymce_models
from django.core.validators import MaxValueValidator, MinValueValidator, RegexValidator
from django.utils.translation import gettext_lazy as _
......@@ -38,10 +40,10 @@ def pas_plus_de_cinq(value):
class Rencontre(models.Model):
code = models.CharField(verbose_name=_("Raccourci"), help_text=_("Ce code est utilisé dans les URL. Les caractères autorisés sont des lettres, des chiffres et des tirets (-, _)"), validators=[RegexValidator("^[a-zA-Z0-9_-]*$")], max_length =30, unique=True, null=False)
nom = models.CharField(verbose_name=_("Nom complet"), max_length=30, unique=True, null=False)
message = models.TextField(
message = tinymce_models.HTMLField(
verbose_name=_("Message long"), help_text=_("Apparaît sur la page de la Rencontre."),
)
description = models.TextField(
description = tinymce_models.HTMLField(
verbose_name=_("Message plus court"), help_text=("Apparaît sur le résumé."),
)
email = models.TextField(verbose_name=_("Message sur le courriel de confirmation d'inscription"),default=_("Bonjour #PRENOM #NOM.\n\nVotre inscription (pour #NB) a bien été prise en compte :\n- Rencontre : #RENCONTRE\n- Date : #DATE\n- Lieu : #LIEU\n- Adresse IP : #IP\n\nPour annuler votre inscription, vous pouvez cliquer sur le lien suivant : \n#URL_DEL"), help_text=_("Les mots-clés suivants peuvent être utilisés :<br>#NOM : Nom de l'inscrit<br>#PRENOM : prénom de l'inscrit<br>#ASSO : Association<br>#RENCONTRE : nom complet de la rencontre<br>#DATE : date de la rencontre<br>#LIEU : Nom du lieu de la rencontre<br>#NB : nombre d'inscrit<br>#IP : adresse IP de l'inscrit<br>#URL_DEL : adresse de désinscription"))
......
{% extends "base.html" %}
{% load i18n %}
{% block header %}
<h1>{{ rencontre.date|date:"l j F Y"|capfirst }}
<sup>{% if perms.ponctu.change_rencontre %}<a href="{% url "admin:ponctu_rencontre_change" rencontre.id %}">Modifier</a>{% endif %}
{% if user.is_staff %}<a href="{% url 'ponctu:voir_rencontre' rencontre.code %}">Retour</a> {% endif %}
</sup>
</h1>
{% endblock %}
{% block content %}
<div id="milieu">
<hr class="separation">
{% if resultat %}
<p class="infos">{{ resultat }}</p>
{% else %}
<form action="" method="post">
{% csrf_token %}
<fieldset>
<legend>
{% trans "Soumission à l'Agenda du Libre" %}
</legend>
<p>
{% trans "Le XML ci-dessous sera soumis à l'Agenda du Libre, vous pouvez le modifier si besoin." %}
</p>
{% if form %}
<textarea rows="32" cols="82" id="xml" name="xml">{% include 'adl2.xml' %}</textarea>
{{ form.as_p }}
<input type="submit" value="Envoyer" />
{% endif %}
</fieldset>
</form>
{% endif %}
</div>
{% endblock %}
#-*- coding: utf-8 -*-
from django.conf.urls import include, url
#from fj.views import InscritsDelete
from ponctu.views import InscritsDeletePonctu, inscription, adl
from ponctu.views import InscritsDeletePonctu, inscription, adl, adlxml
from django.conf import settings
#from django.contrib.staticfiles.urls import staticfiles_urlpatterns
......@@ -25,13 +24,16 @@ urlpatterns = [
# Génération du fichier XML pour la soumission à l'Agenda Du Libre
url(r'^agenda/(?P<code>.+)\.xml$',
adl,
name='adlxml'
),
# Page pour soumettre à l'Agenda du Libre
url(r'^agenda/(?P<code>.+)$',
adl,
name='adl'
),
# Page d'une recontre : inscription
url(r'^(?P<code>.+)$', inscription, name="voir_rencontre"),
#url(r'^(?P<code>.+)/stats$', 'fj.views.stats'),
]
......@@ -16,6 +16,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Bricoles pour l'exécution du script de soumission
import os
import tempfile
import subprocess
from django.shortcuts import render
from django.http import Http404
......@@ -42,7 +47,7 @@ from django.core.mail import send_mail
# Create your views here.
from ponctu.models import Rencontre, Inscrits
from fj.forms import InscritsForm # On importe le formulaire de fj car c'est *exactemet* le même
from fj.forms import InscritsForm, AgendaForm # On importe les formulaire de fj carce sont les mêmes
from django.utils.translation import gettext_lazy as _
from fj.models import Ville
......@@ -142,10 +147,10 @@ def inscription(request, code):
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def adl(request, code):
def adlxml(request, code):
""" Génération du XML pour l'Agenda Du Libre
"""
# Pour la description de la ville :
# Pour la description de la rencontre
rencontre = get_object_or_404(Rencontre, code=code, date__gte=datetime.date.today())
contact_adl = settings.ADMINS[0][1]
......@@ -154,6 +159,40 @@ def adl(request, code):
return render(request, "adl2.xml", locals())
@staff_member_required
def adl(request, code):
""" Page de soumission directe pour l'Agenda Du Libre
"""
# Pour la description de la rencontre
rencontre = get_object_or_404(Rencontre, code=code, date__gte=datetime.date.today())
contact_adl = settings.ADMINS[0][1]
url = "http://" + request.META["SERVER_NAME"] + "/" + rencontre.code
if request.method== 'POST':
form = AgendaForm(request.POST)
if form.is_valid():
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
script = BASE_DIR + '/adl-submit.py'
with tempfile.TemporaryDirectory() as tempdir:
# Écrire le fichier XML
fichier = tempdir + "/" + str(time.time()) + ".xml"
f = open(fichier, "w")
f.write(request.POST['xml'])
f.close()
cmd = subprocess.Popen([script, '--submitter', request.POST['email'], '--file', fichier], stdout=subprocess.PIPE)
resultat = cmd.communicate()[0]
else:
form=AgendaForm()
# La liste des villes
liste_villes = Ville.objects.all()
# La liste des rencontres ponctuelles
liste_rencontres = Rencontre.objects.filter(date__gte = datetime.datetime.now())
# Le gabartit
return render(request, 'agenda2.html', locals())
# ------- Page de suppression ----------------
class InscritsDeletePonctu(DeleteView):
model = Inscrits
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment