symposion_app/symposion/schedule/views.py

158 lines
4.3 KiB
Python
Raw Normal View History

from django.core.exceptions import ObjectDoesNotExist
2012-10-09 19:07:55 +00:00
from django.http import Http404, HttpResponse
2012-08-31 04:55:37 +00:00
from django.shortcuts import render, get_object_or_404, redirect
2012-10-09 19:07:55 +00:00
from django.template import loader, Context
2012-08-31 05:16:30 +00:00
from django.contrib.auth.decorators import login_required
2012-08-31 04:55:37 +00:00
from symposion.schedule.forms import SlotEditForm
2012-08-31 05:50:00 +00:00
from symposion.schedule.models import Schedule, Day, Slot, Presentation
2012-08-30 06:52:50 +00:00
from symposion.schedule.timetable import TimeTable
def fetch_schedule(slug):
qs = Schedule.objects.all()
2012-08-31 05:16:30 +00:00
2012-08-30 06:23:49 +00:00
if slug is None:
2012-09-21 02:38:24 +00:00
if qs.count() > 1:
raise Http404()
schedule = next(iter(qs), None)
if schedule is None:
raise Http404()
else:
schedule = get_object_or_404(qs, section__slug=slug)
return schedule
2012-12-20 06:49:32 +00:00
def schedule_conference(request):
schedules = Schedule.objects.all()
sections = []
for schedule in schedules:
days_qs = Day.objects.filter(schedule=schedule)
days = [TimeTable(day) for day in days_qs]
sections.append({
"schedule": schedule,
"days": days,
})
ctx = {
"sections": sections,
}
return render(request, "schedule/schedule_conference.html", ctx)
def schedule_detail(request, slug=None):
schedule = fetch_schedule(slug)
2012-08-31 05:16:30 +00:00
days_qs = Day.objects.filter(schedule=schedule)
days = [TimeTable(day) for day in days_qs]
ctx = {
"schedule": schedule,
"days": days,
}
2012-08-30 06:52:50 +00:00
return render(request, "schedule/schedule_detail.html", ctx)
def schedule_list(request, slug=None):
schedule = fetch_schedule(slug)
presentations = Presentation.objects.filter(section=schedule.section)
presentations = presentations.exclude(cancelled=True)
2012-08-31 05:50:00 +00:00
ctx = {
"schedule": schedule,
2012-08-31 05:50:00 +00:00
"presentations": presentations,
}
return render(request, "schedule/schedule_list.html", ctx)
2012-10-09 19:07:55 +00:00
def schedule_list_csv(request, slug=None):
schedule = fetch_schedule(slug)
presentations = Presentation.objects.filter(section=schedule.section)
presentations = presentations.exclude(cancelled=True).order_by("id")
response = HttpResponse(mimetype="text/csv")
if slug:
file_slug = slug
else:
file_slug = "presentations"
response["Content-Disposition"] = 'attachment; filename="%s.csv"' % file_slug
response.write(loader.get_template("schedule/schedule_list.csv").render(Context({
"presentations": presentations,
})))
return response
2012-08-31 05:16:30 +00:00
@login_required
def schedule_edit(request, slug=None):
2012-08-31 05:16:30 +00:00
if not request.user.is_staff:
raise Http404()
schedule = fetch_schedule(slug)
2012-08-31 05:16:30 +00:00
2012-08-30 06:51:07 +00:00
days_qs = Day.objects.filter(schedule=schedule)
days = [TimeTable(day) for day in days_qs]
ctx = {
"schedule": schedule,
2012-08-30 06:51:07 +00:00
"days": days,
}
2012-08-30 06:52:50 +00:00
return render(request, "schedule/schedule_edit.html", ctx)
2012-08-31 04:55:37 +00:00
2012-08-31 05:16:30 +00:00
@login_required
def schedule_slot_edit(request, slug, slot_pk):
2012-08-31 05:16:30 +00:00
if not request.user.is_staff:
raise Http404()
slot = get_object_or_404(Slot, day__schedule__section__slug=slug, pk=slot_pk)
2012-08-31 04:55:37 +00:00
if request.method == "POST":
2012-10-26 21:32:03 +00:00
form = SlotEditForm(request.POST, slot=slot)
if form.is_valid():
2012-10-26 21:32:03 +00:00
save = False
if "content_override" in form.cleaned_data:
slot.content_override = form.cleaned_data["content_override"]
save = True
if "presentation" in form.cleaned_data:
presentation = form.cleaned_data["presentation"]
if presentation is None:
slot.unassign()
else:
slot.assign(presentation)
if save:
slot.save()
return redirect("schedule_edit", slug)
else:
2012-10-26 21:32:03 +00:00
form = SlotEditForm(slot=slot)
ctx = {
"slug": slug,
"form": form,
"slot": slot,
}
return render(request, "schedule/_slot_edit.html", ctx)
2012-09-21 02:38:24 +00:00
def schedule_presentation_detail(request, pk):
presentation = get_object_or_404(Presentation, pk=pk)
if presentation.slot:
schedule = presentation.slot.day.schedule
else:
schedule = None
2012-09-21 02:38:24 +00:00
ctx = {
"presentation": presentation,
"schedule": schedule,
2012-09-21 02:38:24 +00:00
}
return render(request, "schedule/presentation_detail.html", ctx)