]> git.0d.be Git - panikweb-esperanzah.git/blob - espeweb/views.py
mutate into an addon module for panikweb
[panikweb-esperanzah.git] / espeweb / views.py
1 import datetime
2
3 from django.views.generic.base import TemplateView
4
5 from emissions.models import Diffusion, Emission, Episode, NewsItem
6 from combo.data.models import Page
7
8 import panikweb.views
9
10
11 class Home(panikweb.views.Home):
12     def get_context_data(self, **kwargs):
13         context = super().get_context_data(**kwargs)
14         context['emissions'] = Emission.objects.filter(archived=False).order_by('title')
15         context['newsitems'] = NewsItem.objects.exclude(date__gt=datetime.date.today()
16                 ).exclude(expiration_date__lt=datetime.date.today()).order_by('-date')[:3]
17         context['extra_pages'] = Page.objects.filter(exclude_from_navigation=False)
18         return context
19
20
21 home = Home.as_view()
22
23
24 class EmissionDetailView(panikweb.views.EmissionDetailView):
25     def get_emission_context(self, emission, episode_ids=None):
26         context = super().get_emission_context(emission, episode_ids)
27
28         if emission.archived:
29             current_year = emission.creation_timestamp.replace(month=5, day=1)
30         else:
31             current_year = datetime.datetime.now().replace(month=5, day=1).replace(year=2019)
32
33         episodes_queryset = Episode.objects.select_related()
34         if episode_ids is not None:
35             episodes_queryset = episodes_queryset.filter(id__in=episode_ids)
36         else:
37             episodes_queryset = episodes_queryset.filter(emission=emission)
38
39         context['all_episodes'] = episodes_queryset.filter(
40                 creation_timestamp__gt=current_year
41                 ).extra(select={
42                         'first_diffusion': 'emissions_diffusion.datetime',
43                         },
44                         select_params=(False, True),
45                         where=['''datetime = (SELECT MIN(datetime)
46                                                 FROM emissions_diffusion
47                                                WHERE episode_id = emissions_episode.id
48                                              )'''],
49                         tables=['emissions_diffusion'],
50                     ).order_by('first_diffusion').distinct()
51
52         return context
53
54
55 emission = EmissionDetailView.as_view()
56
57
58 class ArchivesView(TemplateView):
59     template_name = 'archives.html'
60
61     def get_context_data(self, **kwargs):
62         context = super().get_context_data(**kwargs)
63         context['diffusions'] = (
64             Diffusion.objects.filter(episode__soundfile__isnull=False).distinct().order_by('-datetime')
65         )
66         return context
67
68
69 archives = ArchivesView.as_view()