1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/actions/EventAggregatorUpdate.py Sun Feb 05 01:49:44 2012 +0100
1.3 @@ -0,0 +1,87 @@
1.4 +# -*- coding: iso-8859-1 -*-
1.5 +"""
1.6 + MoinMoin - EventAggregatorUpdate Action
1.7 +
1.8 + @copyright: 2012 by Paul Boddie <paul@boddie.org.uk>
1.9 + @license: GNU GPL (v2 or later), see COPYING.txt for details.
1.10 +"""
1.11 +
1.12 +from MoinMoin.Page import Page
1.13 +from MoinMoin import config
1.14 +from EventAggregatorSupport import *
1.15 +
1.16 +Dependencies = ['pages']
1.17 +
1.18 +# Action function.
1.19 +
1.20 +def execute(pagename, request):
1.21 +
1.22 + """
1.23 + On the given 'pagename', for the given 'request', write a page fragment
1.24 + producing the rendered calendar information for inclusion in an existing Web
1.25 + page. Since the page is not processed, all necessary parameters need to be
1.26 + supplied in the request.
1.27 + """
1.28 +
1.29 + form = get_form(request)
1.30 + page = Page(request, pagename)
1.31 +
1.32 + # Find settings from the request parameters only.
1.33 +
1.34 + calendar_name = form.get("calendar", [None])[0]
1.35 + category_names = form.get("category", [])
1.36 + remote_sources = form.get("source", [])
1.37 + name_usage = getParameter(request, "names", "weekly")
1.38 + template_name = getParameter(request, "template")
1.39 + parent_name = getParameter(request, "parent")
1.40 + mode = getParameter(request, "mode", "calendar")
1.41 + resolution = getParameter(request, "resolution", mode == "day" and "date" or "month")
1.42 + map_name = getParameter(request, "map")
1.43 +
1.44 + # The underlying dimensions of the calendar are supplied in special
1.45 + # parameters.
1.46 +
1.47 + raw_calendar_start = getParameter(request, "calendarstart")
1.48 + raw_calendar_end = getParameter(request, "calendarend")
1.49 +
1.50 + # Different modes require different levels of precision by default.
1.51 +
1.52 + resolution = mode == "calendar" and "month" or resolution
1.53 +
1.54 + if resolution == "date":
1.55 + get_date = getParameterDate
1.56 + else:
1.57 + get_date = getParameterMonth
1.58 +
1.59 + # Determine the limits of the calendar.
1.60 +
1.61 + original_calendar_start = calendar_start = get_date(raw_calendar_start)
1.62 + original_calendar_end = calendar_end = get_date(raw_calendar_end)
1.63 +
1.64 + calendar_start = get_date(getParameter(request, "start")) or calendar_start
1.65 + calendar_end = get_date(getParameter(request, "end")) or calendar_end
1.66 +
1.67 + # Get the events according to the resolution of the calendar.
1.68 +
1.69 + pages = getPagesFromResults(getAllCategoryPages(category_names, request), request)
1.70 + events = getEventsFromResources(getEventPages(pages))
1.71 + events += getEventsFromResources(getEventResources(remote_sources, calendar_start, calendar_end, request))
1.72 + all_shown_events = getEventsInPeriod(events, getCalendarPeriod(calendar_start, calendar_end))
1.73 + earliest, latest = getEventLimits(all_shown_events)
1.74 +
1.75 + # Get a concrete period of time.
1.76 +
1.77 + first, last = getConcretePeriod(calendar_start, calendar_end, earliest, latest, resolution)
1.78 +
1.79 + # Define a view of the calendar, retaining useful navigational information.
1.80 +
1.81 + view = View(page, calendar_name, raw_calendar_start, raw_calendar_end,
1.82 + original_calendar_start, original_calendar_end, calendar_start, calendar_end,
1.83 + first, last, category_names, remote_sources, template_name, parent_name,
1.84 + mode, resolution, name_usage, map_name)
1.85 +
1.86 + send_headers = get_send_headers(request)
1.87 + send_headers(["Content-Type: text/html; charset=%s" % config.charset])
1.88 + request.write(view.render(all_shown_events))
1.89 +
1.90 +# vim: tabstop=4 expandtab shiftwidth=4