]> git.0d.be Git - panikdb.git/blob - panikdb/views.py
update for focus changes
[panikdb.git] / panikdb / views.py
1 import datetime
2
3 from django.contrib.auth.decorators import login_required
4 from django.core.exceptions import PermissionDenied
5 from django.core.urlresolvers import reverse
6 from django.template import loader, Context
7 from django.views.generic.base import TemplateView, RedirectView
8 from django.views.generic.list import ListView
9
10 from emissions.models import *
11 from emissions.utils import period_program
12
13 import emissions.views
14 import newsletter.views
15
16 class Home(TemplateView):
17     template_name = 'home.html'
18
19     def get_context_data(self, **kwargs):
20         context = super(Home, self).get_context_data(**kwargs)
21         context['emissions'] = self.request.user.emissions.all().order_by('title')
22         context['news_categories'] = self.request.user.news_categories.all().order_by('title')
23         if self.request.user.has_perm('emissions.add_focus'):
24             context['focused_items'] = Focus.objects.select_related()
25
26         return context
27
28 home = login_required(Home.as_view())
29
30
31 class EmissionListView(emissions.views.EmissionListView):
32     pass
33
34 emissions = login_required(EmissionListView.as_view())
35
36
37
38 class NewsListView(ListView):
39     model = NewsCategory
40
41     def get_queryset(self):
42         return NewsCategory.objects.order_by('title')
43
44     def get_context_data(self, **kwargs):
45         context = super(NewsListView, self).get_context_data(**kwargs)
46         context['unsorted_newsitems'] = NewsItem.objects.filter(category__isnull=True).order_by('title')
47         return context
48
49 news = login_required(NewsListView.as_view())
50
51
52 class NewsletterCreateView(newsletter.views.NewsletterCreateView):
53     def get_initial(self):
54         initial = super(NewsletterCreateView, self).get_initial()
55
56         newsletter_body = loader.get_template('newsletter/body.html')
57         context = Context()
58
59         date = datetime.datetime.today()
60         if date.weekday() > 0:
61             date = date + datetime.timedelta(days=7-date.weekday())
62
63         date = datetime.datetime(*date.timetuple()[:3])
64
65         context['date'] = date
66
67         context['soundfiles'] = SoundFile.objects.filter(
68                 podcastable=True, fragment=False).select_related().filter(
69                         creation_timestamp__gte=date-datetime.timedelta(days=7))
70
71         context['diffusions'] = list(Diffusion.objects.select_related().filter(
72                 datetime__gte=date,
73                 datetime__lte=date+datetime.timedelta(days=7)).order_by('datetime'))
74
75         # remove rebroadcasts made during the same week
76         seen_episodes = {}
77         for diff in context['diffusions'][:]:
78             if diff.episode.id in seen_episodes:
79                 context['diffusions'].remove(diff)
80             seen_episodes[diff.episode.id] = True
81
82         initial['text'] = newsletter_body.render(context)
83         return initial
84
85 newsletter_create = NewsletterCreateView.as_view()
86
87
88 class FocusSetView(RedirectView):
89     permanent = False
90
91     def get_redirect_url(self, object_type, object_id):
92         if not self.request.user.has_perm('emissions.add_focus'):
93             raise PermissionDenied()
94         if object_type == 'emission':
95             emission = Emission.objects.get(id=object_id)
96             try:
97                 f = Focus.objects.get(emission=emission)
98             except Focus.DoesNotExist:
99                 f = Focus()
100             f.current = True
101             f.emission = emission
102             f.save()
103             return reverse('emission-view', kwargs={'slug': emission.slug})
104         if object_type == 'episode':
105             episode = Episode.objects.get(id=object_id)
106             try:
107                 f = Focus.objects.get(episode=episode)
108             except Focus.DoesNotExist:
109                 f = Focus()
110             f.current = True
111             f.episode = episode
112             f.save()
113             return reverse('episode-view', kwargs={
114                 'emission_slug': episode.emission.slug, 'slug': episode.slug})
115         if object_type == 'newsitem':
116             newsitem = NewsItem.objects.get(id=object_id)
117             try:
118                 f = Focus.objects.get(newsitem=newsitem)
119             except Focus.DoesNotExist:
120                 f = Focus()
121             f.current = True
122             f.newsitem = newsitem
123             f.save()
124             return reverse('newsitem-view', kwargs={'slug': newsitem.slug})
125         if object_type == 'soundfile':
126             soundfile = SoundFile.objects.get(id=object_id)
127             try:
128                 f = Focus.objects.get(soundfile=soundfile)
129             except Focus.DoesNotExist:
130                 f = Focus()
131             f.current = True
132             f.soundfile = soundfile
133             f.save()
134             return reverse('episode-view', kwargs={
135                 'slug': soundfile.episode.slug,
136                 'emission_slug': soundfile.episode.emission.slug,
137                 })
138
139 focus_set = FocusSetView.as_view()
140
141
142 class FocusUnsetView(RedirectView):
143     permanent = False
144
145     def get_redirect_url(self, object_type, object_id):
146         if not self.request.user.has_perm('emissions.delete_focus'):
147             raise PermissionDenied()
148         if object_type == 'emission':
149             emission = Emission.objects.get(id=object_id)
150             focus = Focus.objects.get(emission=emission)
151             focus.current = False
152             focus.save()
153             return reverse('emission-view', kwargs={'slug': emission.slug})
154         if object_type == 'episode':
155             episode = Episode.objects.get(id=object_id)
156             focus = Focus.objects.get(episode=episode)
157             focus.current = False
158             focus.save()
159             return reverse('episode-view', kwargs={
160                 'emission_slug': episode.emission.slug, 'slug': episode.slug})
161         if object_type == 'newsitem':
162             newsitem = NewsItem.objects.get(id=object_id)
163             focus = Focus.objects.get(newsitem=newsitem)
164             focus.current = False
165             focus.save()
166             return reverse('newsitem-view', kwargs={'slug': newsitem.slug})
167         if object_type == 'soundfile':
168             soundfile = SoundFile.objects.get(id=object_id)
169             focus = Focus.objects.get(soundfile=soundfile)
170             focus.current = False
171             focus.save()
172             return reverse('episode-view', kwargs={
173                 'slug': soundfile.episode.slug,
174                 'emission_slug': soundfile.episode.emission.slug,
175                 })
176
177 focus_unset = FocusUnsetView.as_view()