1.1 --- a/imip_manager.py Sun Mar 22 21:23:42 2015 +0100
1.2 +++ b/imip_manager.py Sun Mar 22 21:38:04 2015 +0100
1.3 @@ -797,6 +797,90 @@
1.4
1.5 return False
1.6
1.7 + def handle_new_attendees(self, obj):
1.8 +
1.9 + "Add or remove new attendees. This does not affect the stored object."
1.10 +
1.11 + args = self.env.get_args()
1.12 +
1.13 + existing_attendees = uri_values(obj.get_values("ATTENDEE") or [])
1.14 + new_attendees = args.get("added", [])
1.15 + new_attendee = args.get("attendee", [""])[0]
1.16 +
1.17 + if args.has_key("add"):
1.18 + if new_attendee.strip():
1.19 + new_attendee = get_uri(new_attendee.strip())
1.20 + if new_attendee not in new_attendees and new_attendee not in existing_attendees:
1.21 + new_attendees.append(new_attendee)
1.22 + new_attendee = ""
1.23 +
1.24 + if args.has_key("removenew"):
1.25 + removed_attendee = args["removenew"][0]
1.26 + if removed_attendee in new_attendees:
1.27 + new_attendees.remove(removed_attendee)
1.28 +
1.29 + return new_attendees, new_attendee
1.30 +
1.31 + def get_event_period(self, obj):
1.32 +
1.33 + """
1.34 + Return (dtstart, dtstart attributes), (dtend, dtend attributes) for
1.35 + 'obj'.
1.36 + """
1.37 +
1.38 + dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
1.39 + if obj.has_key("DTEND"):
1.40 + dtend, dtend_attr = obj.get_datetime_item("DTEND")
1.41 + elif obj.has_key("DURATION"):
1.42 + duration = obj.get_duration("DURATION")
1.43 + dtend = dtstart + duration
1.44 + dtend_attr = dtstart_attr
1.45 + else:
1.46 + dtend, dtend_attr = dtstart, dtstart_attr
1.47 + return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.48 +
1.49 + def get_active_event_period(self, obj):
1.50 +
1.51 + """
1.52 + Return (dtstart, dtstart attributes), (dtend, dtend attributes) for
1.53 + 'obj', overridden by request parameters, if present.
1.54 + """
1.55 +
1.56 + page = self.page
1.57 + args = self.env.get_args()
1.58 +
1.59 + # Configure the start and end datetimes.
1.60 +
1.61 + dtend_control = args.get("dtend-control", [None])[0]
1.62 + dttimes_control = args.get("dttimes-control", [None])[0]
1.63 + with_time = dttimes_control == "enable"
1.64 +
1.65 + # Start with the object's original details, overriding them with request
1.66 + # information.
1.67 +
1.68 + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)
1.69 +
1.70 + t = self.handle_date_controls("dtstart", with_time)
1.71 + if t:
1.72 + dtstart, dtstart_attr = t
1.73 +
1.74 + if dtend_control == "enable":
1.75 + t = self.handle_date_controls("dtend", with_time)
1.76 + if t:
1.77 + dtend, dtend_attr = t
1.78 + else:
1.79 + dtend, dtend_attr = None, {}
1.80 + elif dtend_control == "disable":
1.81 + dtend, dtend_attr = None, {}
1.82 +
1.83 + # Change end dates to refer to the actual dates, not the iCalendar
1.84 + # "next day" dates.
1.85 +
1.86 + if dtend and not isinstance(dtend, datetime):
1.87 + dtend -= timedelta(1)
1.88 +
1.89 + return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.90 +
1.91 # Page fragment methods.
1.92
1.93 def show_request_controls(self, obj):
1.94 @@ -1072,90 +1156,6 @@
1.95 else:
1.96 page.td(self.format_datetime(dt, "full"))
1.97
1.98 - def handle_new_attendees(self, obj):
1.99 -
1.100 - "Add or remove new attendees. This does not affect the stored object."
1.101 -
1.102 - args = self.env.get_args()
1.103 -
1.104 - existing_attendees = uri_values(obj.get_values("ATTENDEE") or [])
1.105 - new_attendees = args.get("added", [])
1.106 - new_attendee = args.get("attendee", [""])[0]
1.107 -
1.108 - if args.has_key("add"):
1.109 - if new_attendee.strip():
1.110 - new_attendee = get_uri(new_attendee.strip())
1.111 - if new_attendee not in new_attendees and new_attendee not in existing_attendees:
1.112 - new_attendees.append(new_attendee)
1.113 - new_attendee = ""
1.114 -
1.115 - if args.has_key("removenew"):
1.116 - removed_attendee = args["removenew"][0]
1.117 - if removed_attendee in new_attendees:
1.118 - new_attendees.remove(removed_attendee)
1.119 -
1.120 - return new_attendees, new_attendee
1.121 -
1.122 - def get_event_period(self, obj):
1.123 -
1.124 - """
1.125 - Return (dtstart, dtstart attributes), (dtend, dtend attributes) for
1.126 - 'obj'.
1.127 - """
1.128 -
1.129 - dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
1.130 - if obj.has_key("DTEND"):
1.131 - dtend, dtend_attr = obj.get_datetime_item("DTEND")
1.132 - elif obj.has_key("DURATION"):
1.133 - duration = obj.get_duration("DURATION")
1.134 - dtend = dtstart + duration
1.135 - dtend_attr = dtstart_attr
1.136 - else:
1.137 - dtend, dtend_attr = dtstart, dtstart_attr
1.138 - return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.139 -
1.140 - def get_active_event_period(self, obj):
1.141 -
1.142 - """
1.143 - Return (dtstart, dtstart attributes), (dtend, dtend attributes) for
1.144 - 'obj', overridden by request parameters, if present.
1.145 - """
1.146 -
1.147 - page = self.page
1.148 - args = self.env.get_args()
1.149 -
1.150 - # Configure the start and end datetimes.
1.151 -
1.152 - dtend_control = args.get("dtend-control", [None])[0]
1.153 - dttimes_control = args.get("dttimes-control", [None])[0]
1.154 - with_time = dttimes_control == "enable"
1.155 -
1.156 - # Start with the object's original details, overriding them with request
1.157 - # information.
1.158 -
1.159 - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)
1.160 -
1.161 - t = self.handle_date_controls("dtstart", with_time)
1.162 - if t:
1.163 - dtstart, dtstart_attr = t
1.164 -
1.165 - if dtend_control == "enable":
1.166 - t = self.handle_date_controls("dtend", with_time)
1.167 - if t:
1.168 - dtend, dtend_attr = t
1.169 - else:
1.170 - dtend, dtend_attr = None, {}
1.171 - elif dtend_control == "disable":
1.172 - dtend, dtend_attr = None, {}
1.173 -
1.174 - # Change end dates to refer to the actual dates, not the iCalendar
1.175 - # "next day" dates.
1.176 -
1.177 - if dtend and not isinstance(dtend, datetime):
1.178 - dtend -= timedelta(1)
1.179 -
1.180 - return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.181 -
1.182 def show_object_datetime_controls(self, start, end):
1.183
1.184 """