Commit | Line | Data |
---|---|---|
544b4522 | 1 | # -*- encoding: utf-8 -*- |
f61e4846 | 2 | import re |
544b4522 | 3 | from django import forms |
0a77a7d6 | 4 | from datamaster_modeles.models import Thematique, Pays, Region |
c9cbc784 | 5 | from models import Evenement, Discipline, Record, Actualite |
0b72ebef | 6 | from savoirs.lib.recherche import build_search_regexp |
da44ce68 EMS |
7 | |
8 | # Formulaires de recherche | |
544b4522 CR |
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 | ||
da44ce68 EMS |
21 | class RecordSearchForm(forms.Form): |
22 | """Formulaire de recherche pour les ressources.""" | |
23 | ||
24 | q = forms.CharField(required=False, label="Mots-clés") | |
f12cc7fb EMS |
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") | |
da44ce68 EMS |
28 | |
29 | def get_query_set(self): | |
30 | """Retourne l'ensemble des ressources qui correspondent aux valeurs | |
31 | entrées dans le formulaire.""" | |
f153be1b | 32 | records = Record.objects.validated() |
da44ce68 EMS |
33 | if self.is_valid(): |
34 | query = self.cleaned_data['q'] | |
35 | if query: | |
36 | records = records.search(query) | |
f12cc7fb EMS |
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) | |
da44ce68 EMS |
46 | return records |
47 | ||
f61e4846 EMS |
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(): | |
0b72ebef | 52 | return build_search_regexp(self.cleaned_data['q']) |
f61e4846 | 53 | |
c9cbc784 EMS |
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.""" | |
f153be1b | 68 | actualites = Actualite.objects.filter(visible=True) |
c9cbc784 EMS |
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: | |
c9cbc784 EMS |
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']) | |
da44ce68 | 86 | ### |
544b4522 | 87 | |
92c7413b CR |
88 | class EvenementForm(forms.ModelForm): |
89 | class Meta: | |
90 | model = Evenement | |
b7a741ad | 91 | exclude = ('approuve', 'uid') |
0a77a7d6 | 92 | |
93 | # Admin views pour les associations par lots | |
94 | ||
95 | class PaysForm(forms.Form): | |
96 | values = [(p.id, p.nom) for p in Pays.objects.all()] | |
97 | pays = forms.MultipleChoiceField(choices=values) | |
98 | ||
99 | class RegionsForm(forms.Form): | |
100 | values = [(r.id, r.nom) for r in Region.objects.all()] | |
101 | regions = forms.MultipleChoiceField(choices=values) | |
102 | ||
103 | class ThematiquesForm(forms.Form): | |
104 | values = [(t.id, t.nom) for t in Thematique.objects.all()] | |
105 | thematiques = forms.MultipleChoiceField(choices=values) | |
106 | ||
107 | class DisciplinesForm(forms.Form): | |
108 | values = [(t.id, t.nom) for t in Discipline.objects.all()] | |
109 | disciplines = forms.MultipleChoiceField(choices=values) | |
110 | ||
111 | class ConfirmationForm(forms.Form): | |
112 | pass | |
113 |