8cc2bf3b668f6287b079c04e550443713b26d264
1 # -*- encoding: utf-8 -*-
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
12 # Formulaires de recherche
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
)
25 class RecordSearchForm(forms
.Form
):
26 """Formulaire de recherche pour les ressources."""
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")
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()
38 query
= self
.cleaned_data
['q']
40 records
= records
.search(query
)
41 auteur
= self
.cleaned_data
['auteur']
43 records
= records
.search_auteur(auteur
)
44 titre
= self
.cleaned_data
['titre']
46 records
= records
.search_titre(titre
)
47 sujet
= self
.cleaned_data
['sujet']
49 records
= records
.search_sujet(sujet
)
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."""
56 return build_search_regexp(self
.cleaned_data
['q'])
58 class ActualiteSearchForm(forms
.Form
):
59 """Formulaire de recherche pour les actualités."""
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'])
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)
74 query
= self
.cleaned_data
['q']
76 actualites
= actualites
.search(query
)
77 date_min
= self
.cleaned_data
['date_min']
79 actualites
= actualites
.filter(date__gte
=date_min
)
80 date_max
= self
.cleaned_data
['date_max']
82 actualites
= actualites
.filter(date__lte
=date_max
)
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."""
89 return build_search_regexp(self
.cleaned_data
['q'])
91 class EvenementSearchForm(forms
.Form
):
92 """Formulaire de recherche pour les événements."""
94 q
= forms
.CharField(required
=False, label
="Mots-clés")
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)
101 query
= self
.cleaned_data
['q']
103 evenements
= evenements
.search(query
)
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."""
110 return build_search_regexp(self
.cleaned_data
['q'])
114 class FrontEndSplitDateTime(widgets
.AdminSplitDateTime
):
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', )}
124 class EvenementForm(EvenementAdminForm
):
125 debut
= forms
.DateTimeField(widget
=FrontEndSplitDateTime
)
126 fin
= forms
.DateTimeField(widget
=FrontEndSplitDateTime
)
130 exclude
= ('approuve', 'uid')
132 # Admin views pour les associations par lots
134 class PaysForm(forms
.Form
):
135 values
= [(p
.id, p
.nom
) for p
in Pays
.objects
.all()]
136 pays
= forms
.MultipleChoiceField(choices
=values
)
138 class RegionsForm(forms
.Form
):
139 values
= [(r
.id, r
.nom
) for r
in Region
.objects
.all()]
140 regions
= forms
.MultipleChoiceField(choices
=values
)
142 class ThematiquesForm(forms
.Form
):
143 values
= [(t
.id, t
.nom
) for t
in Thematique
.objects
.all()]
144 thematiques
= forms
.MultipleChoiceField(choices
=values
)
146 class DisciplinesForm(forms
.Form
):
147 values
= [(t
.id, t
.nom
) for t
in Discipline
.objects
.all()]
148 disciplines
= forms
.MultipleChoiceField(choices
=values
)
150 class ConfirmationForm(forms
.Form
):