# HG changeset patch # User Paul Boddie # Date 1265316585 -3600 # Node ID 51266a1cc06dae44d56999ecb0e5c5c8726e9e52 # Parent b45920b609fd2778c42c04ee2d4791412260b7ae Propagated the "raw" calendar start and end values in order to generate correct download and subscription links, since these should yield events only within a calendar's defined period, not all events in a calendar's categories. diff -r b45920b609fd -r 51266a1cc06d macros/EventAggregator.py --- a/macros/EventAggregator.py Thu Feb 04 21:05:07 2010 +0100 +++ b/macros/EventAggregator.py Thu Feb 04 21:49:45 2010 +0100 @@ -27,12 +27,15 @@ "A view of the event calendar." - def __init__(self, page, calendar_name, calendar_start, calendar_end, - first, last, category_names, template_name, parent_name, mode): + def __init__(self, page, calendar_name, raw_calendar_start, raw_calendar_end, + calendar_start, calendar_end, first, last, category_names, template_name, + parent_name, mode): """ Initialise the view with the current 'page', a 'calendar_name' (which - may be None), the requested 'calendar_start' and 'calendar_end', and the + may be None), the 'raw_calendar_start' and 'raw_calendar_end' (which + are the actual start and end values provided by the request), the + requested, calculated 'calendar_start' and 'calendar_end', and the 'first' and 'last' months of event coverage. The additional 'category_names', 'template_name', 'parent_name' and @@ -41,6 +44,8 @@ self.page = page self.calendar_name = calendar_name + self.raw_calendar_start = raw_calendar_start + self.raw_calendar_end = raw_calendar_end self.calendar_start = calendar_start self.calendar_end = calendar_end self.template_name = template_name @@ -103,6 +108,25 @@ subscribe_all_link = download_all_link + "&format=RSS" subscribe_link = download_link + "&format=RSS" + # Adjust the "download all" and "subscribe all" links if the calendar + # has an inherent period associated with it. + + period_limits = [] + + if self.raw_calendar_start: + period_limits.append("&%s" % + self.getMonthQueryString("start", self.raw_calendar_start, prefix=0) + ) + if self.raw_calendar_end: + period_limits.append("&%s" % + self.getMonthQueryString("end", self.raw_calendar_end, prefix=0) + ) + + period_limits = "".join(period_limits) + + download_all_link += period_limits + subscribe_all_link += period_limits + # Write the controls. output.append(fmt.div(on=1, css_class="event-download-controls")) @@ -322,6 +346,8 @@ # Get special arguments. category_names = [] + raw_calendar_start = None + raw_calendar_end = None calendar_start = None calendar_end = None mode = None @@ -332,10 +358,12 @@ for arg in parsed_args: if arg.startswith("start="): - calendar_start = EventAggregatorSupport.getParameterMonth(arg[6:]) + raw_calendar_start = arg[6:] + calendar_start = EventAggregatorSupport.getParameterMonth(raw_calendar_start) elif arg.startswith("end="): - calendar_end = EventAggregatorSupport.getParameterMonth(arg[4:]) + raw_calendar_end = arg[4:] + calendar_end = EventAggregatorSupport.getParameterMonth(raw_calendar_end) elif arg.startswith("mode="): mode = arg[5:] @@ -374,7 +402,8 @@ # Define a view of the calendar, retaining useful navigational information. - view = View(page, calendar_name, calendar_start, calendar_end, first, last, category_names, template_name, parent_name, mode) + view = View(page, calendar_name, raw_calendar_start, raw_calendar_end, calendar_start, calendar_end, + first, last, category_names, template_name, parent_name, mode) # Make a calendar.