1.1 --- a/actions/EventAggregatorSummary.py Sun Jan 16 03:10:14 2011 +0100
1.2 +++ b/actions/EventAggregatorSummary.py Sun Jan 16 19:30:01 2011 +0100
1.3 @@ -2,7 +2,7 @@
1.4 """
1.5 MoinMoin - EventAggregatorSummary Action
1.6
1.7 - @copyright: 2008, 2009, 2010 by Paul Boddie <paul@boddie.org.uk>
1.8 + @copyright: 2008, 2009, 2010, 2011 by Paul Boddie <paul@boddie.org.uk>
1.9 @copyright: 2000-2004 Juergen Hermann <jh@web.de>,
1.10 2003-2008 MoinMoin:ThomasWaldmann,
1.11 2004-2006 MoinMoin:AlexanderSchremmer,
1.12 @@ -25,6 +25,17 @@
1.13
1.14 "A summary dialogue requesting various parameters."
1.15
1.16 + def get_evaluated_label(self, evaluated):
1.17 + _ = self._
1.18 + request = self.request
1.19 +
1.20 + if isinstance(evaluated, EventAggregatorSupport.Date):
1.21 + return EventAggregatorSupport.getFullDateLabel(request, evaluated)
1.22 + elif isinstance(evaluated, EventAggregatorSupport.Month):
1.23 + return EventAggregatorSupport.getFullMonthLabel(request, evaluated)
1.24 + else:
1.25 + return ""
1.26 +
1.27 def get_form_html(self, buttons_html):
1.28 _ = self._
1.29 request = self.request
1.30 @@ -42,9 +53,10 @@
1.31
1.32 category_list.append('<option value="%s" %s>%s</option>' % (category_pagename, selected, category_name))
1.33
1.34 - # Initialise month lists.
1.35 + # Initialise month lists and defaults.
1.36
1.37 start_month_list, end_month_list = self.get_month_lists()
1.38 + start_day_default, end_day_default = self.get_day_defaults()
1.39 start_year_default, end_year_default = self.get_year_defaults()
1.40
1.41 # Criteria instead of months and years.
1.42 @@ -52,13 +64,13 @@
1.43 start_criteria_default = form.get("start", [""])[0]
1.44 end_criteria_default = form.get("end", [""])[0]
1.45
1.46 - start_criteria_evaluated = EventAggregatorSupport.getParameterMonth(start_criteria_default)
1.47 - end_criteria_evaluated = EventAggregatorSupport.getParameterMonth(end_criteria_default)
1.48 + start_criteria_evaluated = EventAggregatorSupport.getParameterDate(start_criteria_default) or \
1.49 + EventAggregatorSupport.getParameterMonth(start_criteria_default)
1.50 + end_criteria_evaluated = EventAggregatorSupport.getParameterDate(end_criteria_default) or \
1.51 + EventAggregatorSupport.getParameterMonth(end_criteria_default)
1.52
1.53 - start_criteria_evaluated = start_criteria_evaluated and \
1.54 - EventAggregatorSupport.getFullMonthLabel(request, start_criteria_evaluated) or ""
1.55 - end_criteria_evaluated = end_criteria_evaluated and \
1.56 - EventAggregatorSupport.getFullMonthLabel(request, end_criteria_evaluated) or ""
1.57 + start_criteria_evaluated = self.get_evaluated_label(start_criteria_evaluated)
1.58 + end_criteria_evaluated = self.get_evaluated_label(end_criteria_evaluated)
1.59
1.60 # Descriptions.
1.61
1.62 @@ -85,14 +97,16 @@
1.63 "category_label" : _("Categories"),
1.64 "category_list" : "\n".join(category_list),
1.65 "start_month_list" : "\n".join(start_month_list),
1.66 - "start_label" : _("Start month and year"),
1.67 + "start_label" : _("Start day (optional), month and year"),
1.68 + "start_day_default" : start_day_default,
1.69 "start_year_default" : start_year_default,
1.70 "start_criteria_label" : _("or special criteria"),
1.71 "start_criteria_default": start_criteria_default,
1.72 "start_eval_label" : right_arrow,
1.73 "start_criteria_eval" : start_criteria_evaluated,
1.74 "end_month_list" : "\n".join(end_month_list),
1.75 - "end_label" : _("End month and year"),
1.76 + "end_label" : _("End day (optional), month and year"),
1.77 + "end_day_default" : end_day_default,
1.78 "end_year_default" : end_year_default,
1.79 "end_criteria_label" : _("or special criteria"),
1.80 "end_criteria_default" : end_criteria_default,
1.81 @@ -119,6 +133,7 @@
1.82 <tr>
1.83 <td class="label"><label>%(start_label)s</label></td>
1.84 <td>
1.85 + <input name="start-day" type="text" value="%(start_day_default)s" size="2" />
1.86 <select name="start-month">
1.87 %(start_month_list)s
1.88 </select>
1.89 @@ -136,6 +151,7 @@
1.90 <tr>
1.91 <td class="label"><label>%(end_label)s</label></td>
1.92 <td>
1.93 + <input name="end-day" type="text" value="%(end_day_default)s" size="2" />
1.94 <select name="end-month">
1.95 %(end_month_list)s
1.96 </select>
1.97 @@ -231,21 +247,38 @@
1.98 descriptions = form.get("descriptions", ["page"])[0]
1.99 parent = form.get("parent", [""])[0]
1.100
1.101 - # Otherwise, produce an iCalendar resource.
1.102 + calendar_start = EventAggregatorSupport.getFormDate(request, None, "start") or \
1.103 + EventAggregatorSupport.getFormMonth(request, None, "start")
1.104 + calendar_end = EventAggregatorSupport.getFormDate(request, None, "end") or \
1.105 + EventAggregatorSupport.getFormMonth(request, None, "end")
1.106
1.107 - calendar_start = EventAggregatorSupport.getFormMonth(request, None, "start")
1.108 - calendar_end = EventAggregatorSupport.getFormMonth(request, None, "end")
1.109 -
1.110 - # Look for separate start and end years and months.
1.111 + # Look for separate start and end parameters, either for complete dates
1.112 + # or for years and months.
1.113
1.114 if calendar_start is None:
1.115 - calendar_start = EventAggregatorSupport.getFormMonthPair(request, "start-year", "start-month")
1.116 + calendar_start = EventAggregatorSupport.getFormDateTriple(request, "start-year", "start-month", "start-day") or \
1.117 + EventAggregatorSupport.getFormMonthPair(request, "start-year", "start-month")
1.118
1.119 if calendar_end is None:
1.120 - calendar_end = EventAggregatorSupport.getFormMonthPair(request, "end-year", "end-month")
1.121 + calendar_end = EventAggregatorSupport.getFormDateTriple(request, "end-year", "end-month", "end-day") or \
1.122 + EventAggregatorSupport.getFormMonthPair(request, "end-year", "end-month")
1.123 +
1.124 + # Determine the period and get the events involved.
1.125 +
1.126 + if isinstance(calendar_start, EventAggregatorSupport.Date):
1.127 + if isinstance(calendar_end, EventAggregatorSupport.Date):
1.128 + mode = "day"
1.129 + else:
1.130 + calendar_start = calendar_start.as_month()
1.131 + mode = "month"
1.132 + else:
1.133 + mode = "month"
1.134 + if isinstance(calendar_end, EventAggregatorSupport.Date):
1.135 + calendar_end = calendar_end.as_month()
1.136
1.137 events, shown_events, all_shown_events, earliest, latest = \
1.138 - EventAggregatorSupport.getEvents(request, category_names, calendar_start, calendar_end)
1.139 + EventAggregatorSupport.getEvents(request, category_names, calendar_start, calendar_end,
1.140 + mode == "day" and "day" or "month")
1.141
1.142 latest_timestamp = EventAggregatorSupport.setEventTimestamps(request, all_shown_events)
1.143
1.144 @@ -327,6 +360,8 @@
1.145
1.146 request.write("END:VCALENDAR\r\n")
1.147
1.148 + # RSS output...
1.149 +
1.150 elif format == "RSS":
1.151
1.152 # Using the page name and the page URL in the title, link and