Fils RSS pour toutes les briques
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / rss.py
index cc7889a..269efc5 100644 (file)
 # -*- encoding: utf-8 -*-
-from datetime import datetime
+from datetime import datetime, date, timedelta
+from dateutil.parser import parse as parse_date
+from dateutil.tz import tzlocal, tzutc
+
 from django.core.urlresolvers import reverse
-from django.contrib.syndication.feeds import Feed
-from savoirs.models import Actualite, Evenement
-from datetime import datetime, time
+from django.contrib.syndication.views import Feed
+
+from chercheurs.forms import ChercheurSearchForm
+from savoirs.forms import RessourceSearchForm, ActualiteSearchForm, EvenementSearchForm
+from sitotheque.forms import SiteSearchForm
+
+class FilChercheurs(Feed):
+    title = "Savoirs en partage - chercheurs"
+    link = "/chercheurs/"
+    description = "Fiches de chercheurs mises à jour récemment sur Savoirs en partage"
+
+    def get_object(self, request):
+        search_form = ChercheurSearchForm(request.GET)
+        return search_form.save(commit=False)
+
+    def items(self, search):
+        min_date = date.today() - timedelta(days=30)
+        return search.run().order_by('-date_modification').filter_date_modification(min=min_date)
+
+    def item_title(self, chercheur):
+        return unicode(chercheur)
+
+    def item_description(self, chercheur):
+        return chercheur.etablissement_display
+    
+    def item_link(self, chercheur):
+        return reverse('chercheur', kwargs=dict(id=chercheur.id))
+
+    def item_pubdate(self, chercheur):
+        d = chercheur.date_modification
+        return datetime(d.year, d.month, d.day, tzinfo=tzlocal())
+
+class FilRessources(Feed):
+    title = "Savoirs en partage - ressources"
+    link = "/ressources/"
+    description = "Ressources nouvellement disponibles sur Savoirs en partage"
+
+    def get_object(self, request):
+        search_form = RessourceSearchForm(request.GET)
+        return search_form.save(commit=False)
+
+    def items(self, search):
+        min_date = date.today() - timedelta(days=30)
+        return search.run().order_by('-modified').filter_modified(min=min_date)
+
+    def item_title(self, ressource):
+        return ressource.title
+
+    def item_description(self, ressource):
+        return ressource.description
+
+    def item_author_name(self, ressource):
+        return ressource.creator
+
+    def item_pubdate(self, ressource):
+        try:
+            modified = parse_date(ressource.modified)
+        except ValueError:
+            modified = datetime.now()
+        if modified.tzinfo is None:
+            modified.tzinfo = tzutc()
+        return modified
+
+class FilActualitesBase(Feed):
+
+    def get_object(self, request):
+        search_form = ActualiteSearchForm(request.GET)
+        return search_form.save(commit=False)
+
+    def items(self, search):
+        min_date = date.today() - timedelta(days=30)
+        return search.run().filter_date(min=min_date).order_by('-date')
+
+    def item_title(self, actualite):
+        return actualite.titre
+
+    def item_description(self, actualite):
+        return actualite.texte
+
+    def item_author_name(self, actualite):
+        return actualite.source.nom
+
+    def item_pubdate(self, actualite):
+        d = actualite.date
+        return datetime(d.year, d.month, d.day, tzinfo=tzutc())
+
+class FilActualites(FilActualitesBase):
+    title = "Savoirs en partage - actualités"
+    link = "/actualites/"
+    description = "Actualités récentes sur Savoirs en partage"
+
+    def items(self, search):
+        return FilActualitesBase.items(self, search).filter_type('actu')
+
+class FilAppels(FilActualitesBase):
+    title = "Savoirs en partage - appels d'offres"
+    link = "/appels/"
+    description = "Appels d'offres récents sur Savoirs en partage"
 
-class FilActualite(Feed):
-    title = "Dernières actualités du portail des ressources scientifiques et pédagogiques de l'AUF"
-    link = '/'
-    description = "Agrégateur de ressources scientifiques et pédagogiques de l'AUF"
-    limitation = 10
-    type = 'actu'
+    def items(self, search):
+        return FilActualitesBase.items(self, search).filter_type('appels')
 
-    title_template = "savoirs/rss_actualite_titre.html"
-    description_template = "savoirs/rss_actualite_description.html"
+class FilEvenements(Feed):
+    title = "Savoirs en partage - agenda"
+    link = "/agenda/"
+    description = "Agenda Savoirs en partage"
+    description_template = 'savoirs/rss_evenement_description.html'
 
-    def items(self):
-        return Actualite.objects.filter(visible=True).filter_type(self.type).order_by('-date')[:self.limitation]
+    def get_object(self, request):
+        search_form = EvenementSearchForm(request.GET)
+        return search_form.save(commit=False)
 
-    def item_link(self, item):
-        return item.url
+    def items(self, search):
+        min_date = date.today()
+        max_date = date.today() + timedelta(days=30)
+        return search.run().filter_debut(min=min_date, max=max_date).order_by('-debut')
 
-    def item_pubdate(self,item):
-        return  datetime.combine(item.date, time())
+    def item_title(self, evenement):
+        return evenement.titre
 
-    def item_author_name(self,item):
-        if item.source:
-            return item.source.nom
+    def item_author_name(self, evenement):
+        return ' '.join([evenement.prenom, evenement.nom])
 
-class FilAppels(FilActualite):
-    type = 'appels'
+    def item_author_email(self, evenement):
+        return evenement.courriel
 
-class FilEvenement(Feed):
-    title = "Calendrier des ressources scientifiques et pédagogiques de l'AUF"
-    link = '/'
-    description = "Evènements connexes aux ressources scientifiques et pédagogiques de l'AUF"
+class FilSites(Feed):
+    title = "Savoirs en partage - sites"
+    link = "/sites/"
+    description = "Sites récemment ajoutés à Savoirs en partage"
 
-    title_template = "savoirs/rss_evenement_titre.html"
-    description_template = "savoirs/rss_evenement_description.html"
+    def get_object(self, request):
+        search_form = SiteSearchForm(request.GET)
+        return search_form.save(commit=False)
 
-    def items(self):
-        return Evenement.objects.filter(approuve=True, debut__gte=datetime.now())
+    def items(self, search):
+        min_date = date.today() - timedelta(days=365)
+        return search.run().filter_date_maj(min=min_date)
 
-    def item_link(self, item):
-        return reverse('savoirs.views.evenement', args=[item.id])
+    def item_title(self, site):
+        return site.titre
 
-    def item_pubdate(self,item):
-        return item.debut
+    def item_description(self, site):
+        return site.description
 
-    def item_author_name(self,item):
-        return ""
+    def item_author_name(self, site):
+        return site.auteur