# HG changeset patch # User Paul Boddie # Date 1237758413 -3600 # Node ID 242a07db6caf46c83560595f4ed24f3342d4860b # Parent 059abf39a5c408a97eaa5c07683760bc2036fa93 Added iCalendar output and a list of all shown events to support it. diff -r 059abf39a5c4 -r 242a07db6caf macros/EventAggregator.py --- a/macros/EventAggregator.py Sun Mar 22 22:17:16 2009 +0100 +++ b/macros/EventAggregator.py Sun Mar 22 22:46:53 2009 +0100 @@ -181,6 +181,7 @@ mode=calendar shows a calendar view of events mode=list shows a list of events by month + mode=ics provides iCalendar data for the events names=daily shows the name of an event on every day of that event names=weekly shows the name of an event once per week @@ -225,6 +226,7 @@ events = [] shown_events = {} + all_shown_events = [] earliest = None latest = None @@ -277,11 +279,14 @@ if not shown_events.has_key(event_month): shown_events[event_month] = [] shown_events[event_month].append(event) + all_shown_events.append(event) # Make a calendar. output = [] + # Output top-level information. + if mode == "list": output.append(fmt.bullet_list(on=1, attr={"class" : "event-listings"})) @@ -572,7 +577,48 @@ output.append(fmt.bullet_list(on=0)) - if mode == "list": + # Output top-level information. + + # Output iCalendar data... + + if mode == "ics": + + # Output the calendar details as preformatted text. + + output.append(fmt.preformatted(on=1)) + output.append(fmt.text("BEGIN:VCALENDAR")) + output.append(fmt.linebreak()) + output.append(fmt.text("VERSION:1.0")) + output.append(fmt.linebreak()) + + for event_page, event_details in all_shown_events: + + # Get a pretty version of the page name. + + pretty_pagename = getPrettyPageName(event_page) + + # Output the event details. + + output.append(fmt.text("BEGIN:VEVENT")) + output.append(fmt.linebreak()) + output.append(fmt.text("SUMMARY:%s" % pretty_pagename)) + output.append(fmt.linebreak()) + output.append(fmt.text("URL:%s" % request.getQualifiedURL(event_page.url(request)))) + output.append(fmt.linebreak()) + output.append(fmt.text("DTSTART:%04d%02d%02d" % event_details["start"])) + output.append(fmt.linebreak()) + output.append(fmt.text("DTEND:%04d%02d%02d" % event_details["end"])) + output.append(fmt.linebreak()) + output.append(fmt.text("END:VEVENT")) + output.append(fmt.linebreak()) + + output.append(fmt.text("END:VCALENDAR")) + output.append(fmt.linebreak()) + output.append(fmt.preformatted(on=0)) + + # End of list view output. + + elif mode == "list": output.append(fmt.bullet_list(on=0)) return ''.join(output)