Merge pull request #57 from lca2017/chrisjrn/september_rebase
Symposion changes for schedule announcement
This commit is contained in:
commit
e96bce62ab
5 changed files with 58 additions and 12 deletions
|
@ -361,6 +361,12 @@ def promote_proposal(proposal):
|
||||||
if hasattr(proposal, "presentation") and proposal.presentation:
|
if hasattr(proposal, "presentation") and proposal.presentation:
|
||||||
# already promoted
|
# already promoted
|
||||||
presentation = proposal.presentation
|
presentation = proposal.presentation
|
||||||
|
presentation.title = proposal.title
|
||||||
|
presentation.abstract = proposal.abstract
|
||||||
|
presentation.speaker = proposal.speaker
|
||||||
|
presentation.proposal_base = proposal
|
||||||
|
presentation.save()
|
||||||
|
presentation.additional_speakers.clear()
|
||||||
else:
|
else:
|
||||||
presentation = Presentation(
|
presentation = Presentation(
|
||||||
title=proposal.title,
|
title=proposal.title,
|
||||||
|
@ -370,9 +376,9 @@ def promote_proposal(proposal):
|
||||||
proposal_base=proposal,
|
proposal_base=proposal,
|
||||||
)
|
)
|
||||||
presentation.save()
|
presentation.save()
|
||||||
for speaker in proposal.additional_speakers.all():
|
for speaker in proposal.additional_speakers.all():
|
||||||
presentation.additional_speakers.add(speaker)
|
presentation.additional_speakers.add(speaker)
|
||||||
presentation.save()
|
presentation.save()
|
||||||
|
|
||||||
return presentation
|
return presentation
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ from symposion.reviews.forms import ReviewForm, SpeakerCommentForm
|
||||||
from symposion.reviews.forms import BulkPresentationForm
|
from symposion.reviews.forms import BulkPresentationForm
|
||||||
from symposion.reviews.models import (
|
from symposion.reviews.models import (
|
||||||
ReviewAssignment, Review, LatestVote, ProposalResult, NotificationTemplate,
|
ReviewAssignment, Review, LatestVote, ProposalResult, NotificationTemplate,
|
||||||
ResultNotification
|
ResultNotification, promote_proposal
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -422,8 +422,11 @@ def review_detail(request, pk):
|
||||||
elif result == "standby":
|
elif result == "standby":
|
||||||
proposal.result.status = "standby"
|
proposal.result.status = "standby"
|
||||||
proposal.result.save()
|
proposal.result.save()
|
||||||
|
return redirect(request.path)
|
||||||
return redirect(request.path)
|
elif "publish_changes" in request.POST:
|
||||||
|
if admin and proposal.result.status == "accepted":
|
||||||
|
promote_proposal(proposal)
|
||||||
|
return redirect(request.path)
|
||||||
else:
|
else:
|
||||||
initial = {}
|
initial = {}
|
||||||
if latest_vote:
|
if latest_vote:
|
||||||
|
|
20
symposion/schedule/migrations/0002_presentation_unpublish.py
Normal file
20
symposion/schedule/migrations/0002_presentation_unpublish.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-09-18 00:43
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('symposion_schedule', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='presentation',
|
||||||
|
name='unpublish',
|
||||||
|
field=models.BooleanField(default=False, verbose_name='Do not publish'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -190,6 +190,10 @@ class Presentation(models.Model):
|
||||||
speaker = models.ForeignKey(Speaker, related_name="presentations", verbose_name=_("Speaker"))
|
speaker = models.ForeignKey(Speaker, related_name="presentations", verbose_name=_("Speaker"))
|
||||||
additional_speakers = models.ManyToManyField(Speaker, related_name="copresentations",
|
additional_speakers = models.ManyToManyField(Speaker, related_name="copresentations",
|
||||||
blank=True, verbose_name=_("Additional speakers"))
|
blank=True, verbose_name=_("Additional speakers"))
|
||||||
|
unpublish = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
verbose_name=_("Do not publish"),
|
||||||
|
)
|
||||||
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled"))
|
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled"))
|
||||||
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation", verbose_name=_("Proposal base"))
|
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation", verbose_name=_("Proposal base"))
|
||||||
section = models.ForeignKey(Section, related_name="presentations", verbose_name=_("Section"))
|
section = models.ForeignKey(Section, related_name="presentations", verbose_name=_("Section"))
|
||||||
|
|
|
@ -78,6 +78,9 @@ def schedule_list(request, slug=None):
|
||||||
presentations = Presentation.objects.filter(section=schedule.section)
|
presentations = Presentation.objects.filter(section=schedule.section)
|
||||||
presentations = presentations.exclude(cancelled=True)
|
presentations = presentations.exclude(cancelled=True)
|
||||||
|
|
||||||
|
if not request.user.is_staff:
|
||||||
|
presentations = presentations.exclude(unpublish=True)
|
||||||
|
|
||||||
ctx = {
|
ctx = {
|
||||||
"schedule": schedule,
|
"schedule": schedule,
|
||||||
"presentations": presentations,
|
"presentations": presentations,
|
||||||
|
@ -91,7 +94,10 @@ def schedule_list_csv(request, slug=None):
|
||||||
raise Http404()
|
raise Http404()
|
||||||
|
|
||||||
presentations = Presentation.objects.filter(section=schedule.section)
|
presentations = Presentation.objects.filter(section=schedule.section)
|
||||||
presentations = presentations.exclude(cancelled=True).order_by("id")
|
presentations = presentations.exclude(cancelled=True)
|
||||||
|
if not request.user.is_staff:
|
||||||
|
presentations = presentations.exclude(unpublish=True)
|
||||||
|
presentations = presentations.order_by("id")
|
||||||
response = HttpResponse(content_type="text/csv")
|
response = HttpResponse(content_type="text/csv")
|
||||||
|
|
||||||
if slug:
|
if slug:
|
||||||
|
@ -174,12 +180,18 @@ def schedule_slot_edit(request, slug, slot_pk):
|
||||||
def schedule_presentation_detail(request, pk):
|
def schedule_presentation_detail(request, pk):
|
||||||
|
|
||||||
presentation = get_object_or_404(Presentation, pk=pk)
|
presentation = get_object_or_404(Presentation, pk=pk)
|
||||||
|
|
||||||
if presentation.slot:
|
if presentation.slot:
|
||||||
|
# 1) Schedule from presentation's slot
|
||||||
schedule = presentation.slot.day.schedule
|
schedule = presentation.slot.day.schedule
|
||||||
if not schedule.published and not request.user.is_staff:
|
|
||||||
raise Http404()
|
|
||||||
else:
|
else:
|
||||||
schedule = None
|
# 2) Fall back to the schedule for this proposal
|
||||||
|
schedule = presentation.proposal.kind.section.schedule
|
||||||
|
|
||||||
|
if not request.user.is_staff:
|
||||||
|
# 3) Is proposal unpublished?
|
||||||
|
if presentation.unpublish or not (schedule and schedule.published):
|
||||||
|
raise Http404()
|
||||||
|
|
||||||
ctx = {
|
ctx = {
|
||||||
"presentation": presentation,
|
"presentation": presentation,
|
||||||
|
@ -214,10 +226,11 @@ def schedule_json(request):
|
||||||
"tags": "",
|
"tags": "",
|
||||||
"released": True,
|
"released": True,
|
||||||
"contact": [],
|
"contact": [],
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if hasattr(slot.content, "proposal"):
|
if hasattr(slot.content, "proposal"):
|
||||||
|
if slot.content.proposal.unpublish and not request.user.is_staff:
|
||||||
|
continue
|
||||||
|
|
||||||
slot_data.update({
|
slot_data.update({
|
||||||
"name": slot.content.title,
|
"name": slot.content.title,
|
||||||
"authors": [s.name for s in slot.content.speakers()],
|
"authors": [s.name for s in slot.content.speakers()],
|
||||||
|
|
Loading…
Reference in a new issue