1 # -*- encoding: utf-8 -*-
2 import datetime
, simplejson
, copy
, vobject
4 from django
.shortcuts
import render_to_response
5 from django
.template
import Context
, RequestContext
6 from django
.http
import HttpResponse
, HttpResponseRedirect
7 from django
.contrib
.auth
.decorators
import login_required
8 from django
.core
.urlresolvers
import reverse
9 from django
import forms
10 from lib
.recherche
import cherche
, google_search
12 from lib
.calendrier
import evenements
, evenement_info
, evenement_publie
, combine
13 from savoirs
.globals import configuration
17 from chercheurs
.models
import Chercheur
18 from sitotheque
.models
import Site
22 delta
= datetime
.timedelta (days
= 90)
23 oldest
= datetime
.date
.today () - delta
24 articles
= Actualite
.objects
.filter (visible
= '1', date__gt
= oldest
)
25 articles
= articles
[0:configuration
['accueil_actualite']]
27 events
= evenements()[0:configuration
['accueil_evenement']]
30 chercheurs
= Chercheur
.objects
.all().order_by('?')[:configuration
['accueil_chercheur']]
31 sites
= Site
.objects
.all().order_by('?')[:configuration
['accueil_sites']]
32 return render_to_response ("savoirs/index.html", \
33 Context ({"articles": articles
,
35 "caldav_url": configuration
['calendrier_publique'],
36 "chercheurs":chercheurs
,
39 context_instance
= RequestContext(request
))
41 def recherche (request
):
42 q
= request
.GET
.get("q", "")
43 page
= int(request
.GET
.get("page", 0))
47 return render_to_response ("savoirs/recherche.html", \
51 context_instance
= RequestContext(request
))
53 def avancee (request
):
54 type = request
.GET
.get("type", "")
55 page
= int(request
.GET
.get("page", 0))
57 r
= {'results': [], 'last_page': 0, 'more_link': ''}
59 q
= request
.GET
.get("google-q", "")
60 f
= RechercheAvancee ()
63 r
= cherche (page
, q
, type)
65 elif type == 'avancee':
66 f
= RechercheAvancee (request
.GET
)
69 for k
in ['creator', 'title', 'description', 'subject']:
70 tmp
= f
.cleaned_data
[k
].strip()
74 if f
.cleaned_data
['operator'] == 'and':
77 r
= cherche (page
, q
, type)
79 return render_to_response ("savoirs/avancee.html", \
80 Context ({'type': type,
85 context_instance
= RequestContext(request
))
87 def conseils (request
):
88 return render_to_response ("savoirs/conseils.html", \
90 context_instance
= RequestContext(request
))
92 def a_propos (request
):
93 return render_to_response ("savoirs/a-propos.html", \
94 Context ({'count': len(backend_config
.RESOURCES
)}), \
95 context_instance
= RequestContext(request
))
97 def informations (request
):
99 resources
= copy
.deepcopy (backend_config
.RESOURCES
)
100 for k
in backend_config
.RESOURCES
.keys ():
102 resources
[k
]['logs'] = { 'date': t
[k
][0], 'count': t
[k
][1] }
105 logs
= HarvestLog
.objects
.filter(context
= 'moisson').order_by('date')
107 resources
[l
.name
]['logs'] = {'date' : l
.date
, 'count': l
.processed
}
109 return render_to_response ("savoirs/informations.html", \
110 Context ({'r': resources
}), \
111 context_instance
= RequestContext(request
))
113 def nous_contacter (request
):
114 return render_to_response ("savoirs/contact.html", \
116 context_instance
= RequestContext(request
))
119 def evenement(request
, id):
120 event
= evenement_info(id)
121 return render_to_response ("savoirs/evenement.html", \
122 Context ({'event': event
.instance
.vevent
}), \
123 context_instance
= RequestContext(request
))
125 def evenement_ajout(request
):
126 template
= "savoirs/evenement_ajout.html"
127 if request
.method
== "POST":
128 form
= EvenementForm(request
.POST
)
131 template
= "savoirs/evenement_confirmation.html"
133 form
= EvenementForm()
134 return render_to_response (template
, \
135 Context ({'form': form
}), \
136 context_instance
= RequestContext(request
))
139 def evenement_moderation(request
):
140 events
= Evenement
.objects
.filter(approuve
= False)
141 return render_to_response ("savoirs/evenement_moderation.html", \
142 Context ({'events': events
}), \
143 context_instance
= RequestContext(request
))
146 def evenement_accepter(request
, pk
):
147 e
= Evenement
.objects
.get(pk
= pk
)
149 cal
= vobject
.iCalendar()
151 cal
.vevent
.add('summary').value
= e
.titre
153 kw
= e
.mots_cles
.split(",")
155 kw
.append(e
.discipline
.nom
)
156 kw
.append(e
.discipline_secondaire
.nom
)
160 kw
= [x
.strip() for x
in kw
if len(x
.strip()) > 0]
162 cal
.vevent
.add('x-auf-keywords').value
= k
165 if len(e
.description
) > 0:
166 e
.description
+= "\n"
167 e
.description
+= u
"Mots-cles: " + ", ".join(kw
)
169 cal
.vevent
.add('dtstart').value
= combine(e
.debut
, e
.fuseau
)
170 cal
.vevent
.add('dtend').value
= combine(e
.fin
, e
.fuseau
)
171 cal
.vevent
.add('created').value
= combine(datetime
.datetime
.now(), "UTC")
172 cal
.vevent
.add('dtstamp').value
= combine(datetime
.datetime
.now(), "UTC")
173 if len(e
.description
) > 0:
174 cal
.vevent
.add('description').value
= e
.description
175 if len(e
.contact
) > 0:
176 cal
.vevent
.add('contact').value
= e
.contact
178 cal
.vevent
.add('url').value
= e
.url
180 cal
.vevent
.add('location').value
= e
.lieu
182 evenement_publie(cal
)
187 return HttpResponseRedirect(reverse('savoirs.views.evenement_moderation'))
190 def evenement_refuser(request
, pk
):
191 evenement
= Evenement
.objects
.get(pk
= pk
)
192 evenement
.actif
= False
194 return HttpResponseRedirect(reverse('savoirs.views.evenement_moderation'))
198 def json_get (request
):
199 uri
= request
.GET
.get ("uri")
202 res
= s
.search ({'uri': uri
.encode("utf-8")})
205 return HttpResponse(simplejson
.dumps(r
[0]),
206 mimetype
='application/json')
209 def json_set (request
):
210 data
= request
.POST
.get("data")
212 r
= simplejson
.loads(data
)
215 return HttpResponse(simplejson
.dumps("OK"),
216 mimetype
='application/json')