diff --git a/src/program/templates/proposal_list.html b/src/program/templates/proposal_list.html index bd21a8b0..42a31fac 100644 --- a/src/program/templates/proposal_list.html +++ b/src/program/templates/proposal_list.html @@ -41,6 +41,9 @@ Proposals | {{ block.super }} {{ speakerproposal.proposal_status }} + + Detail {% if not camp.read_only %} Modify Add Event @@ -81,6 +84,9 @@ Proposals | {{ block.super }} {{ eventproposal.track.name }} {{ eventproposal.proposal_status }} + + Detail {% if not camp.read_only %} Modify {% if eventproposal.get_available_speakerproposals.exists %} diff --git a/src/program/urls.py b/src/program/urls.py index 4bc6c57b..8aee430a 100644 --- a/src/program/urls.py +++ b/src/program/urls.py @@ -43,6 +43,11 @@ urlpatterns = [ ), url( r'^people/', include([ + url( + r'^(?P[a-f0-9-]+)/$', + SpeakerProposalDetailView.as_view(), + name='speakerproposal_detail' + ), url( r'^(?P[a-f0-9-]+)/update/$', SpeakerProposalUpdateView.as_view(), @@ -67,6 +72,11 @@ urlpatterns = [ ), url( r'^events/', include([ + url( + r'^(?P[a-f0-9-]+)/$', + EventProposalDetailView.as_view(), + name='eventproposal_detail' + ), url( r'^(?P[a-f0-9-]+)/edit/$', EventProposalUpdateView.as_view(), diff --git a/src/program/views.py b/src/program/views.py index e26be0cb..f05730f3 100644 --- a/src/program/views.py +++ b/src/program/views.py @@ -202,6 +202,12 @@ class SpeakerProposalDeleteView(LoginRequiredMixin, CampViewMixin, EnsureWritabl return reverse('program:proposal_list', kwargs={'camp_slug': self.camp.slug}) + +class SpeakerProposalDetailView(LoginRequiredMixin, CampViewMixin, EnsureWritableCampMixin, EnsureUserOwnsProposalMixin, EnsureCFPOpenMixin, DetailView): + model = models.SpeakerProposal + template_name = 'speakerproposal_detail.html' + + ################################################################################################### # eventproposal views @@ -370,6 +376,10 @@ class EventProposalDeleteView(LoginRequiredMixin, CampViewMixin, EnsureWritableC return reverse('program:proposal_list', kwargs={'camp_slug': self.camp.slug}) +class EventProposalDetailView(LoginRequiredMixin, CampViewMixin, EnsureWritableCampMixin, EnsureUserOwnsProposalMixin, EnsureCFPOpenMixin, DetailView): + model = models.EventProposal + template_name = 'eventproposal_detail.html' + ################################################################################################### # combined proposal views