experiENS/avisstage/forms.py

106 lines
5.1 KiB
Python
Raw Normal View History

# coding: utf-8
from django import forms
from django.utils import timezone
2017-04-15 20:03:08 +02:00
import re
2017-04-13 22:50:00 +02:00
2017-05-02 23:23:26 +02:00
from .models import Normalien, Stage, Lieu, AvisLieu, AvisStage
from .widgets import LatLonField
# Sur-classe utile
2017-04-15 20:03:08 +02:00
class HTMLTrimmerForm(forms.ModelForm):
def clean(self):
2017-05-02 23:23:26 +02:00
# Suppression des espaces blanc avant et après le texte pour les champs html
2017-04-15 20:03:08 +02:00
leading_white = re.compile(r"^( \t\n)*(<p>(&nbsp;|[ \n\t]|<br[ /]*>)*</p>( \t\n)*)+?", re.IGNORECASE)
trailing_white = re.compile(r"(( \t\n)*<p>(&nbsp;|[ \n\t]|<br[ /]*>)*</p>)+?( \t\n)*$", re.IGNORECASE)
cleaned_data = super(HTMLTrimmerForm, self).clean()
2017-05-02 23:23:26 +02:00
2017-04-15 20:03:08 +02:00
for (fname, fval) in cleaned_data.items():
2017-05-02 23:23:26 +02:00
# Heuristique : les champs commençant par "avis_" sont des champs html
2017-04-15 20:03:08 +02:00
if fname[:5] == "avis_":
cleaned_data[fname] = leading_white.sub("", trailing_white.sub("", fval))
2017-05-02 23:23:26 +02:00
2017-04-15 20:03:08 +02:00
return cleaned_data
2017-05-02 23:23:26 +02:00
# Infos sur un stage
class StageForm(forms.ModelForm):
date_widget = forms.DateInput(attrs={"class":"datepicker",
"placeholder":"JJ/MM/AAAA"})
date_debut = forms.DateField(label=u"Date de début",
input_formats=["%d/%m/%Y"], widget=date_widget)
date_fin = forms.DateField(label=u"Date de fin",
input_formats=["%d/%m/%Y"], widget=date_widget)
class Meta:
model = Stage
2017-05-13 00:57:54 +02:00
fields = ['sujet', 'date_debut', 'date_fin', 'type_stage', 'niveau_scol', 'thematiques', 'matieres', 'structure', 'encadrants']
2017-05-02 23:23:26 +02:00
help_texts = {
"thematiques": u"Mettez une virgule pour valider votre thématique si la suggestion ne correspond pas ou si elle n'existe pas encore",
"structure": u"Nom de l'équipe, du laboratoire, de la startup... (si le lieu ne suffit pas)"
}
labels = {
"date_debut": u"Date de début",
}
def __init__(self, *args, **kwargs):
# Sauvegarde de la request pour avoir l'user
if "request" in kwargs:
self.request = kwargs.pop("request")
super(StageForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
# Lors de la création : attribution à l'utilisateur connecté
if self.instance.id is None and hasattr(self, 'request'):
self.instance.auteur = self.request.user.profil
# Date de modification
self.instance.date_maj = timezone.now()
stage = super(StageForm, self).save(commit=commit)
return stage
# Sous-formulaire des avis sur le stage
2017-04-15 20:03:08 +02:00
class AvisStageForm(HTMLTrimmerForm):
2017-04-13 22:50:00 +02:00
class Meta:
model = AvisStage
2017-05-13 00:57:54 +02:00
fields = ['chapo', 'avis_sujet', 'avis_ambiance', 'avis_admin', 'les_plus', 'les_moins']
2017-04-15 20:03:08 +02:00
help_texts = {
2017-05-13 00:57:54 +02:00
"chapo": u"\"Trop long, pas lu\" : une accroche résumant ce que vous avez pensé de ce séjour",
2017-05-02 03:11:34 +02:00
"avis_ambiance": u"Avez-vous passé un bon moment à ce travail ? Étiez-vous assez guidé⋅e ? Aviez-vous un bon contact avec vos encadrant⋅e⋅s ? Y avait-il une bonne ambiance dans l'équipe ?",
2017-05-13 00:57:54 +02:00
"avis_sujet": u"Quelle était votre mission ? Qu'en avez-vous retiré ? Le travail correspondait-il à vos attentes ? Était-ce à votre niveau, trop dur, trop facile ?",
"avis_admin": u"Avez-vous commencé votre travail à la date prévue ? Était-ce compliqué d'obtenir les documents nécessaires (visa, contrats, etc) ? L'administration de l'établissement vous a-t-elle aidé⋅e ? Étiez-vous rémunéré⋅e ?",
2017-05-02 03:11:34 +02:00
"les_plus": u"Les principaux points positifs de cette expérience",
2017-04-15 20:03:08 +02:00
"les_moins": u"Ce qui aurait pu être mieux",
}
2017-04-13 22:50:00 +02:00
2017-04-15 20:03:08 +02:00
class AvisLieuForm(HTMLTrimmerForm):
2017-04-13 22:50:00 +02:00
class Meta:
model = AvisLieu
fields = ['lieu', 'chapo', 'avis_lieustage', 'avis_pratique', 'avis_tourisme', 'les_plus', 'les_moins']
2017-04-15 20:03:08 +02:00
help_texts = {
2017-05-13 00:57:54 +02:00
"chapo": u"\"Trop long, pas lu\" : une accroche résumant ce que vous avez pensé de cet endroit",
2017-05-02 03:11:34 +02:00
"avis_lieustage": u"Qu'avez-vous pensé des lieux où vous travailliez ? Les bâtiments étaient-ils modernes ? Était-il agréable d'y travailler ?",
2017-04-15 20:03:08 +02:00
"avis_pratique": u"Avez-vous eu du mal à trouver un logement ? Y-a-t-il des choses que vous avez apprises sur place qu'il vous aurait été utile de savoir avant de partir ?",
"avis_tourisme": u"Y-a-t-il des lieux à visiter dans cette zone ? Avez-vous pratiqué des activités sportives ? Est-il facile de faire des rencontres ?",
"les_plus": u"Les meilleures raisons de partir à cet endroit",
"les_moins": u"Ce qui vous a gêné ou manqué là-bas",
}
2017-04-19 01:56:15 +02:00
widgets = {
"lieu": forms.HiddenInput(attrs={"class":"lieu-hidden"})
}
2017-04-13 22:50:00 +02:00
2017-05-02 23:23:26 +02:00
# Création d'un nouveau lieu
class LieuForm(forms.ModelForm):
coord = LatLonField()
class Meta:
model = Lieu
fields = ['nom', 'type_lieu', 'ville', 'pays', 'coord']
2017-05-02 23:23:26 +02:00
# Widget de feedback
2017-04-20 23:04:07 +02:00
class FeedbackForm(forms.Form):
objet = forms.CharField(label="Objet", required=True)
message = forms.CharField(label="Message", required=True, widget=forms.widgets.Textarea())