Files
jm2l/jm2l/forms.py
T

647 lines
28 KiB
Python

# -*- coding: utf8 -*-
import random
import string
from wtforms import Form, BooleanField, StringField, TextAreaField, SelectField
from wtforms import SubmitField, validators, FieldList, PasswordField
# import .ExtWforms
from .ExtWtforms import MySelectField
from wtforms import HiddenField, DecimalField, DateTimeField, FormField, DateField
from wtforms.validators import ValidationError
from wtforms.csrf.session import SessionCSRF
from datetime import timedelta
from jm2l.const import CurrentYear
# What about an helper function
def strip_filter(x):
# strip_filter = lambda x: x.strip() if x else None
if x:
return x.strip()
return None
# get random string password with letters, digits, and symbols
def get_random_string(length):
csrf_characters = string.ascii_letters + string.digits + string.punctuation
csrf = ''.join(random.choice(csrf_characters) for i in range(length))
return bytes(csrf, 'utf8')
class MyBaseForm(Form):
class Meta:
csrf = True
csrf_class = SessionCSRF
# csrf_secret = b'lJDQtOAMC2qe89doIn8u3Mch_DgeLSKO'
csrf_secret = get_random_string(32)
csrf_time_limit = timedelta(minutes=60)
class BlogCreateForm(MyBaseForm):
title = StringField('Entry title', [validators.Length(min=1, max=255)],
filters=[strip_filter])
body = TextAreaField('Entry body', [validators.Length(min=1)],
filters=[strip_filter])
class BlogUpdateForm(BlogCreateForm):
id = HiddenField()
PLACE_TYPE = [('Aeroport', u'Aéroport'), ('Gare', 'Gare'), ('JM2L', 'JM2L'),
('Hotel', u'Hôtel'), ('Habitant', 'Habitant'),
('Restaurant', 'Restaurant'), ('Autres', 'Autres')]
TIERS_ROLE = [('Exposant', 'Exposant'), ('Sponsor', 'Sponsor'),
('Donateur', 'Donateur')]
YESNO = [("0", "Non"), ("1", "Oui")]
EVENT_TYPE = ['Stand', 'Table ronde', 'Atelier', 'Concert', 'Conference', 'Repas']
CONF_DURATION = [(15, u'Lighting talk ( 5 min)'),
(30, u'Conférence (20 min)'),
(60, u'Conférence (50 min)'),
(90, u'Conférence (75 min)'), ]
ATELIER_DURATION = [(15, u'Lighting talk ( 5 min)'),
(30, u'Conférence (20 min)'),
(60, u'Conférence (50 min)'),
(90, u'Conférence (75 min)'), ]
class StaffArea(MyBaseForm):
name = StringField(u'Pôle')
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter]
)
year_uid = HiddenField('year', default=str(CurrentYear))
class EditStaffArea(StaffArea):
uid = HiddenField()
class StaffTasks(MyBaseForm):
name = StringField(u'Nom de la tâche', [validators.Required()])
area_uid = SelectField(u'Pôle concerné', coerce=int)
closed_by = SelectField(u'Assigné à', coerce=int)
due_date = DateField(u'Date prévue', format='%d/%m/%Y')
description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter])
year_uid = HiddenField('year', default=str(CurrentYear))
class EditStaffTasks(StaffTasks):
uid = HiddenField()
class DossPresse(MyBaseForm):
year_uid = HiddenField()
doss_presse = TextAreaField('Dossier de Presse', [validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter])
class IndexForm(MyBaseForm):
year_uid = HiddenField()
description = TextAreaField('Index', [validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter])
class TiersMember(MyBaseForm):
class Meta:
csrf = False
year_uid = SelectField(u'Année', coerce=int,
choices=list(zip(range(2006, CurrentYear + 1), range(2006, CurrentYear + 1))))
user_uid = StringField(u'user')
role = StringField(u'Role')
class TiersRole(MyBaseForm):
class Meta:
csrf = False
year_uid = SelectField(u'Année', coerce=int,
choices=list(zip(range(2006, CurrentYear + 1), range(2006, CurrentYear + 1))))
tiers_role = SelectField(u'Role', choices=TIERS_ROLE)
class TiersChoice(MyBaseForm):
class Meta:
csrf = False
year_uid = HiddenField()
user_uid = HiddenField()
tiers_uid = StringField(u'Entité')
role = StringField(u'Role')
class AddIntervenant(MyBaseForm):
class Meta:
csrf = False
event_uid = HiddenField()
intervenant = SelectField(u'Intervenant', coerce=int)
class AddTiers(MyBaseForm):
class Meta:
csrf = False
event_uid = HiddenField()
tiers = SelectField(u'Entité', coerce=int)
class ConfCreateForm(MyBaseForm):
event_type = HiddenField()
for_year = HiddenField()
start_time = HiddenField()
end_time = HiddenField()
start_sel = SelectField(
u'Début', coerce=int,
description=u"C'est une heure indicative correspondant au mieux à vos préférences "
u"personnelles. Vous pouvez prendre un créneau horaire déjà réservé si vous avez des contraintes "
u"particulières. L'équipe des JM2L mettra à disposition plus de salle si nécessaire. "
u"En cas de conflit,"
u"l'organisation se réserve le droit de changer la salle et l'heure avec votre accord."
)
duration = SelectField(
u'Durée', coerce=int,
description=u"Précisez ici la durée de votre intervention")
salle_uid = SelectField(
u'Salle', coerce=int,
description=u"Choisissez ici la salle en fonction du nombres de personnes potentiellement "
u"intéressé par votre intervention l'organisation se réserve le droit de changer"
u" la salle (avec votre accord)."
)
name = StringField(
u'Le nom de votre ',
[validators.DataRequired(u'Vous devez spécifier un nom pour votre intérvention'),
validators.Length(min=1, max=80, message='entre 1 et 80 car')],
filters=[strip_filter]
)
description = TextAreaField(
u'Décrivez ici quelques détails à propos de votre intervention ',
[validators.Optional(), validators.Length(max=1000000)],
filters=[strip_filter]
)
class ConfUpdateForm(ConfCreateForm):
uid = HiddenField()
class SalleForm(MyBaseForm):
year_uid = SelectField(u'Année', coerce=int)
phy_salle_id = SelectField('Salle Physique', coerce=int)
place_type = SelectField('Type', choices=[('Conference', u'Conférence'),
('Stand', 'Stand'), ('Atelier', 'Atelier'),
('Table ronde', 'Table ronde'),
('MAO', 'MAO'), ('Repas', 'Repas / Snack'), ('Autres', 'Autres')])
name = StringField('Nom de la salle', [validators.Length(min=1, max=40)],
filters=[strip_filter])
description = TextAreaField('Description',
filters=[strip_filter])
class EditSalleForm(SalleForm):
salle_id = HiddenField()
class SallePhyForm(MyBaseForm):
name = StringField('Nom de la salle', [validators.Length(min=1, max=40)],
filters=[strip_filter])
nb_places = StringField('Nombre de places', [validators.Length(max=4)])
description = TextAreaField('Description',
filters=[strip_filter])
class EditSallePhyForm(SallePhyForm):
uid = HiddenField()
class PlaceCreateForm(MyBaseForm):
place_type = SelectField('Type', choices=PLACE_TYPE)
display_name = StringField(u'Nom affiché', [validators.Length(min=1, max=20)],
filters=[strip_filter])
name = StringField('Nom Complet', [validators.Length(min=1, max=80)],
filters=[strip_filter])
gps_coord = StringField(u'Coordonnées GPS',
[validators.Length(max=30),
validators.Regexp("^[0-9]+\.?[0-9]+,[0-9]+\.?[0-9]+$",
message=u"Le GPS devrait être sous la forme 43.6158372,7.0723401")],
filters=[strip_filter])
adresse = TextAreaField('Adresse', [validators.Length(max=100)],
filters=[strip_filter])
codePostal = StringField('Code Postal', [validators.Length(max=5)],
filters=[strip_filter])
ville = StringField('Ville', [validators.Length(max=40)],
filters=[strip_filter])
website = StringField('Site Web', [validators.Length(max=100)],
filters=[strip_filter])
description = TextAreaField('Description',
filters=[strip_filter])
created_by = HiddenField()
class PlaceUpdateForm(PlaceCreateForm):
place_id = HiddenField()
def captcha_check(form, field):
if form.meta.csrf_context.get('Captcha') != field.data:
raise ValidationError(u"la vérification captcha est invalide.")
class UserPasswordForm(MyBaseForm):
uid = HiddenField()
password = PasswordField("Mot de passe", [
validators.Length(max=128, message=u"128 car. maximum"),
validators.required(message=u"Ce champ est obligatoire"),
validators.EqualTo('confirm', message=u'Les password ne sont pas équivalents')],
filters=[strip_filter]
)
confirm = PasswordField('Confirmez')
class UserRegisterForm(MyBaseForm):
nom = StringField(u'Nom', [
validators.Length(max=80, message=u"80 car. maximum"),
validators.required(message=u"Ce champ est obligatoire")],
filters=[strip_filter]
)
prenom = StringField(u'Prénom', [
validators.Length(max=80, message=u"80 car. maximum"),
validators.required(message=u"Ce champ est obligatoire"),
validators.Length(max=80)], filters=[strip_filter]
)
mail = StringField(u'Adresse électronique', [
validators.required(message=u"Ce champ est obligatoire"),
validators.Email(message=u"Essayez aussi avec une adresse e-mail valide"),
validators.Length(max=100)],
filters=[strip_filter],
description=u"Une adresse e-mail valide." +
u"Cette adresse ne sera pas rendue publique, " +
u"et ne sera pas divulguée à des tiers."
)
captcha = StringField(u'Captcha', [validators.Length(max=8), captcha_check],
filters=[strip_filter]
)
class ProfilForm(MyBaseForm):
id = HiddenField()
user_id = HiddenField()
nom = StringField(u'Nom', [validators.Length(max=80)],
filters=[strip_filter],
description=u"Les espaces sont autorisés, la ponctuation n'est " +
u"pas autorisée à l'exception des points, traits d'union, " +
u"apostrophes et tirets bas."
)
prenom = StringField(u'Prénom', [validators.Length(max=80)],
filters=[strip_filter],
description=u"Les espaces sont autorisés, la ponctuation n'est " +
u"pas autorisée à l'exception des points, traits d'union, " +
u"apostrophes et tirets bas."
)
pseudo = StringField(u'Pseudo', [validators.Length(max=80)],
filters=[strip_filter],
description="Votre pseudo d'usage sur la toile."
)
mail = StringField(u'Adresse électronique', [validators.optional(), validators.Email(), validators.Length(max=100)],
filters=[strip_filter],
description=u"Une adresse e-mail valide. Tous les messages de ce système" +
u"seront envoyés à cette adresse. Cette adresse ne sera pas rendue publique," +
u"et ne sera utilisée que si vous désirez obtenir un nouveau mot de passe ou" +
u"recevoir personnellement certaines nouvelles ou avertissements."
)
phone = StringField(u'Mobile', [validators.optional(), validators.Length(max=10),
validators.Regexp("\d+",
message=u"Le numéro de téléphone mobile ne doit contenir que des chiffres")],
filters=[strip_filter],
description=u"Un numéro de mobile valide. Afin de pouvoir rester en" +
u"contact avec les personne de l'organisation, et pour vos échanges. " +
u"Ce numéro ne sera pas publié, et ne sera utilisé que si " +
u"vous désirez recevoir personnellement certaines nouvelles ou alertes."
)
website = StringField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)],
filters=[strip_filter],
description="Renseignez ici votre site Web."
)
gpg_key = TextAreaField(u'Ma clé GPG',
[validators.optional(), validators.Length(max=9000)],
filters=[strip_filter],
description=u"Vous pouvez insérer votre clé GPG publique pour " +
u"échanger des données sécurisées."
)
soc_link = TextAreaField('Mes autres identifiants',
[validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter],
description=u"Vous pouvez insérer ici d'autres identifiants " +
u"permettant aux autres de vous retrouver sur la toile (IRC, jabber, réseaux sociaux etc)."
)
bio = TextAreaField('Biographie', [validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter]
)
tiersship = FieldList(FormField(TiersChoice))
class MiamForm(MyBaseForm):
RepasVendredi = SelectField(u'Je viens au dîner convivial vendredi soir',
choices=YESNO,
description=u"L'organisation réserve le " +
u"restaurant pour ce dîner convivial. De petites " +
u"animations vous seront proposées. " +
u"Il nous faut savoir si on vous réserve une place !"
)
RepasSamediMidi = SelectField(u'Je déjeune sur place samedi midi', choices=YESNO)
RepasSamediSoir = SelectField(u'Je viens au repas de clôture samedi soir', choices=YESNO,
description=u"L'organisation réserve le " +
u"restaurant pour le dîner de clôture. De petites " +
u"animations vous seront proposées. " +
u"Il nous faut savoir si on vous réserve une place !"
)
Allergies = TextAreaField(u'Allergies', [validators.Length(max=100)],
filters=[strip_filter],
description=u"Entrez ici vos allergies éventuelles, " +
u"Ce que votre organisme ne supporte absolument pas." +
u"L'organisation fera alors en sorte de les éviter ou " +
u"de les identifier explicitement."
)
Contraintes = TextAreaField(u'Contraintes', [validators.Length(max=100)],
filters=[strip_filter],
description=u"Entrez ici ce que vous n'aimez pas, " +
u"Cela ne consititue pas pour vous un allérgène, " +
u"mais vous n'aimez simplement pas. (Gluten / Laitage etc ...)"
)
class DateStartConfidenceForm(MyBaseForm):
ConfidenceLevel = [
("0", u"exactement à"),
("1", u"approximativement à"),
("2", u"à peu près (5 à 15 min) vers"),
("3", u"à une vache près (1h) vers")
]
DayChoice = [("4", "Jeudi"), ("5", "Vendredi"), ("6", "Samedi"), ("0", "Dimanche"), ("1", "Lundi")]
Day = SelectField(u'Jour', choices=DayChoice)
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
Hour = StringField(u'Heure', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
start_time = HiddenField()
class ItineraireForm(Form):
start_place = SelectField(u'En partant de', coerce=int)
arrival_place = SelectField(u'et à destination de', coerce=int)
itin_id = HiddenField()
class AddItineraireForm(Form):
itin = FormField(ItineraireForm)
distance = DecimalField(u'Distance', [validators.Length(min=1, max=4)],
filters=[strip_filter])
duration = DateTimeField(u'Durée', [validators.Length(min=4, max=5)],
filters=[strip_filter])
price = DecimalField(u'Prix approx.', [validators.Length(min=1, max=5)],
filters=[strip_filter])
tr_pied = BooleanField(u'à pied')
tr_velo = BooleanField(u'à vélo')
tr_moto = BooleanField(u'à moto')
tr_voiture = BooleanField(u'en voiture')
tr_taxi = BooleanField(u'en taxi')
tr_bus = BooleanField(u'en bus')
tr_avion = BooleanField(u'en avion')
description = TextAreaField(u'Description de l\'itinéraire')
class AddMember(MyBaseForm):
tiers_uid = HiddenField()
nom = StringField(u'Nom', [validators.Length(max=80)],
filters=[strip_filter],
description=u"Les espaces sont autorisés, la ponctuation n'est " +
u"pas autorisée à l'exception des points, traits d'union, " +
u"apostrophes et tirets bas."
)
prenom = StringField(u'Prénom', [validators.Length(max=80)],
filters=[strip_filter],
description=u"Les espaces sont autorisés, la ponctuation n'est " +
u"pas autorisée à l'exception des points, traits d'union, " +
u"apostrophes et tirets bas."
)
email = StringField(u'Email', [validators.required(),
validators.length(max=10),
validators.Email(message='Ceci ne ressemble pas à une adresse valide')],
description=u"Afin d'éviter la duplication d'information et les doublons inutile, " +
u"pensez d'abord à lui demander de confirmer le mail qu'il a utilisé lors de " +
u"son inscription sur le site.")
add = SubmitField('Ajouter des membres')
class TiersForm(MyBaseForm):
name = StringField(u'Nom', [validators.Length(max=100)],
filters=[strip_filter],
description=u"Les espaces sont autorisés, la ponctuation n'est " +
u"pas autorisée à l'exception des points, traits d'union, " +
u"apostrophes et tirets bas."
)
tiers_type = MySelectField('Nature', coerce=int)
website = StringField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)],
filters=[strip_filter],
description="Renseignez ici le site Web."
)
description = TextAreaField('Descriptif',
[validators.optional(), validators.Length(max=1000000)],
filters=[strip_filter],
description=u"Vous pouvez insérer les détails"
)
membership = FieldList(FormField(TiersMember))
roles = FieldList(FormField(TiersRole))
class UpdateTiersForm(TiersForm):
uid = HiddenField()
tiers_id = HiddenField()
class ExchCateg(MyBaseForm):
exch_type = HiddenField()
exch_subtype = StringField(u'Catégorie', [validators.Length(max=80)],
filters=[strip_filter],
description="Le nom de la categorie"
)
description = TextAreaField('Description',
filters=[strip_filter])
class UpdateExchangeForm(MyBaseForm):
exch_id = HiddenField()
class AskCForm(ItineraireForm):
ConfidenceLevel = [
("0", u"exactement à"),
("1", u"approximativement à"),
("2", u"à peu près (5 à 15 min) vers"),
("3", u"à une vache près (1h) vers")
]
DayChoice = [("4", "Jeudi"), ("5", "Vendredi"), ("6", "Samedi"), ("0", "Dimanche"), ("1", "Lundi")]
Day_start = SelectField(u'Jour', choices=DayChoice)
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
Hour_start = StringField(u'Heure', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
start_time = HiddenField()
start_place = SelectField(u'En partant de', coerce=int)
arrival_place = SelectField(u'et à destination de', coerce=int)
itin_id = HiddenField()
class AskHForm(MyBaseForm):
DayChoice = [("4", u"Jeudi à Vendredi"), ("5", u"Vendredi à Samedi"), ("6", u"Samedi à Dimanche"),
("0", u"Dimanche à Lundi")]
Day_start = SelectField(u'Pour la nuit de', choices=DayChoice)
start_time = HiddenField()
description = TextAreaField(u'Description de vos contraintes éventuelles', filters=[strip_filter],
description=u"Décrivez ici vos souhaits et éventuellement "
+ u"les contraintes à prendre en compte. N'hésitez pas à donner des détails."
)
class AskMForm(MyBaseForm):
DayChoice = [("4", "Jeudi"), ("5", "Vendredi"), ("6", "Samedi"), ("0", "Dimanche"), ("1", "Lundi")]
Day_start = SelectField(u"à partir de", choices=DayChoice)
Hour_start = StringField(u'vers', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
start_time = HiddenField()
Day_end = SelectField(u"Jusqu'à", choices=DayChoice)
Hour_end = StringField(u'vers', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
end_time = HiddenField()
exch_categ = SelectField(u'Catégorie de matériel', coerce=int,
description=u"Choisissez une catégorie de bien"
)
description = TextAreaField(u'Description du bien', filters=[strip_filter],
description=u"Décrivez ici les biens que vous souhaitez"
+ u"échanger. N'hésitez pas à donner des détails."
)
class PropCForm(ItineraireForm):
ConfidenceLevel = [
("0", u"exactement à"),
("1", u"approximativement à"),
("2", u"à peu près (5 à 15 min) vers"),
("3", u"à une vache près (1h) vers")
]
DayChoice = [("4", "Jeudi"), ("5", "Vendredi"), ("6", "Samedi"), ("0", "Dimanche"), ("1", "Lundi")]
Day_start = SelectField(u'Jour', choices=DayChoice)
Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
Hour_start = StringField(u'Heure', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
start_time = HiddenField()
start_place = SelectField(u'En partant de', coerce=int)
arrival_place = SelectField(u'et à destination de', coerce=int)
itin_id = HiddenField()
class PropHForm(MyBaseForm):
DayChoice = [("4", u"Jeudi à Vendredi"), ("5", u"Vendredi à Samedi"), ("6", u"Samedi à Dimanche"),
("0", u"Dimanche à Lundi")]
Day_start = SelectField(u'Pour la nuit de', choices=DayChoice)
start_time = HiddenField()
exch_categ = SelectField(u'Type de couchage', coerce=int,
description=u"Indiquez ici le type de couchage proposé")
description = TextAreaField(u'Quelques mots autour du logement que vous proposez', filters=[strip_filter],
description=u"Décrivez ici quelques détails sur le logement que vous souhaitez "
+ u"proposer, les contraintes à prendre en compte. N'hésitez pas à donner des détails."
)
place_id = SelectField(u'Emplacement', coerce=int,
description=u"Indiquez ici une des adresses que vous avez proposé")
class PropMForm(MyBaseForm):
DayChoice = [("4", "Jeudi"), ("5", "Vendredi"), ("6", "Samedi"), ("0", "Dimanche"), ("1", "Lundi")]
Day_start = SelectField(u"à partir de", choices=DayChoice)
Hour_start = StringField(u'vers', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
start_time = HiddenField()
Day_end = SelectField(u"Jusqu'a ", choices=DayChoice)
Hour_end = StringField(u'vers', [validators.Length(max=5,
message=u"doit faire au maximum 5 caractères"),
validators.Regexp("\d+:\d+",
message=u"doit être sous la forme HH:MM")],
filters=[strip_filter])
end_time = HiddenField()
exch_categ = SelectField(
u'Catégorie de matériel', coerce=int,
description=u"Choisissez une catégorie de bien matériel"
)
description = TextAreaField(
u'Ajoutez quelques mots autour du matériel que vous proposez',
filters=[strip_filter],
description=u"Décrivez ici quelques détails sur le matériel "
u"que vous souhaitez proposer. N'hésitez pas à donner des détails."
)
class UpdateAskCForm(AskCForm, UpdateExchangeForm):
pass
class UpdateAskHForm(AskHForm, UpdateExchangeForm):
pass
class UpdateAskMForm(AskMForm, UpdateExchangeForm):
pass
class UpdatePropCForm(PropCForm, UpdateExchangeForm):
pass
class UpdatePropHForm(PropHForm, UpdateExchangeForm):
pass
class UpdatePropMForm(PropMForm, UpdateExchangeForm):
pass