1 # -*- encoding: utf-8 -*-
3 from django
import forms
4 from django
.db
.models
import Q
5 from datamaster_modeles
.models
import Thematique
, Pays
, Region
6 from models
import Evenement
, Discipline
, Record
, Actualite
7 from savoirs
.lib
.recherche
import build_search_regexp
9 # Modifications custom aux champs Django
11 class SEPDateField(forms
.DateField
):
12 """Un champ de date avec des valeurs par défaut un peu modifiées."""
14 def __init__(self
, *args
, **kwargs
):
16 # La classe "date" active le datepicker dans sep.js
17 kwargs
.setdefault('widget', forms
.DateInput(*args
, attrs
={'class': 'date'}))
19 # Nous recevons les dates en format français
20 kwargs
.setdefault('input_formats', ['%d/%m/%Y'])
22 forms
.DateField
.__init__(self
, *args
, **kwargs
)
24 # Formulaires de recherche
26 class RechercheAvancee (forms
.Form
):
27 creator
= forms
.CharField (max_length
=60, required
=False, \
28 label
= "Auteur ou contributeur") # + contributor
29 title
= forms
.CharField (max_length
=100, required
=False, \
30 label
= "Titre") # + alt_title
31 description
= forms
.CharField (max_length
=100, required
=False, \
32 label
= "Description ou résumé") # + abstract
33 subject
= forms
.CharField (max_length
=100, required
=False, label
= "Sujet")
34 operator
= forms
.ChoiceField (choices
= (('or', 'ou'), ('and', 'et')), label
= "Operateur")
35 type = forms
.CharField (initial
='avancee', required
=False, widget
=forms
.HiddenInput
)
37 class RecordSearchForm(forms
.Form
):
38 """Formulaire de recherche pour les ressources."""
40 q
= forms
.CharField(required
=False, label
="Mots-clés")
41 auteur
= forms
.CharField(required
=False, label
="Auteur ou contributeur")
42 titre
= forms
.CharField(required
=False, label
="Titre")
43 sujet
= forms
.CharField(required
=False, label
="Sujet")
45 def get_query_set(self
):
46 """Retourne l'ensemble des ressources qui correspondent aux valeurs
47 entrées dans le formulaire."""
48 records
= Record
.objects
.validated()
50 query
= self
.cleaned_data
['q']
52 records
= records
.search(query
)
53 auteur
= self
.cleaned_data
['auteur']
55 records
= records
.search_auteur(auteur
)
56 titre
= self
.cleaned_data
['titre']
58 records
= records
.search_titre(titre
)
59 sujet
= self
.cleaned_data
['sujet']
61 records
= records
.search_sujet(sujet
)
64 def get_search_regexp(self
):
65 """Retourne une expression régulière compilée qui peut servir à
66 chercher les mot-clés recherchés dans un texte."""
68 return build_search_regexp(self
.cleaned_data
['q'])
70 class ActualiteSearchForm(forms
.Form
):
71 """Formulaire de recherche pour les actualités."""
73 q
= forms
.CharField(required
=False, label
="Mots-clés")
74 date_min
= SEPDateField(required
=False, label
="Depuis le")
75 date_max
= SEPDateField(required
=False, label
="Jusqu'au")
77 def get_query_set(self
):
78 """Retourne l'ensemble des actualités qui correspondent aux valeurs
79 entrées dans le formulaire."""
80 actualites
= Actualite
.objects
.filter(visible
=True)
82 query
= self
.cleaned_data
['q']
84 actualites
= actualites
.search(query
)
85 date_min
= self
.cleaned_data
['date_min']
87 actualites
= actualites
.filter(date__gte
=date_min
)
88 date_max
= self
.cleaned_data
['date_max']
90 actualites
= actualites
.filter(date__lte
=date_max
)
93 def get_search_regexp(self
):
94 """Retourne une expression régulière compilée qui peut servir à
95 chercher les mot-clés recherchés dans un texte."""
97 return build_search_regexp(self
.cleaned_data
['q'])
99 class EvenementSearchForm(forms
.Form
):
100 """Formulaire de recherche pour les événements."""
102 q
= forms
.CharField(required
=False, label
="Mots-clés")
103 titre
= forms
.CharField(required
=False, label
="Intitulé")
104 type = forms
.ChoiceField(required
=False, choices
=(('', 'Tous'),)+Evenement
.TYPE_CHOICES
)
105 discipline
= forms
.ModelChoiceField(queryset
=Discipline
.objects
.all(),
106 required
=False, label
="Discipline", empty_label
="Toutes")
107 date_min
= SEPDateField(required
=False, label
="Depuis le")
108 date_max
= SEPDateField(required
=False, label
="Jusqu'au")
110 def get_query_set(self
):
111 """Retourne l'ensemble des événements qui correspondent aux valeurs
112 entrées dans le formulaire."""
113 evenements
= Evenement
.objects
.filter(approuve
=True)
115 query
= self
.cleaned_data
['q']
117 evenements
= evenements
.search(query
)
118 titre
= self
.cleaned_data
['titre']
120 evenements
= evenements
.search_titre(titre
)
121 type = self
.cleaned_data
['type']
123 evenements
= evenements
.filter(type=type)
124 discipline
= self
.cleaned_data
['discipline']
126 evenements
= evenements
.filter(Q(discipline
=discipline
) |
Q(discipline_secondaire
=discipline
))
127 date_min
= self
.cleaned_data
['date_min']
129 evenements
= evenements
.filter(debut__gte
=date_min
)
130 date_max
= self
.cleaned_data
['date_max']
132 evenements
= evenements
.filter(debut__lte
=date_max
)
135 def get_search_regexp(self
):
136 """Retourne une expression régulière compilée qui peut servir à
137 chercher les mot-clés recherchés dans un texte."""
139 return build_search_regexp(self
.cleaned_data
['q'])
143 class EvenementForm(forms
.ModelForm
):
146 exclude
= ('approuve', 'uid')
148 # Admin views pour les associations par lots
150 class PaysForm(forms
.Form
):
151 values
= [(p
.id, p
.nom
) for p
in Pays
.objects
.all()]
152 pays
= forms
.MultipleChoiceField(choices
=values
)
154 class RegionsForm(forms
.Form
):
155 values
= [(r
.id, r
.nom
) for r
in Region
.objects
.all()]
156 regions
= forms
.MultipleChoiceField(choices
=values
)
158 class ThematiquesForm(forms
.Form
):
159 values
= [(t
.id, t
.nom
) for t
in Thematique
.objects
.all()]
160 thematiques
= forms
.MultipleChoiceField(choices
=values
)
162 class DisciplinesForm(forms
.Form
):
163 values
= [(t
.id, t
.nom
) for t
in Discipline
.objects
.all()]
164 disciplines
= forms
.MultipleChoiceField(choices
=values
)
166 class ConfirmationForm(forms
.Form
):