From d799240dae5d068bd632f4daedcd9edb9b44da1e Mon Sep 17 00:00:00 2001 From: Thomas Steen Rasmussen Date: Fri, 10 Mar 2017 00:45:50 +0100 Subject: [PATCH] add is_public property to UserSubmittedModel and permit showing non-approved speakers in list and detail only to the owner user when logged in --- src/program/models.py | 7 +++++++ src/program/views.py | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/program/models.py b/src/program/models.py index 69f80043..09299a40 100644 --- a/src/program/models.py +++ b/src/program/models.py @@ -38,6 +38,13 @@ class UserSubmittedModel(CampRelatedModel): default=SUBMISSION_DRAFT, ) + @property + def is_public(self): + if self.submission_status == self.SUBMISSION_APPROVED: + return True + else: + return False + class EventLocation(CampRelatedModel): """ The places where stuff happens """ diff --git a/src/program/views.py b/src/program/views.py index 512b9cfd..e2b06851 100644 --- a/src/program/views.py +++ b/src/program/views.py @@ -118,16 +118,30 @@ class SpeakerDetailView(CampViewMixin, DetailView): model = models.Speaker template_name = 'speaker_detail.html' + def get(self, request, *args, **kwargs): + if not self.get_object().is_public and self.get_object().user != request.user: + raise Http404() + else: + return super().get(request, *args, **kwargs) + class SpeakerListView(CampViewMixin, ListView): model = models.Speaker template_name = 'speaker_list.html' def get_queryset(self, *args, **kwargs): - return models.Speaker.objects.filter( + # get all approved speakers + speakers = models.Speaker.objects.filter( camp=self.camp, submission_status=models.Speaker.SUBMISSION_APPROVED ) + # also get the users own speaker, in case he has an unapproved + userspeakers = models.Speaker.objects.filter( + camp=self.camp, + user=self.request.user + ).exclude(submission_status=models.Speaker.SUBMISSION_APPROVED) + + return speakers | userspeakers class EventListView(CampViewMixin, ListView):