Recherche textuelle dans l'agenda
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / forms.py
1 # -*- encoding: utf-8 -*-
2 import re
3 from django import forms
4 from datamaster_modeles.models import Thematique, Pays, Region
5 from models import Evenement, Discipline, Record, Actualite
6 from savoirs.lib.recherche import build_search_regexp
7
8 # Formulaires de recherche
9
10 class RechercheAvancee (forms.Form):
11 creator = forms.CharField (max_length=60, required=False, \
12 label = "Auteur ou contributeur") # + contributor
13 title = forms.CharField (max_length=100, required=False, \
14 label = "Titre") # + alt_title
15 description = forms.CharField (max_length=100, required=False, \
16 label = "Description ou résumé") # + abstract
17 subject = forms.CharField (max_length=100, required=False, label = "Sujet")
18 operator = forms.ChoiceField (choices = (('or', 'ou'), ('and', 'et')), label = "Operateur")
19 type = forms.CharField (initial='avancee', required=False, widget=forms.HiddenInput)
20
21 class RecordSearchForm(forms.Form):
22 """Formulaire de recherche pour les ressources."""
23
24 q = forms.CharField(required=False, label="Mots-clés")
25 auteur = forms.CharField(required=False, label="Auteur ou contributeur")
26 titre = forms.CharField(required=False, label="Titre")
27 sujet = forms.CharField(required=False, label="Sujet")
28
29 def get_query_set(self):
30 """Retourne l'ensemble des ressources qui correspondent aux valeurs
31 entrées dans le formulaire."""
32 records = Record.objects.validated()
33 if self.is_valid():
34 query = self.cleaned_data['q']
35 if query:
36 records = records.search(query)
37 auteur = self.cleaned_data['auteur']
38 if auteur:
39 records = records.search_auteur(auteur)
40 titre = self.cleaned_data['titre']
41 if titre:
42 records = records.search_titre(titre)
43 sujet = self.cleaned_data['sujet']
44 if sujet:
45 records = records.search_sujet(sujet)
46 return records
47
48 def get_search_regexp(self):
49 """Retourne une expression régulière compilée qui peut servir à
50 chercher les mot-clés recherchés dans un texte."""
51 if self.is_valid():
52 return build_search_regexp(self.cleaned_data['q'])
53
54 class ActualiteSearchForm(forms.Form):
55 """Formulaire de recherche pour les actualités."""
56
57 q = forms.CharField(required=False, label="Mots-clés")
58 date_min = forms.DateField(required=False, label="Depuis le",
59 widget=forms.DateInput(attrs={'class': 'date'}),
60 input_formats=['%d/%m/%Y'])
61 date_max = forms.DateField(required=False, label="Jusqu'au",
62 widget=forms.DateInput(attrs={'class': 'date'}),
63 input_formats=['%d/%m/%Y'])
64
65 def get_query_set(self):
66 """Retourne l'ensemble des actualités qui correspondent aux valeurs
67 entrées dans le formulaire."""
68 actualites = Actualite.objects.filter(visible=True)
69 if self.is_valid():
70 query = self.cleaned_data['q']
71 if query:
72 actualites = actualites.search(query)
73 date_min = self.cleaned_data['date_min']
74 if date_min:
75 actualites = actualites.filter(date__gte=date_min)
76 date_max = self.cleaned_data['date_max']
77 if date_max:
78 actualites = actualites.filter(date__lte=date_max)
79 return actualites
80
81 def get_search_regexp(self):
82 """Retourne une expression régulière compilée qui peut servir à
83 chercher les mot-clés recherchés dans un texte."""
84 if self.is_valid():
85 return build_search_regexp(self.cleaned_data['q'])
86
87 class EvenementSearchForm(forms.Form):
88 """Formulaire de recherche pour les événements."""
89
90 q = forms.CharField(required=False, label="Mots-clés")
91
92 def get_query_set(self):
93 """Retourne l'ensemble des événements qui correspondent aux valeurs
94 entrées dans le formulaire."""
95 evenements = Evenement.objects.filter(approuve=True)
96 if self.is_valid():
97 query = self.cleaned_data['q']
98 if query:
99 evenements = evenements.search(query)
100 return evenements
101
102 def get_search_regexp(self):
103 """Retourne une expression régulière compilée qui peut servir à
104 chercher les mot-clés recherchés dans un texte."""
105 if self.is_valid():
106 return build_search_regexp(self.cleaned_data['q'])
107
108 ###
109
110 class EvenementForm(forms.ModelForm):
111 class Meta:
112 model = Evenement
113 exclude = ('approuve', 'uid')
114
115 # Admin views pour les associations par lots
116
117 class PaysForm(forms.Form):
118 values = [(p.id, p.nom) for p in Pays.objects.all()]
119 pays = forms.MultipleChoiceField(choices=values)
120
121 class RegionsForm(forms.Form):
122 values = [(r.id, r.nom) for r in Region.objects.all()]
123 regions = forms.MultipleChoiceField(choices=values)
124
125 class ThematiquesForm(forms.Form):
126 values = [(t.id, t.nom) for t in Thematique.objects.all()]
127 thematiques = forms.MultipleChoiceField(choices=values)
128
129 class DisciplinesForm(forms.Form):
130 values = [(t.id, t.nom) for t in Discipline.objects.all()]
131 disciplines = forms.MultipleChoiceField(choices=values)
132
133 class ConfirmationForm(forms.Form):
134 pass
135