]> git.0d.be Git - earwig.git/blob - earwig/manager/views.py
manager: display 20 channels by default
[earwig.git] / earwig / manager / views.py
1 # earwig
2 # Copyright (C) 2018  Frederic Peters
3 #
4 # This program is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Affero General Public License as published
6 # by the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU Affero General Public License for more details.
13 #
14 # You should have received a copy of the GNU Affero General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 from django.core.urlresolvers import reverse_lazy
18 from django.contrib import messages
19 from django.db.models import Q
20 from django.shortcuts import redirect
21 from django.utils.translation import ugettext_lazy as _
22 from django.views.generic import ListView, CreateView, DetailView, UpdateView, DeleteView
23
24 from ..sounds.models import Channel, Sound, STATUSES
25
26
27 class Homepage(ListView):
28     model = Sound
29     paginate_by = 10
30     template_name = 'earwig/manager_home.html'
31
32     def get_queryset(self, **kwargs):
33         qs = self.model.objects.select_related()
34         if self.get_status_filter() != '_all':
35             qs = qs.filter(status=self.get_status_filter())
36         query = self.get_query_filter()
37         if query:
38             qs = qs.filter(Q(title__icontains=query) |
39                            Q(channel__title__icontains=query))
40         return qs
41
42     def get_query_filter(self):
43         return self.request.GET.get('q') or ''
44
45     def get_status_filter(self):
46         return self.request.GET.get('q_status') or ''
47
48     def get_context_data(self, **kwargs):
49         context = super(Homepage, self).get_context_data(**kwargs)
50         context['statuses'] = STATUSES
51         context['next'] = reverse_lazy('earwig-manager-homepage')
52         return context
53
54 homepage = Homepage.as_view()
55
56
57 class Channels(ListView):
58     model = Channel
59     paginate_by = 20
60     template_name = 'earwig/manager_channels.html'
61
62 channels = Channels.as_view()
63
64
65 class ChannelDetailView(DetailView):
66     model = Channel
67     template_name = 'earwig/manager_channel.html'
68
69     def get_sounds_queryset(self, **kwargs):
70         qs = self.get_object().sound_set.select_related()
71         if self.get_status_filter() != '_all':
72             qs = qs.filter(status=self.get_status_filter())
73         query = self.get_query_filter()
74         if query:
75             qs = qs.filter(Q(title__icontains=query) |
76                            Q(description__icontains=query))
77         return qs
78
79     def get_query_filter(self):
80         return self.request.GET.get('q') or ''
81
82     def get_status_filter(self):
83         return self.request.GET.get('q_status') or '_all'
84
85     def get_context_data(self, **kwargs):
86         context = super(ChannelDetailView, self).get_context_data()
87         context['object_list'] = self.get_sounds_queryset()
88         context['next'] = reverse_lazy('earwig-channel-detail', kwargs={'pk': self.get_object().pk})
89         context['statuses'] = STATUSES
90         return context
91
92 channel_detail = ChannelDetailView.as_view()
93
94
95 class ChannelAdd(CreateView):
96     model = Channel
97     fields = ('title', 'channel_url', 'feed_url', 'policy')
98     template_name = 'earwig/manager_channel_add.html'
99     success_url = reverse_lazy('earwig-channels')
100
101 channel_add = ChannelAdd.as_view()
102
103
104 class ChannelEdit(UpdateView):
105     model = Channel
106     fields = ('title', 'channel_url', 'feed_url', 'policy')
107     template_name = 'earwig/manager_channel_edit.html'
108
109     def get_success_url(self):
110         return reverse_lazy('earwig-channel', kwargs={'pk': self.get_object().pk})
111
112 channel_edit = ChannelEdit.as_view()
113
114 class ChannelDeleteView(DeleteView):
115     model = Channel
116     template_name = 'earwig/manager_channel_confirm_delete.html'
117     success_url = reverse_lazy('earwig-channels')
118
119 channel_delete = ChannelDeleteView.as_view()
120
121
122 class SoundDetailView(DetailView):
123     model = Sound
124     template_name = 'earwig/manager_sound.html'
125
126 sound_detail = SoundDetailView.as_view()
127
128
129 class SoundActionView(DetailView):
130     model = Sound
131
132     def get_success_url(self):
133         if self.request.GET.get('next'):
134             return self.request.GET.get('next')
135         return reverse_lazy('earwig-sound-detail', kwargs={'pk': self.get_object().pk})
136
137
138 class SoundPublishView(SoundActionView):
139     def get(self, *args, **kwargs):
140         self.get_object().publish()
141         messages.success(self.request, _('%s has been published.') % self.get_object())
142         return redirect(self.get_success_url())
143
144 sound_publish = SoundPublishView.as_view()
145
146
147 class SoundUnpublishView(SoundActionView):
148     def get(self, *args, **kwargs):
149         self.get_object().unpublish()
150         messages.success(self.request, _('%s has been unpublished.') % self.get_object())
151         return redirect(self.get_success_url())
152
153 sound_unpublish = SoundUnpublishView.as_view()
154
155
156 class SoundRejectView(SoundActionView):
157     def get(self, *args, **kwargs):
158         self.get_object().reject()
159         messages.warning(self.request, _('%s has been rejected.') % self.get_object())
160         return redirect(self.get_success_url())
161
162 sound_reject = SoundRejectView.as_view()