apply new navigation to publisher pages
[mygpo.git] / mygpo / publisher / views.py
blob888624b0cb10bfd9d3b8352ac4aec14b415848a7
1 from django.shortcuts import render_to_response, get_object_or_404
2 from django.template import RequestContext
3 from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
4 from mygpo.api.models import Podcast, Episode, EpisodeAction
5 from mygpo.api.constants import DEVICE_TYPES
6 from django.contrib.auth.decorators import login_required
7 from mygpo.publisher.models import PodcastPublisher
8 from mygpo.publisher.auth import require_publisher, is_publisher
9 from mygpo.publisher.forms import SearchPodcastForm, EpisodeForm, PodcastForm
10 from mygpo.publisher.utils import listener_data, check_publisher_permission, episode_list, subscriber_data
11 from django.contrib.sites.models import Site
12 from mygpo.data.feeddownloader import update_podcasts
15 def home(request):
16 if is_publisher(request.user):
17 podcasts = [x.podcast for x in PodcastPublisher.objects.filter(user=request.user)]
18 form = SearchPodcastForm()
19 return render_to_response('publisher/home.html', {
20 'podcasts': podcasts,
21 'form': form
22 }, context_instance=RequestContext(request))
24 else:
25 site = Site.objects.get_current()
26 return render_to_response('publisher/info.html', {
27 'site': site
28 }, context_instance=RequestContext(request))
31 @require_publisher
32 def search_podcast(request):
33 form = SearchPodcastForm(request.POST)
34 if form.is_valid():
35 url = form.cleaned_data['url']
36 p = get_object_or_404(Podcast, url=url)
38 return HttpResponseRedirect('/publisher/podcast/%d' % p.id)
40 else:
41 return HttpResponseRedirect('/publisher/')
43 @require_publisher
44 def podcast(request, id):
45 p = get_object_or_404(Podcast, pk=id)
47 if not check_publisher_permission(request.user, p):
48 return HttpResponseForbidden()
50 timeline_data = listener_data(p)
51 subscription_data = subscriber_data(p)
52 device_data = device_stats(p)
54 if request.method == 'POST':
55 form = PodcastForm(request.POST, instance=p)
56 if form.is_valid():
57 form.save()
59 elif request.method == 'GET':
60 form = PodcastForm(instance=p)
62 return render_to_response('publisher/podcast.html', {
63 'podcast': p,
64 'form': form,
65 'timeline_data': timeline_data,
66 'subscriber_data': subscription_data,
67 'device_data': device_data,
68 }, context_instance=RequestContext(request))
71 @require_publisher
72 def update_podcast(request, id):
73 p = get_object_or_404(Podcast, pk=id)
75 if not check_publisher_permission(request.user, p):
76 return HttpResponseForbidden()
78 update_podcasts( [p] )
80 return HttpResponseRedirect('/publisher/podcast/%s' % id)
83 @require_publisher
84 def episodes(request, id):
85 p = get_object_or_404(Podcast, pk=id)
87 if not check_publisher_permission(request.user, p):
88 return HttpResponseForbidden()
90 episodes = episode_list(p)
91 max_listeners = max([x.listeners for x in episodes]) if len(episodes) else 0
93 return render_to_response('publisher/episodes.html', {
94 'podcast': p,
95 'episodes': episodes,
96 'max_listeners': max_listeners
97 }, context_instance=RequestContext(request))
100 @require_publisher
101 def episode(request, id):
102 e = get_object_or_404(Episode, pk=id)
104 if not check_publisher_permission(request.user, e.podcast):
105 return HttpResponseForbidden()
107 if request.method == 'POST':
108 form = EpisodeForm(request.POST, instance=e)
109 if form.is_valid():
110 form.save()
112 elif request.method == 'GET':
113 form = EpisodeForm(instance=e)
115 return render_to_response('publisher/episode.html', {
116 'episode': e,
117 'form': form
118 }, context_instance=RequestContext(request))
121 def device_stats(podcast):
122 res = {}
123 for type in DEVICE_TYPES:
124 c = EpisodeAction.objects.filter(episode__podcast=podcast, device__type=type[0]).values('user_id').distinct().count()
125 if c > 0:
126 res[type[1]] = c
128 return res
131 def link(request):
132 current_site = Site.objects.get_current()
133 return render_to_response('link.html', {
134 'url': current_site
135 }, context_instance=RequestContext(request))