# HG changeset patch # User Paul Boddie # Date 1426011123 -3600 # Node ID c0b9a178ffd111d133790ef12a96ab977515155c # Parent c93d2c7871951265a364b430aa79720f9967ae94 Separated event period details retrieval from datetime controls generation. diff -r c93d2c787195 -r c0b9a178ffd1 imip_manager.py --- a/imip_manager.py Tue Mar 10 18:27:14 2015 +0100 +++ b/imip_manager.py Tue Mar 10 19:12:03 2015 +0100 @@ -876,13 +876,15 @@ is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user if is_organiser: - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.show_object_organiser_controls(obj) + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_active_event_period(obj) new_attendees, new_attendee = self.handle_new_attendees(obj) else: (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj) new_attendees = [] new_attendee = "" + self.show_object_datetime_controls(dtstart, dtend) + # Provide a summary of the object. page.table(class_="object", cellspacing=5, cellpadding=5) @@ -1044,24 +1046,6 @@ page.form.close() - def get_event_period(self, obj): - - """ - Return (dtstart, dtstart attributes), (dtend, dtend attributes) for - 'obj'. - """ - - dtstart, dtstart_attr = obj.get_datetime_item("DTSTART") - if obj.has_key("DTEND"): - dtend, dtend_attr = obj.get_datetime_item("DTEND") - elif obj.has_key("DURATION"): - duration = obj.get_duration("DURATION") - dtend = dtstart + duration - dtend_attr = dtstart_attr - else: - dtend, dtend_attr = dtstart, dtstart_attr - return (dtstart, dtstart_attr), (dtend, dtend_attr) - def handle_new_attendees(self, obj): "Add or remove new attendees. This does not affect the stored object." @@ -1086,9 +1070,30 @@ return new_attendees, new_attendee - def show_object_organiser_controls(self, obj): - - "Provide controls to change the displayed object 'obj'." + def get_event_period(self, obj): + + """ + Return (dtstart, dtstart attributes), (dtend, dtend attributes) for + 'obj'. + """ + + dtstart, dtstart_attr = obj.get_datetime_item("DTSTART") + if obj.has_key("DTEND"): + dtend, dtend_attr = obj.get_datetime_item("DTEND") + elif obj.has_key("DURATION"): + duration = obj.get_duration("DURATION") + dtend = dtstart + duration + dtend_attr = dtstart_attr + else: + dtend, dtend_attr = dtstart, dtstart_attr + return (dtstart, dtstart_attr), (dtend, dtend_attr) + + def get_active_event_period(self, obj): + + """ + Return (dtstart, dtstart attributes), (dtend, dtend attributes) for + 'obj', overridden by request parameters, if present. + """ page = self.page args = self.env.get_args() @@ -1123,11 +1128,23 @@ if dtend and not isinstance(dtend, datetime): dtend -= timedelta(1) - # Show the end datetime controls if already active or if an object needs - # them. - - dtend_enabled = dtend_control == "enable" or isinstance(dtend, datetime) or dtstart != dtend - dttimes_enabled = dttimes_control == "enable" or isinstance(dtstart, datetime) or isinstance(dtend, datetime) + return (dtstart, dtstart_attr), (dtend, dtend_attr) + + def show_object_datetime_controls(self, start, end): + + """ + Show datetime-related controls if already active or if an object needs + them for the given 'start' to 'end' period. + """ + + page = self.page + args = self.env.get_args() + + dtend_control = args.get("dtend-control", [None])[0] + dttimes_control = args.get("dttimes-control", [None])[0] + + dtend_enabled = dtend_control == "enable" or isinstance(end, datetime) or start != end + dttimes_enabled = dttimes_control == "enable" or isinstance(start, datetime) or isinstance(end, datetime) if dtend_enabled: page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked") @@ -1143,8 +1160,6 @@ page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable") page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable", checked="checked") - return (dtstart, dtstart_attr), (dtend, dtend_attr) - def show_recurrences(self, obj): "Show recurrences for the object having the given representation 'obj'."