1.1 --- a/imip_manager.py Sun Mar 01 23:18:17 2015 +0100
1.2 +++ b/imip_manager.py Mon Mar 02 00:22:28 2015 +0100
1.3 @@ -792,81 +792,24 @@
1.4 page = self.page
1.5 page.form(method="POST")
1.6
1.7 + args = self.env.get_args()
1.8 +
1.9 # Obtain the user's timezone.
1.10
1.11 tzid = self.get_tzid()
1.12
1.13 - # Provide controls to change the displayed object.
1.14 -
1.15 - args = self.env.get_args()
1.16 + # Obtain basic event information, showing any necessary editing controls.
1.17
1.18 - # Add or remove new attendees.
1.19 - # This does not affect the stored object.
1.20 -
1.21 - existing_attendees = uri_values(obj.get_values("ATTENDEE") or [])
1.22 - new_attendees = args.get("added", [])
1.23 - new_attendee = args.get("attendee", [""])[0]
1.24 + is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user
1.25
1.26 - if args.has_key("add"):
1.27 - if new_attendee.strip():
1.28 - new_attendee = get_uri(new_attendee.strip())
1.29 - if new_attendee not in new_attendees and new_attendee not in existing_attendees:
1.30 - new_attendees.append(new_attendee)
1.31 - new_attendee = ""
1.32 -
1.33 - if args.has_key("removenew"):
1.34 - removed_attendee = args["removenew"][0]
1.35 - if removed_attendee in new_attendees:
1.36 - new_attendees.remove(removed_attendee)
1.37 -
1.38 - # Configure the start and end datetimes.
1.39 -
1.40 - dtend_control = args.get("dtend-control", [None])[0]
1.41 - dttimes_control = args.get("dttimes-control", [None])[0]
1.42 - with_time = dttimes_control == "enable"
1.43 -
1.44 - t = self.handle_date_controls("dtstart", with_time)
1.45 - if t:
1.46 - dtstart, dtstart_attr = t
1.47 + if is_organiser:
1.48 + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.show_object_organiser_controls(obj)
1.49 + new_attendees, new_attendee = self.handle_new_attendees(obj)
1.50 else:
1.51 dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
1.52 -
1.53 - if dtend_control == "enable":
1.54 - t = self.handle_date_controls("dtend", with_time)
1.55 - if t:
1.56 - dtend, dtend_attr = t
1.57 - else:
1.58 - dtend, dtend_attr = None, {}
1.59 - elif dtend_control == "disable":
1.60 - dtend, dtend_attr = None, {}
1.61 - else:
1.62 dtend, dtend_attr = obj.get_datetime_item("DTEND")
1.63 -
1.64 - # Change end dates to refer to the actual dates, not the iCalendar
1.65 - # "next day" dates.
1.66 -
1.67 - if dtend and not isinstance(dtend, datetime):
1.68 - dtend -= timedelta(1)
1.69 -
1.70 - # Show the end datetime controls if already active or if an object needs
1.71 - # them.
1.72 -
1.73 - dtend_enabled = dtend_control == "enable" or isinstance(dtend, datetime) or dtstart != dtend
1.74 - dttimes_enabled = dttimes_control == "enable" or isinstance(dtstart, datetime) or isinstance(dtend, datetime)
1.75 -
1.76 - if dtend_enabled:
1.77 - page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked")
1.78 - page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable")
1.79 - else:
1.80 - page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable")
1.81 - page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable", checked="checked")
1.82 -
1.83 - if dttimes_enabled:
1.84 - page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable", checked="checked")
1.85 - page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable")
1.86 - else:
1.87 - page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable")
1.88 - page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable", checked="checked")
1.89 + new_attendees = []
1.90 + new_attendee = ""
1.91
1.92 # Provide a summary of the object.
1.93
1.94 @@ -878,8 +821,6 @@
1.95 page.thead.close()
1.96 page.tbody()
1.97
1.98 - is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user
1.99 -
1.100 for name, label in self.property_items:
1.101 page.tr()
1.102
1.103 @@ -1029,6 +970,88 @@
1.104
1.105 page.form.close()
1.106
1.107 + def handle_new_attendees(self, obj):
1.108 +
1.109 + "Add or remove new attendees. This does not affect the stored object."
1.110 +
1.111 + args = self.env.get_args()
1.112 +
1.113 + existing_attendees = uri_values(obj.get_values("ATTENDEE") or [])
1.114 + new_attendees = args.get("added", [])
1.115 + new_attendee = args.get("attendee", [""])[0]
1.116 +
1.117 + if args.has_key("add"):
1.118 + if new_attendee.strip():
1.119 + new_attendee = get_uri(new_attendee.strip())
1.120 + if new_attendee not in new_attendees and new_attendee not in existing_attendees:
1.121 + new_attendees.append(new_attendee)
1.122 + new_attendee = ""
1.123 +
1.124 + if args.has_key("removenew"):
1.125 + removed_attendee = args["removenew"][0]
1.126 + if removed_attendee in new_attendees:
1.127 + new_attendees.remove(removed_attendee)
1.128 +
1.129 + return new_attendees, new_attendee
1.130 +
1.131 + def show_object_organiser_controls(self, obj):
1.132 +
1.133 + "Provide controls to change the displayed object 'obj'."
1.134 +
1.135 + page = self.page
1.136 + args = self.env.get_args()
1.137 +
1.138 + # Configure the start and end datetimes.
1.139 +
1.140 + dtend_control = args.get("dtend-control", [None])[0]
1.141 + dttimes_control = args.get("dttimes-control", [None])[0]
1.142 + with_time = dttimes_control == "enable"
1.143 +
1.144 + t = self.handle_date_controls("dtstart", with_time)
1.145 + if t:
1.146 + dtstart, dtstart_attr = t
1.147 + else:
1.148 + dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
1.149 +
1.150 + if dtend_control == "enable":
1.151 + t = self.handle_date_controls("dtend", with_time)
1.152 + if t:
1.153 + dtend, dtend_attr = t
1.154 + else:
1.155 + dtend, dtend_attr = None, {}
1.156 + elif dtend_control == "disable":
1.157 + dtend, dtend_attr = None, {}
1.158 + else:
1.159 + dtend, dtend_attr = obj.get_datetime_item("DTEND")
1.160 +
1.161 + # Change end dates to refer to the actual dates, not the iCalendar
1.162 + # "next day" dates.
1.163 +
1.164 + if dtend and not isinstance(dtend, datetime):
1.165 + dtend -= timedelta(1)
1.166 +
1.167 + # Show the end datetime controls if already active or if an object needs
1.168 + # them.
1.169 +
1.170 + dtend_enabled = dtend_control == "enable" or isinstance(dtend, datetime) or dtstart != dtend
1.171 + dttimes_enabled = dttimes_control == "enable" or isinstance(dtstart, datetime) or isinstance(dtend, datetime)
1.172 +
1.173 + if dtend_enabled:
1.174 + page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked")
1.175 + page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable")
1.176 + else:
1.177 + page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable")
1.178 + page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable", checked="checked")
1.179 +
1.180 + if dttimes_enabled:
1.181 + page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable", checked="checked")
1.182 + page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable")
1.183 + else:
1.184 + page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable")
1.185 + page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable", checked="checked")
1.186 +
1.187 + return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.188 +
1.189 def show_recurrences(self, obj):
1.190
1.191 "Show recurrences for the object having the given representation 'obj'."