Le repo des sources pour le site web des JM2L
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 

491 linhas
23 KiB

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