# HG changeset patch # User Paul Boddie # Date 1295202601 -3600 # Node ID 0c87ac42fed20e7cb62883c6268ff7fd5c30231a # Parent fa33d60bf552aaaa2d249461f230b7f2fb00afeb Introduced support for date-based periods in the summary action. diff -r fa33d60bf552 -r 0c87ac42fed2 EventAggregatorSupport.py --- a/EventAggregatorSupport.py Sun Jan 16 03:10:14 2011 +0100 +++ b/EventAggregatorSupport.py Sun Jan 16 19:30:01 2011 +0100 @@ -213,6 +213,17 @@ return start_year_default, end_year_default + def get_day_defaults(self, default_as_current=0): + + "Return defaults for the start and end days." + + form = self.get_form() + + start_day_default = form.get("start-day", [default_as_current and getCurrentDate().day() or ""])[0] + end_day_default = form.get("end-day", [default_as_current and start_day_default or ""])[0] + + return start_day_default, end_day_default + def get_form(request): "Work around disruptive MoinMoin changes in 1.9." @@ -1516,7 +1527,14 @@ return None def getDate(s): - return getDateTime(s).as_date() + + "Parse the string 's', extracting and returning a date object." + + dt = getDateTime(s) + if dt is not None: + return dt.as_date() + else: + return None def getDateTime(s): @@ -1694,6 +1712,22 @@ else: return None +def getFormDateTriple(request, yeararg, montharg, dayarg): + + """ + Return the date from the 'request' for the calendar with the given + 'calendar_name' using the parameters having the given 'yeararg', 'montharg' + and 'dayarg' names. + """ + + year = getParameter(request, yeararg) + month = getParameter(request, montharg) + day = getParameter(request, dayarg) + if year and month and day: + return Date((int(year), int(month), int(day))) + else: + return None + def getFormMonthPair(request, yeararg, montharg): """ diff -r fa33d60bf552 -r 0c87ac42fed2 actions/EventAggregatorSummary.py --- a/actions/EventAggregatorSummary.py Sun Jan 16 03:10:14 2011 +0100 +++ b/actions/EventAggregatorSummary.py Sun Jan 16 19:30:01 2011 +0100 @@ -2,7 +2,7 @@ """ MoinMoin - EventAggregatorSummary Action - @copyright: 2008, 2009, 2010 by Paul Boddie + @copyright: 2008, 2009, 2010, 2011 by Paul Boddie @copyright: 2000-2004 Juergen Hermann , 2003-2008 MoinMoin:ThomasWaldmann, 2004-2006 MoinMoin:AlexanderSchremmer, @@ -25,6 +25,17 @@ "A summary dialogue requesting various parameters." + def get_evaluated_label(self, evaluated): + _ = self._ + request = self.request + + if isinstance(evaluated, EventAggregatorSupport.Date): + return EventAggregatorSupport.getFullDateLabel(request, evaluated) + elif isinstance(evaluated, EventAggregatorSupport.Month): + return EventAggregatorSupport.getFullMonthLabel(request, evaluated) + else: + return "" + def get_form_html(self, buttons_html): _ = self._ request = self.request @@ -42,9 +53,10 @@ category_list.append('' % (category_pagename, selected, category_name)) - # Initialise month lists. + # Initialise month lists and defaults. start_month_list, end_month_list = self.get_month_lists() + start_day_default, end_day_default = self.get_day_defaults() start_year_default, end_year_default = self.get_year_defaults() # Criteria instead of months and years. @@ -52,13 +64,13 @@ start_criteria_default = form.get("start", [""])[0] end_criteria_default = form.get("end", [""])[0] - start_criteria_evaluated = EventAggregatorSupport.getParameterMonth(start_criteria_default) - end_criteria_evaluated = EventAggregatorSupport.getParameterMonth(end_criteria_default) + start_criteria_evaluated = EventAggregatorSupport.getParameterDate(start_criteria_default) or \ + EventAggregatorSupport.getParameterMonth(start_criteria_default) + end_criteria_evaluated = EventAggregatorSupport.getParameterDate(end_criteria_default) or \ + EventAggregatorSupport.getParameterMonth(end_criteria_default) - start_criteria_evaluated = start_criteria_evaluated and \ - EventAggregatorSupport.getFullMonthLabel(request, start_criteria_evaluated) or "" - end_criteria_evaluated = end_criteria_evaluated and \ - EventAggregatorSupport.getFullMonthLabel(request, end_criteria_evaluated) or "" + start_criteria_evaluated = self.get_evaluated_label(start_criteria_evaluated) + end_criteria_evaluated = self.get_evaluated_label(end_criteria_evaluated) # Descriptions. @@ -85,14 +97,16 @@ "category_label" : _("Categories"), "category_list" : "\n".join(category_list), "start_month_list" : "\n".join(start_month_list), - "start_label" : _("Start month and year"), + "start_label" : _("Start day (optional), month and year"), + "start_day_default" : start_day_default, "start_year_default" : start_year_default, "start_criteria_label" : _("or special criteria"), "start_criteria_default": start_criteria_default, "start_eval_label" : right_arrow, "start_criteria_eval" : start_criteria_evaluated, "end_month_list" : "\n".join(end_month_list), - "end_label" : _("End month and year"), + "end_label" : _("End day (optional), month and year"), + "end_day_default" : end_day_default, "end_year_default" : end_year_default, "end_criteria_label" : _("or special criteria"), "end_criteria_default" : end_criteria_default, @@ -119,6 +133,7 @@ + @@ -136,6 +151,7 @@ + @@ -231,21 +247,38 @@ descriptions = form.get("descriptions", ["page"])[0] parent = form.get("parent", [""])[0] - # Otherwise, produce an iCalendar resource. + calendar_start = EventAggregatorSupport.getFormDate(request, None, "start") or \ + EventAggregatorSupport.getFormMonth(request, None, "start") + calendar_end = EventAggregatorSupport.getFormDate(request, None, "end") or \ + EventAggregatorSupport.getFormMonth(request, None, "end") - calendar_start = EventAggregatorSupport.getFormMonth(request, None, "start") - calendar_end = EventAggregatorSupport.getFormMonth(request, None, "end") - - # Look for separate start and end years and months. + # Look for separate start and end parameters, either for complete dates + # or for years and months. if calendar_start is None: - calendar_start = EventAggregatorSupport.getFormMonthPair(request, "start-year", "start-month") + calendar_start = EventAggregatorSupport.getFormDateTriple(request, "start-year", "start-month", "start-day") or \ + EventAggregatorSupport.getFormMonthPair(request, "start-year", "start-month") if calendar_end is None: - calendar_end = EventAggregatorSupport.getFormMonthPair(request, "end-year", "end-month") + calendar_end = EventAggregatorSupport.getFormDateTriple(request, "end-year", "end-month", "end-day") or \ + EventAggregatorSupport.getFormMonthPair(request, "end-year", "end-month") + + # Determine the period and get the events involved. + + if isinstance(calendar_start, EventAggregatorSupport.Date): + if isinstance(calendar_end, EventAggregatorSupport.Date): + mode = "day" + else: + calendar_start = calendar_start.as_month() + mode = "month" + else: + mode = "month" + if isinstance(calendar_end, EventAggregatorSupport.Date): + calendar_end = calendar_end.as_month() events, shown_events, all_shown_events, earliest, latest = \ - EventAggregatorSupport.getEvents(request, category_names, calendar_start, calendar_end) + EventAggregatorSupport.getEvents(request, category_names, calendar_start, calendar_end, + mode == "day" and "day" or "month") latest_timestamp = EventAggregatorSupport.setEventTimestamps(request, all_shown_events) @@ -327,6 +360,8 @@ request.write("END:VCALENDAR\r\n") + # RSS output... + elif format == "RSS": # Using the page name and the page URL in the title, link and