1.1 --- a/macros/EventAggregator.py Sun Mar 22 22:17:16 2009 +0100
1.2 +++ b/macros/EventAggregator.py Sun Mar 22 22:46:53 2009 +0100
1.3 @@ -181,6 +181,7 @@
1.4
1.5 mode=calendar shows a calendar view of events
1.6 mode=list shows a list of events by month
1.7 + mode=ics provides iCalendar data for the events
1.8
1.9 names=daily shows the name of an event on every day of that event
1.10 names=weekly shows the name of an event once per week
1.11 @@ -225,6 +226,7 @@
1.12
1.13 events = []
1.14 shown_events = {}
1.15 + all_shown_events = []
1.16
1.17 earliest = None
1.18 latest = None
1.19 @@ -277,11 +279,14 @@
1.20 if not shown_events.has_key(event_month):
1.21 shown_events[event_month] = []
1.22 shown_events[event_month].append(event)
1.23 + all_shown_events.append(event)
1.24
1.25 # Make a calendar.
1.26
1.27 output = []
1.28
1.29 + # Output top-level information.
1.30 +
1.31 if mode == "list":
1.32 output.append(fmt.bullet_list(on=1, attr={"class" : "event-listings"}))
1.33
1.34 @@ -572,7 +577,48 @@
1.35
1.36 output.append(fmt.bullet_list(on=0))
1.37
1.38 - if mode == "list":
1.39 + # Output top-level information.
1.40 +
1.41 + # Output iCalendar data...
1.42 +
1.43 + if mode == "ics":
1.44 +
1.45 + # Output the calendar details as preformatted text.
1.46 +
1.47 + output.append(fmt.preformatted(on=1))
1.48 + output.append(fmt.text("BEGIN:VCALENDAR"))
1.49 + output.append(fmt.linebreak())
1.50 + output.append(fmt.text("VERSION:1.0"))
1.51 + output.append(fmt.linebreak())
1.52 +
1.53 + for event_page, event_details in all_shown_events:
1.54 +
1.55 + # Get a pretty version of the page name.
1.56 +
1.57 + pretty_pagename = getPrettyPageName(event_page)
1.58 +
1.59 + # Output the event details.
1.60 +
1.61 + output.append(fmt.text("BEGIN:VEVENT"))
1.62 + output.append(fmt.linebreak())
1.63 + output.append(fmt.text("SUMMARY:%s" % pretty_pagename))
1.64 + output.append(fmt.linebreak())
1.65 + output.append(fmt.text("URL:%s" % request.getQualifiedURL(event_page.url(request))))
1.66 + output.append(fmt.linebreak())
1.67 + output.append(fmt.text("DTSTART:%04d%02d%02d" % event_details["start"]))
1.68 + output.append(fmt.linebreak())
1.69 + output.append(fmt.text("DTEND:%04d%02d%02d" % event_details["end"]))
1.70 + output.append(fmt.linebreak())
1.71 + output.append(fmt.text("END:VEVENT"))
1.72 + output.append(fmt.linebreak())
1.73 +
1.74 + output.append(fmt.text("END:VCALENDAR"))
1.75 + output.append(fmt.linebreak())
1.76 + output.append(fmt.preformatted(on=0))
1.77 +
1.78 + # End of list view output.
1.79 +
1.80 + elif mode == "list":
1.81 output.append(fmt.bullet_list(on=0))
1.82
1.83 return ''.join(output)