# HG changeset patch # User Paul Boddie # Date 1427056684 -3600 # Node ID f658ca7505b221ac83a6cb0cdab8c243af65bf9e # Parent d79aa0aad5f3ffe44baa4561ec4923ddcc47ab71 Moved methods around. diff -r d79aa0aad5f3 -r f658ca7505b2 imip_manager.py --- a/imip_manager.py Sun Mar 22 21:23:42 2015 +0100 +++ b/imip_manager.py Sun Mar 22 21:38:04 2015 +0100 @@ -797,6 +797,90 @@ return False + 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 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() + + # 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" + + # Start with the object's original details, overriding them with request + # information. + + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj) + + t = self.handle_date_controls("dtstart", with_time) + if t: + dtstart, dtstart_attr = t + + 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, {} + + # 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) + + return (dtstart, dtstart_attr), (dtend, dtend_attr) + # Page fragment methods. def show_request_controls(self, obj): @@ -1072,90 +1156,6 @@ else: page.td(self.format_datetime(dt, "full")) - 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 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() - - # 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" - - # Start with the object's original details, overriding them with request - # information. - - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj) - - t = self.handle_date_controls("dtstart", with_time) - if t: - dtstart, dtstart_attr = t - - 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, {} - - # 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) - - return (dtstart, dtstart_attr), (dtend, dtend_attr) - def show_object_datetime_controls(self, start, end): """