1 # -*- encoding: utf-8 -*-
3 from datetime
import datetime
, date
, timedelta
4 from dateutil
.parser
import parse
as parse_date
5 from dateutil
.tz
import tzlocal
, tzutc
8 from django
.contrib
.syndication
.views
import Feed
9 from django
.core
.urlresolvers
import reverse
10 from django
.http
import Http404
11 from django
.shortcuts
import get_object_or_404
13 from auf_savoirs_en_partage
.chercheurs
.forms
import ChercheurSearchForm
14 from auf_savoirs_en_partage
.chercheurs
.models
import Groupe
, Message
15 from auf_savoirs_en_partage
.savoirs
.forms
import \
16 RessourceSearchForm
, ActualiteSearchForm
, EvenementSearchForm
17 from auf_savoirs_en_partage
.sitotheque
.forms
import SiteSearchForm
20 class FilChercheurs(Feed
):
21 title
= "Savoirs en partage - chercheurs"
24 "Fiches de chercheurs mises à jour récemment sur " \
27 def get_object(self
, request
):
28 search_form
= ChercheurSearchForm(request
.GET
)
29 if search_form
.is_valid():
30 return search_form
.save(commit
=False)
34 def items(self
, search
):
35 min_date
= date
.today() - timedelta(days
=30)
36 return search
.run(min_date
=min_date
).order_by('-date_modification')
38 def item_title(self
, chercheur
):
39 return unicode(chercheur
)
41 def item_description(self
, chercheur
):
42 return chercheur
.etablissement_display
44 def item_link(self
, chercheur
):
45 return reverse('chercheur', kwargs
=dict(id=chercheur
.id))
47 def item_pubdate(self
, chercheur
):
48 d
= chercheur
.date_modification
49 return datetime(d
.year
, d
.month
, d
.day
, tzinfo
=tzlocal())
52 class FilRessources(Feed
):
53 title
= "Savoirs en partage - ressources"
55 description
= "Ressources nouvellement disponibles sur Savoirs en partage"
57 def get_object(self
, request
):
58 search_form
= RessourceSearchForm(request
.GET
)
59 if search_form
.is_valid():
60 return search_form
.save(commit
=False)
63 return search_form
.save(commit
=False)
65 def items(self
, search
):
66 min_date
= date
.today() - timedelta(days
=30)
67 return search
.run(min_date
=min_date
).order_by('-modified')
69 def item_title(self
, ressource
):
70 return ressource
.title
72 def item_description(self
, ressource
):
73 return ressource
.description
75 def item_author_name(self
, ressource
):
76 return ressource
.creator
78 def item_pubdate(self
, ressource
):
80 modified
= parse_date(ressource
.modified
)
82 modified
= datetime
.now()
83 if modified
.tzinfo
is None:
84 modified
= modified
.replace(tzinfo
=pytz
.UTC
)
88 class FilActualitesBase(Feed
):
90 def get_object(self
, request
):
91 search_form
= ActualiteSearchForm(request
.GET
)
92 if search_form
.is_valid():
93 return search_form
.save(commit
=False)
97 def items(self
, search
):
98 min_date
= date
.today() - timedelta(days
=30)
99 return search
.run(min_date
=min_date
).order_by('-date')
101 def item_title(self
, actualite
):
102 return actualite
.titre
104 def item_description(self
, actualite
):
105 return actualite
.texte
107 def item_author_name(self
, actualite
):
108 return actualite
.source
.nom
110 def item_pubdate(self
, actualite
):
112 return datetime(d
.year
, d
.month
, d
.day
, tzinfo
=tzutc())
115 class FilActualites(FilActualitesBase
):
116 title
= "Savoirs en partage - actualités"
117 link
= "/actualites/"
118 description
= "Actualités récentes sur Savoirs en partage"
120 def items(self
, search
):
121 return FilActualitesBase
.items(self
, search
).filter_type('actu')
124 class FilAppels(FilActualitesBase
):
125 title
= "Savoirs en partage - appels d'offres"
127 description
= "Appels d'offres récents sur Savoirs en partage"
129 def items(self
, search
):
130 return FilActualitesBase
.items(self
, search
).filter_type('appels')
133 class FilEvenements(Feed
):
134 title
= "Savoirs en partage - agenda"
136 description
= "Agenda Savoirs en partage"
137 description_template
= 'savoirs/rss_evenement_description.html'
139 def get_object(self
, request
):
140 search_form
= EvenementSearchForm(request
.GET
)
141 if search_form
.is_valid():
142 return search_form
.save(commit
=False)
146 def items(self
, search
):
147 min_date
= date
.today() - timedelta(days
=30)
148 return search
.run(min_date
=min_date
).order_by('-debut')
150 def item_title(self
, evenement
):
151 return evenement
.titre
153 def item_author_name(self
, evenement
):
154 return ' '.join([evenement
.prenom
, evenement
.nom
])
156 def item_author_email(self
, evenement
):
157 return evenement
.courriel
160 class FilSites(Feed
):
161 title
= "Savoirs en partage - sites"
163 description
= "Sites récemment ajoutés à Savoirs en partage"
165 def get_object(self
, request
):
166 search_form
= SiteSearchForm(request
.GET
)
167 if search_form
.is_valid():
168 return search_form
.save(commit
=False)
172 def items(self
, search
):
173 min_date
= date
.today() - timedelta(days
=30)
174 return search
.run(min_date
=min_date
)
176 def item_title(self
, site
):
179 def item_description(self
, site
):
180 return site
.description
182 def item_author_name(self
, site
):
186 class FilMessages(Feed
):
188 def get_object(self
, request
, groupe_id
):
189 return get_object_or_404(Groupe
, pk
=groupe_id
)
191 def title(self
, obj
):
192 return "Savoirs en partage - Messages pour le groupe: %s" % (obj
.nom
,)
195 return obj
.get_absolute_url()
197 def description(self
, obj
):
198 return "Derniers messages du groupe %s" % (obj
.nom
,)
200 def items(self
, obj
):
201 return Message
.objects
.filter(groupe
=obj
)[:30]
203 def item_title(self
, message
):
206 def item_description(self
, message
):
207 return message
.contenu
209 def item_author_name(self
, message
):
210 return message
.chercheur