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
|