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