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