2.1 --- a/imip_manager.py Sun Feb 08 22:52:37 2015 +0100
2.2 +++ b/imip_manager.py Mon Feb 09 14:37:21 2015 +0100
2.3 @@ -512,17 +512,20 @@
2.4 update = False
2.5
2.6 if is_organiser:
2.7 - t = self.handle_date_controls("dtstart")
2.8 + dtend_enabled = args.get("dtend-control", [None])[0] == "enable"
2.9 + dttimes_enabled = args.get("dttimes-control", [None])[0] == "enable"
2.10 +
2.11 + t = self.handle_date_controls("dtstart", dttimes_enabled)
2.12 if t:
2.13 dtstart, attr = t
2.14 - update = self.set_datetime_in_object(dtstart, attr["TZID"], "DTSTART", obj) or update
2.15 + update = self.set_datetime_in_object(dtstart, attr.get("TZID"), "DTSTART", obj) or update
2.16 else:
2.17 return ["dtstart"]
2.18
2.19 # Handle specified end datetimes.
2.20
2.21 - if args.get("dtend-control", [None])[0] == "enable":
2.22 - t = self.handle_date_controls("dtend")
2.23 + if dtend_enabled:
2.24 + t = self.handle_date_controls("dtend", dttimes_enabled)
2.25 if t:
2.26 dtend, attr = t
2.27
2.28 @@ -530,7 +533,7 @@
2.29
2.30 if not isinstance(dtend, datetime):
2.31 dtend += timedelta(1)
2.32 - update = self.set_datetime_in_object(dtend, attr["TZID"], "DTEND", obj) or update
2.33 + update = self.set_datetime_in_object(dtend, attr.get("TZID"), "DTEND", obj) or update
2.34 else:
2.35 return ["dtend"]
2.36
2.37 @@ -541,7 +544,7 @@
2.38 dtend = dtstart + timedelta(1)
2.39 if isinstance(dtstart, datetime):
2.40 dtend = get_start_of_day(dtend, attr["TZID"])
2.41 - update = self.set_datetime_in_object(dtend, attr["TZID"], "DTEND", obj) or update
2.42 + update = self.set_datetime_in_object(dtend, attr.get("TZID"), "DTEND", obj) or update
2.43
2.44 if dtstart >= dtend:
2.45 return ["dtstart", "dtend"]
2.46 @@ -585,7 +588,7 @@
2.47
2.48 return None
2.49
2.50 - def handle_date_controls(self, name):
2.51 + def handle_date_controls(self, name, with_time=True):
2.52
2.53 """
2.54 Handle date control information for fields starting with 'name',
2.55 @@ -594,19 +597,24 @@
2.56 """
2.57
2.58 args = self.env.get_args()
2.59 - tzid = self.get_tzid()
2.60
2.61 if args.has_key("%s-date" % name):
2.62 date = args["%s-date" % name][0]
2.63 - hour = args.get("%s-hour" % name, [None])[0]
2.64 - minute = args.get("%s-minute" % name, [None])[0]
2.65 - second = args.get("%s-second" % name, [None])[0]
2.66 - tzid = args.get("%s-tzid" % name, [tzid])[0]
2.67 +
2.68 + if with_time:
2.69 + hour = args.get("%s-hour" % name, [None])[0]
2.70 + minute = args.get("%s-minute" % name, [None])[0]
2.71 + second = args.get("%s-second" % name, [None])[0]
2.72 + tzid = args.get("%s-tzid" % name, [self.get_tzid()])[0]
2.73
2.74 - time = (hour or minute or second) and "T%s%s%s" % (hour, minute, second) or ""
2.75 - value = "%s%s" % (date, time)
2.76 - attr = {"TZID" : tzid}
2.77 - dt = get_datetime(value, attr)
2.78 + time = (hour or minute or second) and "T%s%s%s" % (hour, minute, second) or ""
2.79 + value = "%s%s" % (date, time)
2.80 + attr = {"TZID" : tzid, "VALUE" : "DATE-TIME"}
2.81 + dt = get_datetime(value, attr)
2.82 + else:
2.83 + attr = {"VALUE" : "DATE"}
2.84 + dt = get_datetime(date)
2.85 +
2.86 if dt:
2.87 return dt, attr
2.88
2.89 @@ -707,17 +715,18 @@
2.90 # Provide controls to change the displayed object.
2.91
2.92 args = self.env.get_args()
2.93 + dtend_control = args.get("dtend-control", [None])[0]
2.94 + dttimes_control = args.get("dttimes-control", [None])[0]
2.95 + with_time = dttimes_control == "enable"
2.96
2.97 - t = self.handle_date_controls("dtstart")
2.98 + t = self.handle_date_controls("dtstart", with_time)
2.99 if t:
2.100 dtstart, dtstart_attr = t
2.101 else:
2.102 dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
2.103
2.104 - dtend_control = args.get("dtend-control", [None])[0]
2.105 -
2.106 if dtend_control == "enable":
2.107 - t = self.handle_date_controls("dtend")
2.108 + t = self.handle_date_controls("dtend", with_time)
2.109 if t:
2.110 dtend, dtend_attr = t
2.111 else:
2.112 @@ -736,15 +745,23 @@
2.113 # Show the end datetime controls if already active or if an object needs
2.114 # them.
2.115
2.116 - dtend_control = dtend_control or (isinstance(dtend, datetime) or dtstart != dtend) and "enable" or None
2.117 + dtend_enabled = dtend_control == "enable" or isinstance(dtend, datetime) or dtstart != dtend
2.118 + dttimes_enabled = dttimes_control == "enable" or isinstance(dtstart, datetime) or isinstance(dtend, datetime)
2.119
2.120 - if dtend_control == "enable":
2.121 + if dtend_enabled:
2.122 page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable", checked="checked")
2.123 page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable")
2.124 else:
2.125 page.input(name="dtend-control", type="radio", value="enable", id="dtend-enable")
2.126 page.input(name="dtend-control", type="radio", value="disable", id="dtend-disable", checked="checked")
2.127
2.128 + if dttimes_enabled:
2.129 + page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable", checked="checked")
2.130 + page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable")
2.131 + else:
2.132 + page.input(name="dttimes-control", type="radio", value="enable", id="dttimes-enable")
2.133 + page.input(name="dttimes-control", type="radio", value="disable", id="dttimes-disable", checked="checked")
2.134 +
2.135 # Provide a summary of the object.
2.136
2.137 page.table(class_="object", cellspacing=5, cellpadding=5)
2.138 @@ -779,25 +796,32 @@
2.139 else:
2.140 dt, attr, event_tzid = dtend or dtstart, dtend_attr or dtstart_attr, (dtend_attr or dtstart_attr).get("TZID", tzid)
2.141
2.142 - strvalue = self.format_datetime(dt, "full")
2.143 - value = format_datetime(dt)
2.144 + # Show controls for editing as organiser.
2.145
2.146 if is_organiser:
2.147 + value = format_datetime(dt)
2.148 +
2.149 page.td(class_="objectvalue %s" % field)
2.150 if name == "DTEND":
2.151 - page.div(class_="disabled")
2.152 + page.div(class_="dt disabled")
2.153 page.label("Specify end date", for_="dtend-enable", class_="enable")
2.154 page.div.close()
2.155
2.156 - page.div(class_="enabled")
2.157 + page.div(class_="dt enabled")
2.158 self._show_date_controls(field, value, attr, tzid)
2.159 - if name == "DTEND":
2.160 + if name == "DTSTART":
2.161 + page.label("Specify times", for_="dttimes-enable", class_="time disabled enable")
2.162 + page.label("Specify dates only", for_="dttimes-disable", class_="time enabled disable")
2.163 + elif name == "DTEND":
2.164 page.label("End on same day", for_="dtend-disable", class_="disable")
2.165 page.div.close()
2.166
2.167 page.td.close()
2.168 +
2.169 + # Show a label as attendee.
2.170 +
2.171 else:
2.172 - page.td(strvalue)
2.173 + page.td(self.format_datetime(dt, "full"))
2.174
2.175 page.tr.close()
2.176
2.177 @@ -1478,21 +1502,23 @@
2.178
2.179 # Show time details.
2.180
2.181 - if isinstance(dt, datetime):
2.182 - hour = args.get("%s-hour" % name, "%02d" % dt.hour)
2.183 - minute = args.get("%s-minute" % name, "%02d" % dt.minute)
2.184 - second = args.get("%s-second" % name, "%02d" % dt.second)
2.185 - page.add(" ")
2.186 - page.input(name="%s-hour" % name, type="text", value=hour, maxlength=2, size=2)
2.187 - page.add(":")
2.188 - page.input(name="%s-minute" % name, type="text", value=minute, maxlength=2, size=2)
2.189 - page.add(":")
2.190 - page.input(name="%s-second" % name, type="text", value=second, maxlength=2, size=2)
2.191 - page.add(" ")
2.192 - self._show_menu("%s-tzid" % name, event_tzid,
2.193 - [(event_tzid, event_tzid)] + (
2.194 - event_tzid != tzid and [(tzid, tzid)] or []
2.195 - ))
2.196 + dt_time = isinstance(dt, datetime) and dt or None
2.197 + hour = args.get("%s-hour" % name, "%02d" % (dt_time and dt_time.hour or 0))
2.198 + minute = args.get("%s-minute" % name, "%02d" % (dt_time and dt_time.minute or 0))
2.199 + second = args.get("%s-second" % name, "%02d" % (dt_time and dt_time.second or 0))
2.200 +
2.201 + page.span(class_="time enabled")
2.202 + page.input(name="%s-hour" % name, type="text", value=hour, maxlength=2, size=2)
2.203 + page.add(":")
2.204 + page.input(name="%s-minute" % name, type="text", value=minute, maxlength=2, size=2)
2.205 + page.add(":")
2.206 + page.input(name="%s-second" % name, type="text", value=second, maxlength=2, size=2)
2.207 + page.add(" ")
2.208 + self._show_menu("%s-tzid" % name, event_tzid,
2.209 + [(event_tzid, event_tzid)] + (
2.210 + event_tzid != tzid and [(tzid, tzid)] or []
2.211 + ))
2.212 + page.span.close()
2.213
2.214 # Incoming HTTP request direction.
2.215