# HG changeset patch # User Paul Boddie # Date 1425252148 -3600 # Node ID 3cae4b3ccf094228323e55c3adefe00a61b1f990 # Parent eca3f63a629f44b41cd56c3edb69a77816829844 Moved the generation of organiser-related controls into a separate method, also moving handling of attendee editing into a new method. diff -r eca3f63a629f -r 3cae4b3ccf09 imip_manager.py --- a/imip_manager.py Sun Mar 01 23:18:17 2015 +0100 +++ b/imip_manager.py Mon Mar 02 00:22:28 2015 +0100 @@ -792,81 +792,24 @@ page = self.page page.form(method="POST") + args = self.env.get_args() + # Obtain the user's timezone. tzid = self.get_tzid() - # Provide controls to change the displayed object. - - args = self.env.get_args() + # Obtain basic event information, showing any necessary editing controls. - # Add or remove new attendees. - # This does not affect the stored object. - - existing_attendees = uri_values(obj.get_values("ATTENDEE") or []) - new_attendees = args.get("added", []) - new_attendee = args.get("attendee", [""])[0] + is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user - if args.has_key("add"): - if new_attendee.strip(): - new_attendee = get_uri(new_attendee.strip()) - if new_attendee not in new_attendees and new_attendee not in existing_attendees: - new_attendees.append(new_attendee) - new_attendee = "" - - if args.has_key("removenew"): - removed_attendee = args["removenew"][0] - if removed_attendee in new_attendees: - new_attendees.remove(removed_attendee) - - # Configure the start and end datetimes. - - dtend_control = args.get("dtend-control", [None])[0] - dttimes_control = args.get("dttimes-control", [None])[0] - with_time = dttimes_control == "enable" - - t = self.handle_date_controls("dtstart", with_time) - if t: - dtstart, dtstart_attr = t + if is_organiser: + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.show_object_organiser_controls(obj) + new_attendees, new_attendee = self.handle_new_attendees(obj) else: dtstart, dtstart_attr = obj.get_datetime_item("DTSTART") - - if dtend_control == "enable": - t = self.handle_date_controls("dtend", with_time) - if t: - dtend, dtend_attr = t - else: - dtend, dtend_attr = None, {} - elif dtend_control == "disable": - dtend, dtend_attr = None, {} - else: dtend, dtend_attr = obj.get_datetime_item("DTEND") - - # Change end dates to refer to the actual dates, not the iCalendar - # "next day" dates. - - 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) - - if dtend_enabled: - page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked") - page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable") - else: - page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable") - page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable", checked="checked") - - if dttimes_enabled: - page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable", checked="checked") - page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable") - else: - 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") + new_attendees = [] + new_attendee = "" # Provide a summary of the object. @@ -878,8 +821,6 @@ page.thead.close() page.tbody() - is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user - for name, label in self.property_items: page.tr() @@ -1029,6 +970,88 @@ page.form.close() + def handle_new_attendees(self, obj): + + "Add or remove new attendees. This does not affect the stored object." + + args = self.env.get_args() + + existing_attendees = uri_values(obj.get_values("ATTENDEE") or []) + new_attendees = args.get("added", []) + new_attendee = args.get("attendee", [""])[0] + + if args.has_key("add"): + if new_attendee.strip(): + new_attendee = get_uri(new_attendee.strip()) + if new_attendee not in new_attendees and new_attendee not in existing_attendees: + new_attendees.append(new_attendee) + new_attendee = "" + + if args.has_key("removenew"): + removed_attendee = args["removenew"][0] + if removed_attendee in new_attendees: + new_attendees.remove(removed_attendee) + + return new_attendees, new_attendee + + def show_object_organiser_controls(self, obj): + + "Provide controls to change the displayed object 'obj'." + + page = self.page + args = self.env.get_args() + + # Configure the start and end datetimes. + + dtend_control = args.get("dtend-control", [None])[0] + dttimes_control = args.get("dttimes-control", [None])[0] + with_time = dttimes_control == "enable" + + t = self.handle_date_controls("dtstart", with_time) + if t: + dtstart, dtstart_attr = t + else: + dtstart, dtstart_attr = obj.get_datetime_item("DTSTART") + + if dtend_control == "enable": + t = self.handle_date_controls("dtend", with_time) + if t: + dtend, dtend_attr = t + else: + dtend, dtend_attr = None, {} + elif dtend_control == "disable": + dtend, dtend_attr = None, {} + else: + dtend, dtend_attr = obj.get_datetime_item("DTEND") + + # Change end dates to refer to the actual dates, not the iCalendar + # "next day" dates. + + 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) + + if dtend_enabled: + page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked") + page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable") + else: + page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable") + page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable", checked="checked") + + if dttimes_enabled: + page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable", checked="checked") + page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable") + else: + 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'."