Adds an ical feed

This commit is contained in:
Scott Bragg 2016-12-22 12:00:23 +11:00
parent cdec6e2258
commit a37d620afb
3 changed files with 46 additions and 0 deletions

View file

@ -10,3 +10,4 @@ easy-thumbnails==2.3
html5lib==0.9999999
markdown==2.6.5
pytz==2015.7
django-ical==1.4

View file

@ -13,6 +13,7 @@ from .views import (
session_staff_email,
session_list,
session_detail,
EventFeed
)
urlpatterns = [
@ -27,6 +28,7 @@ urlpatterns = [
url(r"^([\w\-]+)/presentations.csv$", schedule_list_csv, name="schedule_list_csv"),
url(r"^([\w\-]+)/edit/slot/(\d+)/", schedule_slot_edit, name="schedule_slot_edit"),
url(r"^conference.json", schedule_json, name="schedule_json"),
url(r"^conference.ics", EventFeed(), name="ical_feed"),
url(r"^sessions/staff.txt$", session_staff_email, name="schedule_session_staff_email"),
url(r"^sessions/$", session_list, name="schedule_session_list"),
url(r"^session/(\d+)/$", session_detail, name="schedule_session_detail"),

View file

@ -10,6 +10,8 @@ from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib.sites.models import Site
from django_ical.views import ICalFeed
from account.decorators import login_required
from symposion.schedule.forms import SlotEditForm, ScheduleSectionForm
@ -256,6 +258,47 @@ def schedule_json(request):
content_type="application/json"
)
class EventFeed(ICalFeed):
product_id = '-//linux.conf.au/schedule//EN'
timezone = 'Australia/Tasmania'
filename = 'conference.ics'
def items(self):
return Slot.objects.filter(
day__schedule__published=True,
day__schedule__hidden=False
).order_by("start")
def item_title(self, item):
if hasattr(item.content, 'proposal'):
return item.content.title
else:
item.content_override if item.content_override else "Slot"
def item_description(self, item):
if hasattr(item.content, 'proposal'):
return item.content.abstract
else:
return None
def item_start_datetime(self, item):
return item.start_datetime
def item_end_datetime(self, item):
return item.end_datetime
def item_location(self, item):
return ", ".join(room["name"] for room in item.rooms.values())
def item_link(self, item):
if hasattr(item.content, 'proposal'):
return 'http://%s%s' % (
Site.objects.get_current().domain,
reverse('schedule_presentation_detail', args=[item.content.pk])
)
else:
return 'http://%s' % Site.objects.get_current().domain
def session_list(request):
sessions = Session.objects.all().order_by('pk')