Affichage de la description dans les résultats de recherche de ressources.
[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
6
7 # Formulaires de recherche
8
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)
19
20 class RecordSearchForm(forms.Form):
21 """Formulaire de recherche pour les ressources."""
22
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")
27
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()
32 if self.is_valid():
33 query = self.cleaned_data['q']
34 if query:
35 records = records.search(query)
36 auteur = self.cleaned_data['auteur']
37 if auteur:
38 records = records.search_auteur(auteur)
39 titre = self.cleaned_data['titre']
40 if titre:
41 records = records.search_titre(titre)
42 sujet = self.cleaned_data['sujet']
43 if sujet:
44 records = records.search_sujet(sujet)
45 return records
46
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."""
50 if self.is_valid():
51 words = self.cleaned_data['q'].split()
52 if not words:
53 return None
54 parts = []
55 for word in words:
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'[îÎ]')
64
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ûüù]')
71
72 parts.append(part)
73 return re.compile('|'.join(parts), re.I)
74 ###
75
76 class EvenementForm(forms.ModelForm):
77 class Meta:
78 model = Evenement
79 exclude = ('approuve', 'uid')
80
81 # Admin views pour les associations par lots
82
83 class PaysForm(forms.Form):
84 values = [(p.id, p.nom) for p in Pays.objects.all()]
85 pays = forms.MultipleChoiceField(choices=values)
86
87 class RegionsForm(forms.Form):
88 values = [(r.id, r.nom) for r in Region.objects.all()]
89 regions = forms.MultipleChoiceField(choices=values)
90
91 class ThematiquesForm(forms.Form):
92 values = [(t.id, t.nom) for t in Thematique.objects.all()]
93 thematiques = forms.MultipleChoiceField(choices=values)
94
95 class DisciplinesForm(forms.Form):
96 values = [(t.id, t.nom) for t in Discipline.objects.all()]
97 disciplines = forms.MultipleChoiceField(choices=values)
98
99 class ConfirmationForm(forms.Form):
100 pass
101