Le repo des sources pour le site web des JM2L
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

501 lines
23 KiB

  1. # -*- coding: utf8 -*-
  2. from wtforms import Form, BooleanField, TextField, TextAreaField, SelectField, SubmitField, validators, FieldList
  3. #import .ExtWforms
  4. from .ExtWtforms import MySelectField
  5. from wtforms import HiddenField, DecimalField, DateTimeField, FormField, FileField, DateField
  6. from wtforms.validators import ValidationError
  7. from datetime import datetime
  8. strip_filter = lambda x: x.strip() if x else None
  9. from wtforms.csrf.session import SessionCSRF
  10. from datetime import timedelta
  11. class MyBaseForm(Form):
  12. class Meta:
  13. csrf = True
  14. csrf_class = SessionCSRF
  15. csrf_secret = b'lJDQtOAMC2qe89doIn8u3Mch_DgeLSKO'
  16. csrf_time_limit = timedelta(minutes=20)
  17. class BlogCreateForm(MyBaseForm):
  18. title = TextField('Entry title', [validators.Length(min=1, max=255)],
  19. filters=[strip_filter])
  20. body = TextAreaField('Entry body', [validators.Length(min=1)],
  21. filters=[strip_filter])
  22. class BlogUpdateForm(BlogCreateForm):
  23. id = HiddenField()
  24. PLACE_TYPE = [('Aeroport', u'Aéroport'), ('Gare','Gare'), ('JM2L','JM2L'),
  25. ('Hotel',u'Hôtel'), ('Habitant','Habitant'),
  26. ('Restaurant','Restaurant'), ('Autres','Autres')]
  27. TIERS_ROLE = [('Exposant','Exposant'), ('Sponsor','Sponsor'),
  28. ('Donateur','Donateur')]
  29. EVENT_TYPE = ['Stand', 'Table ronde', 'Atelier', 'Concert', 'Conference', 'Repas']
  30. CONF_DURATION = [ (15,u'Lighting talk ( 5 min)'),
  31. (30,u'Conférence (20 min)'),
  32. (60,u'Conférence (50 min)'),
  33. (90,u'Conférence (75 min)'),]
  34. ATELIER_DURATION = [ (15,u'Lighting talk ( 5 min)'),
  35. (30,u'Conférence (20 min)'),
  36. (60,u'Conférence (50 min)'),
  37. (90,u'Conférence (75 min)'),]
  38. class StaffArea(MyBaseForm):
  39. name = TextField(u'Pôle')
  40. description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
  41. filters=[strip_filter]
  42. )
  43. class EditStaffArea(StaffArea):
  44. uid = HiddenField()
  45. class StaffTasks(MyBaseForm):
  46. name = TextField(u'Nom de la tâche')
  47. area_uid = SelectField(u'Pôle concerné', coerce=int )
  48. closed_by = SelectField(u'Assigné à', coerce=int )
  49. due_date = DateField(u'Date prévue', format='%d/%m/%Y')
  50. description = TextAreaField('Description', [validators.optional(), validators.Length(max=1000000)],
  51. filters=[strip_filter])
  52. class EditStaffTasks(StaffTasks):
  53. uid = HiddenField()
  54. class DossPresse(MyBaseForm):
  55. year_uid = HiddenField()
  56. doss_presse = TextAreaField('Dossier de Presse', [validators.optional(), validators.Length(max=1000000)],
  57. filters=[strip_filter])
  58. class TiersMember(MyBaseForm):
  59. class Meta:
  60. csrf = False
  61. year_uid = SelectField(u'Année', coerce=int, choices=zip(range(2006,2016),range(2006,2016)))
  62. user_uid = TextField(u'user')
  63. role = TextField(u'Role')
  64. class TiersChoice(MyBaseForm):
  65. class Meta:
  66. csrf = False
  67. year_uid = HiddenField()
  68. user_uid = HiddenField()
  69. tiers_uid = TextField(u'Entité')
  70. role = TextField(u'Role')
  71. class AddIntervenant(MyBaseForm):
  72. class Meta:
  73. csrf = False
  74. event_uid = HiddenField()
  75. nom = TextField(u'Nom', [validators.Length(max=80)],
  76. filters=[strip_filter],
  77. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  78. u"pas autorisée à l'exception des points, traits d'union, " +
  79. u"apostrophes et tirets bas."
  80. )
  81. prenom = TextField(u'Prénom', [validators.Length(max=80)],
  82. filters=[strip_filter],
  83. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  84. u"pas autorisée à l'exception des points, traits d'union, " +
  85. u"apostrophes et tirets bas."
  86. )
  87. email = TextField(u'Email', [validators.required(),
  88. validators.length(max=10),
  89. validators.Email(message='Ceci ne ressemble pas à une adresse valide')],
  90. description=u"Afin d'éviter la duplication d'information et les doublons inutile, "+
  91. u"pensez d'abord à lui demander de confirmer le mail qu'il a utilisé lors de "+
  92. u"son inscription sur le site.")
  93. add = SubmitField('Ajouter des intervenants')
  94. class ConfCreateForm(MyBaseForm):
  95. event_type = HiddenField()
  96. for_year = HiddenField()
  97. start_time = HiddenField()
  98. end_time = HiddenField()
  99. start_sel = SelectField(u'Début', coerce=int,
  100. description=u"C'est une heure indicative correspondant au mieux à vos préférences "+
  101. u"personnelles. Vous pouvez prendre un créneau horaire déjà réservé si vous avez des contraintes "
  102. u"particulières. L'équipe des JM2L mettra à disposition plus de salle si nécessaire. En cas de conflit,"+
  103. u"l'organisation se réserve le droit de changer la salle et l'heure avec votre accord."
  104. )
  105. duration = SelectField(u'Durée', coerce=int,
  106. description=u"Précisez ici la durée de votre intervention"
  107. )
  108. salle_uid = SelectField(u'Salle', coerce=int,
  109. description=u"Choisissez ici la salle en fonction "
  110. u"du nombres de personnes potentiellement intéressé par votre intervention "+
  111. u"l'organisation se réserve le droit de changer la salle (avec votre accord)."
  112. )
  113. name = TextField(u'Le nom de votre ',
  114. [validators.DataRequired(u'Vous devez spécifier un nom pour votre intérvention'),
  115. validators.Length(min=1, max=80, message='entre 1 et 80 car')],
  116. filters=[strip_filter])
  117. description = TextAreaField(u'Décrivez ici quelques détails à propos de votre intervention ',
  118. [validators.Optional(), validators.Length(max=1000000)],
  119. filters=[strip_filter]
  120. )
  121. class ConfUpdateForm(ConfCreateForm):
  122. uid = HiddenField()
  123. class PlaceCreateForm(MyBaseForm):
  124. place_type = SelectField('Type', choices=PLACE_TYPE)
  125. display_name = TextField(u'Nom affiché', [validators.Length(min=1, max=20)],
  126. filters=[strip_filter])
  127. name = TextField('Nom Complet', [validators.Length(min=1, max=80)],
  128. filters=[strip_filter])
  129. gps_coord = TextField(u'Coordonnées GPS', [validators.Length(max=30)],
  130. filters=[strip_filter])
  131. adresse = TextAreaField('Adresse', [validators.Length(max=100)],
  132. filters=[strip_filter])
  133. codePostal = TextField('Code Postal', [validators.Length(max=5)],
  134. filters=[strip_filter])
  135. ville = TextField('Ville', [validators.Length(max=40)],
  136. filters=[strip_filter])
  137. website = TextField('Site Web', [validators.Length(max=100)],
  138. filters=[strip_filter])
  139. description = TextAreaField('Description',
  140. filters=[strip_filter])
  141. created_by = HiddenField()
  142. class PlaceUpdateForm(PlaceCreateForm):
  143. place_id = HiddenField()
  144. def captcha_check(form, field):
  145. if form.meta.csrf_context.get('Captcha')!=field.data:
  146. raise ValidationError(u"la vérification captcha est invalide.")
  147. class UserRegisterForm(MyBaseForm):
  148. nom = TextField(u'Nom', [
  149. validators.Length(max=80, message=u"80 car. maximum"),
  150. validators.required(message=u"Ce champ est obligatoire") ],
  151. filters=[strip_filter]
  152. )
  153. prenom = TextField(u'Prénom', [
  154. validators.Length(max=80, message=u"80 car. maximum"),
  155. validators.required(message=u"Ce champ est obligatoire"),
  156. validators.Length(max=80)], filters=[strip_filter]
  157. )
  158. mail = TextField(u'Adresse électronique', [
  159. validators.required(message=u"Ce champ est obligatoire"),
  160. validators.Email(message=u"Essayez aussi avec une adresse e-mail valide"),
  161. validators.Length(max=100)],
  162. filters=[strip_filter],
  163. description = u"Une adresse e-mail valide." +
  164. u"Cette adresse ne sera pas rendue publique, "+
  165. u"et ne sera pas divulgué à des tiers."
  166. )
  167. captcha = TextField(u'Captcha', [validators.Length(max=8), captcha_check],
  168. filters=[strip_filter]
  169. )
  170. class ProfilForm(MyBaseForm):
  171. id = HiddenField()
  172. user_id = HiddenField()
  173. nom = TextField(u'Nom', [validators.Length(max=80)],
  174. filters=[strip_filter],
  175. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  176. u"pas autorisée à l'exception des points, traits d'union, " +
  177. u"apostrophes et tirets bas."
  178. )
  179. prenom = TextField(u'Prénom', [validators.Length(max=80)],
  180. filters=[strip_filter],
  181. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  182. u"pas autorisée à l'exception des points, traits d'union, " +
  183. u"apostrophes et tirets bas."
  184. )
  185. pseudo = TextField(u'Pseudo', [validators.Length(max=80)],
  186. filters=[strip_filter],
  187. description = "Votre pseudo d'usage sur la toile."
  188. )
  189. mail = TextField(u'Adresse électronique', [validators.optional(), validators.Email(), validators.Length(max=100)],
  190. filters=[strip_filter],
  191. description = u"Une adresse e-mail valide. Tous les messages de ce système" +
  192. u"seront envoyés à cette adresse. Cette adresse ne sera pas rendue publique,"+
  193. u"et ne sera utilisée que si vous désirez obtenir un nouveau mot de passe ou" +
  194. u"recevoir personnellement certaines nouvelles ou avertissements."
  195. )
  196. phone = TextField(u'Mobile', [validators.optional(), validators.Length(max=10),
  197. validators.Regexp("\d+", message=u"Le numéro de téléphone mobile ne doit contenir que des chiffres")],
  198. filters=[strip_filter],
  199. description = u"Un numéro de mobile valide. Afin de pouvoir rester en" +
  200. u"contact avec les personne de l'organisation, et pour vos échanges. " +
  201. u"Ce numéro ne sera pas publié, et ne sera utilisé que si " +
  202. u"vous désirez recevoir personnellement certaines nouvelles ou alertes."
  203. )
  204. website = TextField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)],
  205. filters=[strip_filter],
  206. description = "Renseignez ici votre site Web."
  207. )
  208. gpg_key = TextAreaField(u'Ma clé GPG',
  209. [validators.optional(), validators.Length(max=9000)],
  210. filters=[strip_filter],
  211. description = u"Vous pouvez insérer votre clé GPG publique pour " +
  212. u"échanger des données sécurisées."
  213. )
  214. soc_link = TextAreaField('Mes autres identifiants',
  215. [validators.optional(), validators.Length(max=1000000)],
  216. filters=[strip_filter],
  217. description = u"Vous pouvez insérer ici d'autres identifiants " +
  218. u"permettant aux autres de vous retrouver sur la toile (IRC, jabber, réseaux sociaux etc)."
  219. )
  220. bio = TextAreaField('Biographie', [validators.optional(), validators.Length(max=1000000)],
  221. filters=[strip_filter]
  222. )
  223. tiersship = FieldList(FormField(TiersChoice))
  224. class DateStartConfidenceForm(MyBaseForm):
  225. ConfidenceLevel = [
  226. ("0",u"exactement à"),
  227. ("1",u"approximativement à"),
  228. ("2",u"à peu près (5 à 15 min) vers"),
  229. ("3",u"à une vache près (1h) vers")
  230. ]
  231. DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")]
  232. Day = SelectField(u'Jour', choices=DayChoice )
  233. Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
  234. Hour = TextField(u'Heure', [validators.Length(max=5,
  235. message=u"doit faire au maximum 5 caractères"),
  236. validators.Regexp("\d+:\d+",
  237. message=u"doit être sous la forme HH:MM")],
  238. filters=[strip_filter])
  239. start_time = HiddenField()
  240. class ItineraireForm(Form):
  241. start_place = SelectField(u'En partant de', coerce=int)
  242. arrival_place = SelectField(u'et à destination de', coerce=int)
  243. itin_id = HiddenField()
  244. class AddItineraireForm(Form):
  245. itin = FormField(ItineraireForm)
  246. distance = DecimalField(u'Distance', [validators.Length(min=1, max=4)],
  247. filters=[strip_filter])
  248. duration = DateTimeField(u'Durée', [validators.Length(min=4, max=5)],
  249. filters=[strip_filter])
  250. price = DecimalField(u'Prix approx.', [validators.Length(min=1, max=5)],
  251. filters=[strip_filter])
  252. tr_pied = BooleanField(u'à pied')
  253. tr_velo = BooleanField(u'à vélo')
  254. tr_moto = BooleanField(u'à moto')
  255. tr_voiture = BooleanField(u'en voiture')
  256. tr_taxi = BooleanField(u'en taxi')
  257. tr_bus = BooleanField(u'en bus')
  258. tr_avion = BooleanField(u'en avion')
  259. description = TextAreaField(u'Description de l\'itinéraire')
  260. class AddMember(MyBaseForm):
  261. tiers_uid = HiddenField()
  262. nom = TextField(u'Nom', [validators.Length(max=80)],
  263. filters=[strip_filter],
  264. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  265. u"pas autorisée à l'exception des points, traits d'union, " +
  266. u"apostrophes et tirets bas."
  267. )
  268. prenom = TextField(u'Prénom', [validators.Length(max=80)],
  269. filters=[strip_filter],
  270. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  271. u"pas autorisée à l'exception des points, traits d'union, " +
  272. u"apostrophes et tirets bas."
  273. )
  274. email = TextField(u'Email', [validators.required(),
  275. validators.length(max=10),
  276. validators.Email(message='Ceci ne ressemble pas à une adresse valide')],
  277. description=u"Afin d'éviter la duplication d'information et les doublons inutile, "+
  278. u"pensez d'abord à lui demander de confirmer le mail qu'il a utilisé lors de "+
  279. u"son inscription sur le site.")
  280. add = SubmitField('Ajouter des membres')
  281. class TiersForm(MyBaseForm):
  282. name = TextField(u'Nom', [validators.Length(max=100)],
  283. filters=[strip_filter],
  284. description = u"Les espaces sont autorisés, la ponctuation n'est " +
  285. u"pas autorisée à l'exception des points, traits d'union, " +
  286. u"apostrophes et tirets bas."
  287. )
  288. tiers_type = MySelectField('Nature', coerce=int)
  289. website = TextField(u'Site web', [validators.optional(), validators.URL(), validators.Length(max=100)],
  290. filters=[strip_filter],
  291. description = "Renseignez ici le site Web."
  292. )
  293. description = TextAreaField('Descriptif',
  294. [validators.optional(), validators.Length(max=1000000)],
  295. filters=[strip_filter],
  296. description = u"Vous pouvez insérer les détails"
  297. )
  298. membership = FieldList(FormField(TiersMember))
  299. class UpdateTiersForm(TiersForm):
  300. uid = HiddenField()
  301. tiers_id = HiddenField()
  302. class ExchCateg(MyBaseForm):
  303. exch_type = HiddenField()
  304. exch_subtype = TextField(u'Catégorie', [validators.Length(max=80)],
  305. filters=[strip_filter],
  306. description = "Le nom de la categorie"
  307. )
  308. description = TextAreaField('Description',
  309. filters=[strip_filter])
  310. class UpdateExchangeForm(MyBaseForm):
  311. exch_id = HiddenField()
  312. class AskCForm(ItineraireForm):
  313. ConfidenceLevel = [
  314. ("0",u"exactement à"),
  315. ("1",u"approximativement à"),
  316. ("2",u"à peu près (5 à 15 min) vers"),
  317. ("3",u"à une vache près (1h) vers")
  318. ]
  319. DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")]
  320. Day_start = SelectField(u'Jour', choices=DayChoice )
  321. Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
  322. Hour_start = TextField(u'Heure', [validators.Length(max=5,
  323. message=u"doit faire au maximum 5 caractères"),
  324. validators.Regexp("\d+:\d+",
  325. message=u"doit être sous la forme HH:MM")],
  326. filters=[strip_filter])
  327. start_time = HiddenField()
  328. start_place = SelectField(u'En partant de', coerce=int)
  329. arrival_place = SelectField(u'et à destination de', coerce=int)
  330. itin_id = HiddenField()
  331. class AskHForm(MyBaseForm):
  332. DayChoice = [("4",u"Jeudi à Vendredi"), ("5",u"Vendredi à Samedi"), ("6",u"Samedi à Dimanche"), ("0",u"Dimanche à Lundi")]
  333. Day_start = SelectField(u'Pour la nuit de', choices=DayChoice )
  334. start_time = HiddenField()
  335. description = TextAreaField(u'Description de vos contraintes éventuelles', filters=[strip_filter],
  336. description = u"Décrivez ici vos souhaits et éventuellement "
  337. + u"les contraintes à prendre en compte. N'hésitez pas à donner des détails."
  338. )
  339. class AskMForm(MyBaseForm):
  340. DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")]
  341. Day_start = SelectField(u"à partir de", choices=DayChoice )
  342. Hour_start = TextField(u'vers', [validators.Length(max=5,
  343. message=u"doit faire au maximum 5 caractères"),
  344. validators.Regexp("\d+:\d+",
  345. message=u"doit être sous la forme HH:MM")],
  346. filters=[strip_filter])
  347. start_time = HiddenField()
  348. Day_end = SelectField(u"Jusqu'à", choices=DayChoice )
  349. Hour_end = TextField(u'vers', [validators.Length(max=5,
  350. message=u"doit faire au maximum 5 caractères"),
  351. validators.Regexp("\d+:\d+",
  352. message=u"doit être sous la forme HH:MM")],
  353. filters=[strip_filter])
  354. end_time = HiddenField()
  355. exch_categ = SelectField(u'Catégorie de matériel', coerce=int,
  356. description = u"Choisissez une catégorie de bien"
  357. )
  358. description = TextAreaField(u'Description du bien', filters=[strip_filter],
  359. description = u"Décrivez ici les biens que vous souhaitez"
  360. + u"échanger. N'hésitez pas à donner des détails."
  361. )
  362. class PropCForm(ItineraireForm):
  363. ConfidenceLevel = [
  364. ("0",u"exactement à"),
  365. ("1",u"approximativement à"),
  366. ("2",u"à peu près (5 à 15 min) vers"),
  367. ("3",u"à une vache près (1h) vers")
  368. ]
  369. DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")]
  370. Day_start = SelectField(u'Jour', choices=DayChoice )
  371. Confidence = SelectField(u'Confiance', choices=ConfidenceLevel)
  372. Hour_start = TextField(u'Heure', [validators.Length(max=5,
  373. message=u"doit faire au maximum 5 caractères"),
  374. validators.Regexp("\d+:\d+",
  375. message=u"doit être sous la forme HH:MM")],
  376. filters=[strip_filter])
  377. start_time = HiddenField()
  378. start_place = SelectField(u'En partant de', coerce=int)
  379. arrival_place = SelectField(u'et à destination de', coerce=int)
  380. itin_id = HiddenField()
  381. class PropHForm(MyBaseForm):
  382. DayChoice = [("4",u"Jeudi à Vendredi"), ("5",u"Vendredi à Samedi"), ("6",u"Samedi à Dimanche"), ("0",u"Dimanche à Lundi")]
  383. Day_start = SelectField(u'Pour la nuit de', choices=DayChoice )
  384. start_time = HiddenField()
  385. exch_categ = SelectField(u'Type de couchage', coerce=int,
  386. description = u"Indiquez ici le type de couchage proposé")
  387. description = TextAreaField(u'Quelques mots autour du logement que vous proposez', filters=[strip_filter],
  388. description = u"Décrivez ici quelques détails sur le logement que vous souhaitez "
  389. + u"proposer, les contraintes à prendre en compte. N'hésitez pas à donner des détails."
  390. )
  391. place_id = SelectField(u'Emplacement', coerce=int,
  392. description = u"Indiquez ici une des adresses que vous avez proposé")
  393. class PropMForm(MyBaseForm):
  394. DayChoice = [("4","Jeudi"), ("5","Vendredi"), ("6","Samedi"), ("0","Dimanche"), ("1","Lundi")]
  395. Day_start = SelectField(u"à partir de", choices=DayChoice )
  396. Hour_start = TextField(u'vers', [validators.Length(max=5,
  397. message=u"doit faire au maximum 5 caractères"),
  398. validators.Regexp("\d+:\d+",
  399. message=u"doit être sous la forme HH:MM")],
  400. filters=[strip_filter])
  401. start_time = HiddenField()
  402. Day_end = SelectField(u"Jusqu'a ", choices=DayChoice )
  403. Hour_end = TextField(u'vers', [validators.Length(max=5,
  404. message=u"doit faire au maximum 5 caractères"),
  405. validators.Regexp("\d+:\d+",
  406. message=u"doit être sous la forme HH:MM")],
  407. filters=[strip_filter])
  408. end_time = HiddenField()
  409. exch_categ = SelectField(u'Catégorie de matériel', coerce=int,
  410. description = u"Choisissez une catégorie de bien matériel"
  411. )
  412. description = TextAreaField(u'Ajoutez quelques mots autour du matériel que vous proposez', filters=[strip_filter],
  413. description = u"Décrivez ici quelques détails sur le matériel que vous souhaitez "
  414. + u"proposer. N'hésitez pas à donner des détails."
  415. )
  416. class UpdateAskCForm(AskCForm, UpdateExchangeForm):
  417. pass
  418. class UpdateAskHForm(AskHForm, UpdateExchangeForm):
  419. pass
  420. class UpdateAskMForm(AskMForm, UpdateExchangeForm):
  421. pass
  422. class UpdatePropCForm(PropCForm, UpdateExchangeForm):
  423. pass
  424. class UpdatePropHForm(PropHForm, UpdateExchangeForm):
  425. pass
  426. class UpdatePropMForm(PropMForm, UpdateExchangeForm):
  427. pass