Merge pull request #57 from lca2017/chrisjrn/september_rebase

Symposion changes for schedule announcement
This commit is contained in:
Scott Bragg 2016-09-18 20:41:44 +10:00 committed by GitHub
commit e96bce62ab
5 changed files with 58 additions and 12 deletions

View file

@ -361,6 +361,12 @@ def promote_proposal(proposal):
if hasattr(proposal, "presentation") and proposal.presentation:
# already promoted
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:
presentation = Presentation(
title=proposal.title,
@ -370,9 +376,9 @@ def promote_proposal(proposal):
proposal_base=proposal,
)
presentation.save()
for speaker in proposal.additional_speakers.all():
presentation.additional_speakers.add(speaker)
presentation.save()
for speaker in proposal.additional_speakers.all():
presentation.additional_speakers.add(speaker)
presentation.save()
return presentation

View file

@ -23,7 +23,7 @@ from symposion.reviews.forms import ReviewForm, SpeakerCommentForm
from symposion.reviews.forms import BulkPresentationForm
from symposion.reviews.models import (
ReviewAssignment, Review, LatestVote, ProposalResult, NotificationTemplate,
ResultNotification
ResultNotification, promote_proposal
)
@ -422,8 +422,11 @@ def review_detail(request, pk):
elif result == "standby":
proposal.result.status = "standby"
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:
initial = {}
if latest_vote:

View 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'),
),
]

View file

@ -190,6 +190,10 @@ class Presentation(models.Model):
speaker = models.ForeignKey(Speaker, related_name="presentations", verbose_name=_("Speaker"))
additional_speakers = models.ManyToManyField(Speaker, related_name="copresentations",
blank=True, verbose_name=_("Additional speakers"))
unpublish = models.BooleanField(
default=False,
verbose_name=_("Do not publish"),
)
cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled"))
proposal_base = models.OneToOneField(ProposalBase, related_name="presentation", verbose_name=_("Proposal base"))
section = models.ForeignKey(Section, related_name="presentations", verbose_name=_("Section"))

View file

@ -78,6 +78,9 @@ def schedule_list(request, slug=None):
presentations = Presentation.objects.filter(section=schedule.section)
presentations = presentations.exclude(cancelled=True)
if not request.user.is_staff:
presentations = presentations.exclude(unpublish=True)
ctx = {
"schedule": schedule,
"presentations": presentations,
@ -91,7 +94,10 @@ def schedule_list_csv(request, slug=None):
raise Http404()
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")
if slug:
@ -174,12 +180,18 @@ def schedule_slot_edit(request, slug, slot_pk):
def schedule_presentation_detail(request, pk):
presentation = get_object_or_404(Presentation, pk=pk)
if presentation.slot:
# 1) Schedule from presentation's slot
schedule = presentation.slot.day.schedule
if not schedule.published and not request.user.is_staff:
raise Http404()
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 = {
"presentation": presentation,
@ -214,10 +226,11 @@ def schedule_json(request):
"tags": "",
"released": True,
"contact": [],
}
if hasattr(slot.content, "proposal"):
if slot.content.proposal.unpublish and not request.user.is_staff:
continue
slot_data.update({
"name": slot.content.title,
"authors": [s.name for s in slot.content.speakers()],