1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - EventAggregatorUpdate Action 4 5 @copyright: 2012 by Paul Boddie <paul@boddie.org.uk> 6 @license: GNU GPL (v2 or later), see COPYING.txt for details. 7 """ 8 9 from MoinMoin.Page import Page 10 from MoinMoin import config 11 from EventAggregatorSupport import * 12 13 Dependencies = ['pages'] 14 15 # Action function. 16 17 def execute(pagename, request): 18 19 """ 20 On the given 'pagename', for the given 'request', write a page fragment 21 producing the rendered calendar information for inclusion in an existing Web 22 page. Since the page is not processed, all necessary parameters need to be 23 supplied in the request. 24 """ 25 26 form = get_form(request) 27 page = Page(request, pagename) 28 29 # Find settings from the request parameters only. 30 31 calendar_name = form.get("calendar", [None])[0] 32 category_names = form.get("category", []) 33 remote_sources = form.get("source", []) 34 name_usage = getParameter(request, "names", "weekly") 35 template_name = getParameter(request, "template") 36 parent_name = getParameter(request, "parent") 37 mode = getParameter(request, "mode", "calendar") 38 resolution = getParameter(request, "resolution", mode == "day" and "date" or "month") 39 map_name = getParameter(request, "map") 40 41 # The underlying dimensions of the calendar are supplied in special 42 # parameters. 43 44 raw_calendar_start = getParameter(request, "calendarstart") 45 raw_calendar_end = getParameter(request, "calendarend") 46 47 # Different modes require different levels of precision by default. 48 49 resolution = mode == "calendar" and "month" or resolution 50 51 if resolution == "date": 52 get_date = getParameterDate 53 else: 54 get_date = getParameterMonth 55 56 # Determine the limits of the calendar. 57 58 original_calendar_start = calendar_start = get_date(raw_calendar_start) 59 original_calendar_end = calendar_end = get_date(raw_calendar_end) 60 61 calendar_start = get_date(getParameter(request, "start")) or calendar_start 62 calendar_end = get_date(getParameter(request, "end")) or calendar_end 63 64 # Get the events according to the resolution of the calendar. 65 66 pages = getPagesFromResults(getAllCategoryPages(category_names, request), request) 67 events = getEventsFromResources(getEventPages(pages)) 68 events += getEventsFromResources(getEventResources(remote_sources, calendar_start, calendar_end, request)) 69 all_shown_events = getEventsInPeriod(events, getCalendarPeriod(calendar_start, calendar_end)) 70 earliest, latest = getEventLimits(all_shown_events) 71 72 # Get a concrete period of time. 73 74 first, last = getConcretePeriod(calendar_start, calendar_end, earliest, latest, resolution) 75 76 # Define a view of the calendar, retaining useful navigational information. 77 78 view = View(page, calendar_name, raw_calendar_start, raw_calendar_end, 79 original_calendar_start, original_calendar_end, calendar_start, calendar_end, 80 first, last, category_names, remote_sources, template_name, parent_name, 81 mode, resolution, name_usage, map_name) 82 83 send_headers = get_send_headers(request) 84 send_headers(["Content-Type: text/html; charset=%s" % config.charset]) 85 request.write(view.render(all_shown_events)) 86 87 # vim: tabstop=4 expandtab shiftwidth=4