aircox/views/episode_detail: when episode page is unpublished and user not authorized, redirect to parent program page

This commit is contained in:
Chris Tactic 2024-11-12 12:43:49 +01:00
parent 56f9ecff1f
commit ccc6ed26fd

View File

@ -1,5 +1,5 @@
from django.contrib.auth.mixins import UserPassesTestMixin from django.contrib.auth.mixins import UserPassesTestMixin
from django.http import HttpResponseRedirect from django.http import Http404, HttpResponseRedirect
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.urls import reverse from django.urls import reverse
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -40,6 +40,17 @@ class EpisodeDetailView(PageDetailView):
def get_related_url(self): def get_related_url(self):
return reverse("episode-list", kwargs={"parent_slug": self.object.parent.slug}) return reverse("episode-list", kwargs={"parent_slug": self.object.parent.slug})
def get(self, *args, **kwargs):
"""When episode is unpublished and user not authorized, redirect to
parent page."""
try:
self.object = super().get_object()
except Http404:
episode = get_object_or_404(Episode, slug=self.kwargs["slug"])
return HttpResponseRedirect(reverse("program-detail", kwargs={"slug": episode.program.slug}))
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
@attach @attach
class EpisodeListView(PageListView): class EpisodeListView(PageListView):