import json
from django.core.urlresolvers import reverse
from django.http import Http404, HttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.template import loader, Context
from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from symposion.schedule.forms import SlotEditForm
from symposion.schedule.models import Schedule, Day, Slot, Presentation
from symposion.schedule.timetable import TimeTable
def fetch_schedule(slug):
qs = Schedule.objects.all()
if slug is None:
if qs.count() > 1:
raise Http404()
schedule = next(iter(qs), None)
if schedule is None:
else:
schedule = get_object_or_404(qs, section__slug=slug)
return schedule
def schedule_conference(request):
schedules = Schedule.objects.filter(published=True, hidden=False)
@@ -135,24 +139,70 @@ def schedule_slot_edit(request, slug, slot_pk):
return redirect("schedule_edit", slug)
form = SlotEditForm(slot=slot)
ctx = {
"slug": slug,
"form": form,
"slot": slot,
}
return render(request, "schedule/_slot_edit.html", ctx)
def schedule_presentation_detail(request, pk):
presentation = get_object_or_404(Presentation, pk=pk)
if presentation.slot:
schedule = presentation.slot.day.schedule
schedule = None
"presentation": presentation,
"schedule": schedule,
return render(request, "schedule/presentation_detail.html", ctx)
def schedule_json(request):
slots = Slot.objects.filter(
day__schedule__published=True,
day__schedule__hidden=False
).order_by("start")
protocol = request.META.get('HTTP_X_FORWARDED_PROTO', 'http')
data = []
for slot in slots:
slot_data = {
"room": ", ".join(room["name"] for room in slot.rooms.values()),
"rooms": [room["name"] for room in slot.rooms.values()],
"start": slot.start_datetime.isoformat(),
"end": slot.end_datetime.isoformat(),
"duration": slot.length_in_minutes,
"kind": slot.kind.label,
"section": slot.day.schedule.section.slug,
if hasattr(slot.content, "proposal"):
slot_data.update({
"name": slot.content.title,
"authors": [s.name for s in slot.content.speakers()],
"contact": [
s.email for s in slot.content.speakers()
] if request.user.is_staff else ["redacted"],
"abstract": slot.content.abstract.raw,
"description": slot.content.description.raw,
"content_href": "%s://%s%s" % (
protocol,
Site.objects.get_current().domain,
reverse("schedule_presentation_detail", args=[slot.content.pk])
),
"cancelled": slot.content.cancelled,
})
"name": slot.content_override.raw if slot.content_override else "Slot",
data.append(slot_data)
return HttpResponse(
json.dumps({'schedule': data}),
content_type="application/json"
)