1 # -*- encoding: utf-8 -*-
3 from django
import forms
4 from datamaster_modeles
.models
import Thematique
, Pays
, Region
5 from models
import Evenement
, Discipline
, Record
7 # Formulaires de recherche
9 class RechercheAvancee (forms
.Form
):
10 creator
= forms
.CharField (max_length
=60, required
=False, \
11 label
= "Auteur ou contributeur") # + contributor
12 title
= forms
.CharField (max_length
=100, required
=False, \
13 label
= "Titre") # + alt_title
14 description
= forms
.CharField (max_length
=100, required
=False, \
15 label
= "Description ou résumé") # + abstract
16 subject
= forms
.CharField (max_length
=100, required
=False, label
= "Sujet")
17 operator
= forms
.ChoiceField (choices
= (('or', 'ou'), ('and', 'et')), label
= "Operateur")
18 type = forms
.CharField (initial
='avancee', required
=False, widget
=forms
.HiddenInput
)
20 class RecordSearchForm(forms
.Form
):
21 """Formulaire de recherche pour les ressources."""
23 q
= forms
.CharField(required
=False, label
="Mots-clés")
24 auteur
= forms
.CharField(required
=False, label
="Auteur ou contributeur")
25 titre
= forms
.CharField(required
=False, label
="Titre")
26 sujet
= forms
.CharField(required
=False, label
="Sujet")
28 def get_query_set(self
):
29 """Retourne l'ensemble des ressources qui correspondent aux valeurs
30 entrées dans le formulaire."""
31 records
= Record
.objects
.all()
33 query
= self
.cleaned_data
['q']
35 records
= records
.search(query
)
36 auteur
= self
.cleaned_data
['auteur']
38 records
= records
.search_auteur(auteur
)
39 titre
= self
.cleaned_data
['titre']
41 records
= records
.search_titre(titre
)
42 sujet
= self
.cleaned_data
['sujet']
44 records
= records
.search_sujet(sujet
)
47 def get_search_regexp(self
):
48 """Retourne une expression régulière compilée qui peut servir à
49 chercher les mot-clés recherchés dans un texte."""
51 words
= self
.cleaned_data
['q'].split()
56 part
= re
.escape(word
.lower())
57 # Les expressions régulières ne connaissent pas la version
58 # en majuscules des caractères accentués. :(
59 part
= part
.replace(u
'à', u
'[àÀ]')
60 part
= part
.replace(u
'â', u
'[âÂ]')
61 part
= part
.replace(u
'é', u
'[éÉ]')
62 part
= part
.replace(u
'ê', u
'[êÊ]')
63 part
= part
.replace(u
'î', u
'[îÎ]')
65 # Faire ceci après avoir traité les caractères accentués...
66 part
= part
.replace('a', u
'[aàâÀÂ]')
67 part
= part
.replace('e', u
'[eéèëêÉÊ]')
68 part
= part
.replace('i', u
'[iïîÎ]')
69 part
= part
.replace('o', u
'[oô]')
70 part
= part
.replace('u', u
'[uûüù]')
73 return re
.compile('|'.join(parts
), re
.I
)
76 class EvenementForm(forms
.ModelForm
):
79 exclude
= ('approuve', 'uid')
81 # Admin views pour les associations par lots
83 class PaysForm(forms
.Form
):
84 values
= [(p
.id, p
.nom
) for p
in Pays
.objects
.all()]
85 pays
= forms
.MultipleChoiceField(choices
=values
)
87 class RegionsForm(forms
.Form
):
88 values
= [(r
.id, r
.nom
) for r
in Region
.objects
.all()]
89 regions
= forms
.MultipleChoiceField(choices
=values
)
91 class ThematiquesForm(forms
.Form
):
92 values
= [(t
.id, t
.nom
) for t
in Thematique
.objects
.all()]
93 thematiques
= forms
.MultipleChoiceField(choices
=values
)
95 class DisciplinesForm(forms
.Form
):
96 values
= [(t
.id, t
.nom
) for t
in Discipline
.objects
.all()]
97 disciplines
= forms
.MultipleChoiceField(choices
=values
)
99 class ConfirmationForm(forms
.Form
):