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