Ajouté les instructions pour patcher les permissions des eggs
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / forms.py
1 # -*- encoding: utf-8 -*-
2
3 from auf.django.references.models import Thematique, Pays, Region
4 from django import forms
5 from django.utils.safestring import mark_safe
6
7 from savoirs.models import \
8 Evenement, Discipline, RessourceSearch, ActualiteSearch, \
9 AppelSearch, EvenementSearch, Search, RecordCategorie
10 from savoirs.admin import EvenementAdminForm
11
12
13 # Modifications custom aux champs Django
14
15 class SEPDateField(forms.DateField):
16 """Un champ de date avec des valeurs par défaut un peu modifiées."""
17
18 def __init__(self, *args, **kwargs):
19 super(SEPDateField, self).__init__(self, *args, **kwargs)
20
21 # La classe "date" active le datepicker dans sep.js
22 # Nous recevons les dates en format français
23 format = '%d/%m/%Y'
24 self.widget = forms.DateInput(attrs={'class': 'date'}, format=format)
25 self.input_formats = [format]
26 self.help_text = 'format: jj/mm/aaaa'
27
28
29 class SEPSplitDateTimeWidget(forms.MultiWidget):
30
31 def __init__(self):
32 self.date_format = '%d/%m/%Y'
33 self.time_format = '%H:%M'
34 widgets = (
35 forms.DateInput(attrs={'class': 'date'}, format=self.date_format),
36 forms.TimeInput(attrs={'class': 'time'}, format=self.time_format)
37 )
38 super(SEPSplitDateTimeWidget, self).__init__(widgets)
39
40 def decompress(self, value):
41 if value:
42 return [value.date(), value.time().replace(microsecond=0)]
43 return [None, None]
44
45 def format_output(self, rendered_widgets):
46 return mark_safe(
47 u'Date: %s Heure: %s' % (rendered_widgets[0], rendered_widgets[1])
48 )
49
50
51 class SEPDateTimeField(forms.DateTimeField):
52 widget = SEPSplitDateTimeWidget
53
54 def __init__(self, *args, **kwargs):
55 super(SEPDateTimeField, self).__init__(
56 input_formats=['%d/%m/%Y %H:%M'],
57 help_text='format: jj/mm/aaaa'
58 )
59
60
61 # Formulaires de recherche
62
63 class RessourceSearchForm(forms.ModelForm):
64 """Formulaire de recherche pour les ressources."""
65
66 class Meta:
67 model = RessourceSearch
68 fields = ['q', 'auteur', 'titre', 'sujet', 'publisher', 'categorie',
69 'discipline', 'region']
70
71
72 class RessourceSearchEditForm(RessourceSearchForm):
73 """Formulaire d'édition de recherche sauvegardée."""
74
75 class Meta(RessourceSearchForm.Meta):
76 fields = ['nom', 'alerte_courriel'] + RessourceSearchForm.Meta.fields
77
78
79 class ActualiteSearchForm(forms.ModelForm):
80 """Formulaire de recherche pour les actualités."""
81 date_min = SEPDateField(required=False, label="Depuis le")
82 date_max = SEPDateField(required=False, label="Jusqu'au")
83
84 class Meta:
85 model = ActualiteSearch
86 fields = ['q', 'date_min', 'date_max', 'discipline', 'region']
87
88
89 class ActualiteSearchEditForm(ActualiteSearchForm):
90
91 class Meta(ActualiteSearchForm.Meta):
92 fields = ['nom', 'alerte_courriel'] + ActualiteSearchForm.Meta.fields
93
94
95 class AppelSearchForm(forms.ModelForm):
96 """Formulaire de recherche pour les actualités."""
97 date_min = SEPDateField(required=False, label="Depuis le")
98 date_max = SEPDateField(required=False, label="Jusqu'au")
99
100 class Meta:
101 model = AppelSearch
102 fields = ['q', 'date_min', 'date_max', 'discipline', 'region']
103
104
105 class AppelSearchEditForm(AppelSearchForm):
106
107 class Meta(AppelSearchForm.Meta):
108 fields = ['nom', 'alerte_courriel'] + AppelSearchForm.Meta.fields
109
110
111 class EvenementSearchForm(forms.ModelForm):
112 """Formulaire de recherche pour les évènements."""
113 date_min = SEPDateField(required=False, label="Depuis le")
114 date_max = SEPDateField(required=False, label="Jusqu'au")
115
116 class Meta:
117 model = EvenementSearch
118 fields = ['q', 'type', 'date_min', 'date_max', 'discipline', 'region']
119
120
121 class EvenementSearchEditForm(EvenementSearchForm):
122
123 class Meta(EvenementSearchForm.Meta):
124 fields = ['nom', 'alerte_courriel'] + EvenementSearchForm.Meta.fields
125
126
127 class SearchEditForm(forms.ModelForm):
128
129 class Meta:
130 model = Search
131
132
133 ###
134
135 class EvenementForm(EvenementAdminForm):
136 debut = SEPDateTimeField()
137 fin = SEPDateTimeField()
138 description = forms.CharField(
139 label='Description', required=True,
140 help_text=(
141 "Présenter les thématiques de l'évènement et donner "
142 "toutes les informations utiles aux futurs participants."
143 ),
144 widget=forms.Textarea
145 )
146 pays = forms.ModelChoiceField(
147 queryset=Pays.objects.all(), required=True, label='Pays',
148 help_text=(
149 "La sélection du pays entraine la saisie automatique "
150 "du fuseau horaire."
151 )
152 )
153
154 class Meta:
155 model = Evenement
156 exclude = ('contact', 'approuve', 'uid', 'regions')
157
158
159 # Admin views pour les associations par lots
160
161 class CategorieForm(forms.Form):
162 categorie = forms.ModelChoiceField(queryset=RecordCategorie.objects.all())
163
164
165 class PaysForm(forms.Form):
166 pays = forms.ModelMultipleChoiceField(queryset=Pays.objects.all())
167
168
169 class RegionsForm(forms.Form):
170 regions = forms.ModelMultipleChoiceField(queryset=Region.objects.all())
171
172
173 class ThematiquesForm(forms.Form):
174 thematiques = forms.ModelMultipleChoiceField(
175 queryset=Thematique.objects.all()
176 )
177
178
179 class DisciplinesForm(forms.Form):
180 disciplines = forms.ModelMultipleChoiceField(
181 queryset=Discipline.objects.all()
182 )
183
184
185 class ConfirmationForm(forms.Form):
186 pass