# -*- 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