Ajouté un help text au champ "Description" lors de la soumission d'un évènement
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / forms.py
CommitLineData
544b4522 1# -*- encoding: utf-8 -*-
73309469 2import re, datetime
544b4522 3from django import forms
6cdb7d49 4from django import db
7bbf600c 5from django.db.models import Q
73309469 6from django.db import models
7from django.contrib.admin import widgets
0a95ac89 8from django.utils.safestring import mark_safe
0a77a7d6 9from datamaster_modeles.models import Thematique, Pays, Region
c9cbc784 10from models import Evenement, Discipline, Record, Actualite
0b72ebef 11from savoirs.lib.recherche import build_search_regexp
73309469 12from savoirs.admin import EvenementAdminForm
60d2095f 13import settings
da44ce68 14
7bbf600c
EMS
15# Modifications custom aux champs Django
16
17class SEPDateField(forms.DateField):
18 """Un champ de date avec des valeurs par défaut un peu modifiées."""
19
20 def __init__(self, *args, **kwargs):
0a8666f8 21 super(SEPDateField, self).__init__(self, *args, **kwargs)
7bbf600c
EMS
22
23 # La classe "date" active le datepicker dans sep.js
7bbf600c 24 # Nous recevons les dates en format français
0a8666f8 25 format = '%d/%m/%Y'
26 self.widget = forms.DateInput(attrs={'class': 'date'}, format=format)
27 self.input_formats = [format,]
7bbf600c 28
0a95ac89
EMS
29class SEPSplitDateTimeWidget(forms.MultiWidget):
30
31 def __init__(self):
32 self.date_format = '%d/%m/%Y'
a9e7bae1 33 self.time_format = '%H:%M'
0a95ac89
EMS
34 widgets = (forms.DateInput(attrs={'class': 'date'}, format=self.date_format),
35 forms.TimeInput(attrs={'class': 'time'}, format=self.time_format))
36 super(SEPSplitDateTimeWidget, self).__init__(widgets)
37
38 def decompress(self, value):
39 if value:
40 return [value.date(), value.time().replace(microsecond=0)]
41 return [None, None]
42
43 def format_output(self, rendered_widgets):
44 return mark_safe(u'Date: %s Heure: %s' % (rendered_widgets[0], rendered_widgets[1]))
45
46class SEPDateTimeField(forms.DateTimeField):
47 widget = SEPSplitDateTimeWidget
48
a9e7bae1
EMS
49 def __init__(self, *args, **kwargs):
50 super(SEPDateTimeField, self).__init__(input_formats=['%d/%m/%Y %H:%M'])
51
da44ce68 52# Formulaires de recherche
544b4522 53
da44ce68
EMS
54class RecordSearchForm(forms.Form):
55 """Formulaire de recherche pour les ressources."""
56
c56d992d 57 q = forms.CharField(required=False, label="Rechercher dans tous les champs")
f12cc7fb
EMS
58 auteur = forms.CharField(required=False, label="Auteur ou contributeur")
59 titre = forms.CharField(required=False, label="Titre")
60 sujet = forms.CharField(required=False, label="Sujet")
d27f539e 61 publisher = forms.CharField(required=False, label="Éditeur")
f0692c02 62 discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Toutes")
bc415771
EMS
63 region = forms.ModelChoiceField(queryset=Region.objects.all(), required=False, label="Région", empty_label="Toutes",
64 help_text="La région est ici définie au sens, non strictement géographique, du Bureau régional de l'AUF de référence.")
da44ce68
EMS
65
66 def get_query_set(self):
67 """Retourne l'ensemble des ressources qui correspondent aux valeurs
68 entrées dans le formulaire."""
5212238e 69 records = Record.objects
da44ce68 70 if self.is_valid():
5212238e
EMS
71 q = self.cleaned_data['q']
72 if q:
73 records = records.search(q)
f12cc7fb
EMS
74 auteur = self.cleaned_data['auteur']
75 if auteur:
5212238e 76 records = records.add_to_query('@(creator,contributor) ' + auteur)
f12cc7fb
EMS
77 titre = self.cleaned_data['titre']
78 if titre:
5212238e 79 records = records.add_to_query('@title ' + titre)
f12cc7fb
EMS
80 sujet = self.cleaned_data['sujet']
81 if sujet:
5212238e 82 records = records.add_to_query('@subject ' + sujet)
0e5d5bc9
EMS
83 publisher = self.cleaned_data['publisher']
84 if publisher:
5212238e 85 records = records.add_to_query('@publisher ' + publisher)
f0692c02
EMS
86 discipline = self.cleaned_data['discipline']
87 if discipline:
88 records = records.filter_discipline(discipline)
89 region = self.cleaned_data['region']
90 if region:
91 records = records.filter_region(region)
2e37be2b
EMS
92
93 if not q:
7020ea3d
EMS
94 """Montrer les résultats les plus récents si on n'a pas fait
95 une recherche par mots-clés."""
96 records = records.order_by('-id')
5212238e 97 return records.all()
f61e4846 98
c9cbc784
EMS
99class ActualiteSearchForm(forms.Form):
100 """Formulaire de recherche pour les actualités."""
101
c56d992d 102 q = forms.CharField(required=False, label="Rechercher dans tous les champs")
7bbf600c
EMS
103 date_min = SEPDateField(required=False, label="Depuis le")
104 date_max = SEPDateField(required=False, label="Jusqu'au")
f0692c02 105 discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Toutes")
bc415771
EMS
106 region = forms.ModelChoiceField(queryset=Region.objects.all(), required=False, label="Région", empty_label="Toutes",
107 help_text="La région est ici définie au sens, non strictement géographique, du Bureau régional de l'AUF de référence.")
c9cbc784
EMS
108
109 def get_query_set(self):
110 """Retourne l'ensemble des actualités qui correspondent aux valeurs
111 entrées dans le formulaire."""
5212238e 112 actualites = Actualite.objects
c9cbc784 113 if self.is_valid():
5212238e
EMS
114 q = self.cleaned_data['q']
115 if q:
116 actualites = actualites.search(q)
f0692c02
EMS
117 discipline = self.cleaned_data['discipline']
118 if discipline:
119 actualites = actualites.filter_discipline(discipline)
120 region = self.cleaned_data['region']
121 if region:
122 actualites = actualites.filter_region(region)
5212238e
EMS
123 date_min = self.cleaned_data['date_min']
124 if date_min:
125 actualites = actualites.filter_date(min=date_min)
126 date_max = self.cleaned_data['date_max']
127 if date_max:
128 actualites = actualites.filter_date(max=date_max)
129 return actualites.all()
c9cbc784 130
4101cfc0 131class EvenementSearchForm(forms.Form):
b5e81cfb 132 """Formulaire de recherche pour les évènements."""
4101cfc0 133
c56d992d 134 q = forms.CharField(required=False, label="Rechercher dans tous les champs")
7bbf600c
EMS
135 titre = forms.CharField(required=False, label="Intitulé")
136 type = forms.ChoiceField(required=False, choices=(('', 'Tous'),)+Evenement.TYPE_CHOICES)
7bbf600c
EMS
137 date_min = SEPDateField(required=False, label="Depuis le")
138 date_max = SEPDateField(required=False, label="Jusqu'au")
f0692c02 139 discipline = forms.ModelChoiceField(queryset=Discipline.objects.all(), required=False, label="Discipline", empty_label="Toutes")
bc415771
EMS
140 region = forms.ModelChoiceField(queryset=Region.objects.all(), required=False, label="Région", empty_label="Toutes",
141 help_text="La région est ici définie au sens, non strictement géographique, du Bureau régional de l'AUF de référence.")
4101cfc0
EMS
142
143 def get_query_set(self):
b5e81cfb 144 """Retourne l'ensemble des évènements qui correspondent aux valeurs
4101cfc0 145 entrées dans le formulaire."""
5212238e 146 evenements = Evenement.objects
4101cfc0
EMS
147 if self.is_valid():
148 query = self.cleaned_data['q']
149 if query:
150 evenements = evenements.search(query)
7bbf600c
EMS
151 titre = self.cleaned_data['titre']
152 if titre:
5212238e 153 evenements = evenements.add_to_query('@titre ' + titre)
116db1fd
EMS
154 discipline = self.cleaned_data['discipline']
155 if discipline:
156 evenements = evenements.filter_discipline(discipline)
157 region = self.cleaned_data['region']
158 if region:
159 evenements = evenements.filter_region(region)
5212238e
EMS
160 type = self.cleaned_data['type']
161 if type:
162 evenements = evenements.filter_type(type)
163 date_min = self.cleaned_data['date_min']
164 if date_min:
165 evenements = evenements.filter_debut(min=date_min)
166 date_max = self.cleaned_data['date_max']
167 if date_max:
168 evenements = evenements.filter_debut(max=date_max)
169 return evenements.all()
4101cfc0 170
da44ce68 171###
544b4522 172
73309469 173class EvenementForm(EvenementAdminForm):
0a95ac89
EMS
174 debut = SEPDateTimeField()
175 fin = SEPDateTimeField()
69ad0029
EMS
176 description = forms.CharField(
177 label='Description', required=False,
178 help_text="Présenter les thématiques de l'évènement et donner toutes les informations utiles aux futurs participants.",
179 widget=forms.Textarea
180 )
73309469 181
92c7413b
CR
182 class Meta:
183 model = Evenement
3a45eb64 184 exclude = ('approuve', 'uid', 'regions')
0a77a7d6 185
186# Admin views pour les associations par lots
187
188class PaysForm(forms.Form):
189 values = [(p.id, p.nom) for p in Pays.objects.all()]
190 pays = forms.MultipleChoiceField(choices=values)
191
192class RegionsForm(forms.Form):
264a3210 193 regions = forms.ModelMultipleChoiceField(queryset=Region.objects.all())
0a77a7d6 194
195class ThematiquesForm(forms.Form):
196 values = [(t.id, t.nom) for t in Thematique.objects.all()]
197 thematiques = forms.MultipleChoiceField(choices=values)
198
199class DisciplinesForm(forms.Form):
264a3210 200 disciplines = forms.ModelMultipleChoiceField(queryset=Discipline.objects.all())
0a77a7d6 201
202class ConfirmationForm(forms.Form):
203 pass
204