1.1 --- a/imip_manager.py Tue Mar 24 20:41:10 2015 +0100
1.2 +++ b/imip_manager.py Tue Mar 24 23:22:05 2015 +0100
1.3 @@ -742,8 +742,8 @@
1.4
1.5 # Get the main period details.
1.6
1.7 - dtend_enabled = args.get("dtend-control", [None])[0] == "enable"
1.8 - dttimes_enabled = args.get("dttimes-control", [None])[0] == "enable"
1.9 + dtend_enabled = args.get("dtend-control", [None])[0]
1.10 + dttimes_enabled = args.get("dttimes-control", [None])[0]
1.11 start_values = self.get_date_control_values("dtstart")
1.12 end_values = self.get_date_control_values("dtend")
1.13
1.14 @@ -756,14 +756,16 @@
1.15
1.16 # Get the recurring period details.
1.17
1.18 - all_dtend_enabled = map(lambda x: x == "enable", args.get("dtend-control-recur", []))
1.19 - all_dttimes_enabled = map(lambda x: x == "enable", args.get("dttimes-control-recur", []))
1.20 + all_dtend_enabled = args.get("dtend-control-recur", [])
1.21 + all_dttimes_enabled = args.get("dttimes-control-recur", [])
1.22 all_start_values = self.get_date_control_values("dtstart-recur", multiple=True)
1.23 all_end_values = self.get_date_control_values("dtend-recur", multiple=True)
1.24
1.25 - for start_values, end_values, dtend_enabled, dttimes_enabled in \
1.26 - map(None, all_start_values, all_end_values, all_dtend_enabled, all_dttimes_enabled):
1.27 -
1.28 + for index, (start_values, end_values, dtend_enabled, dttimes_enabled) in \
1.29 + enumerate(map(None, all_start_values, all_end_values, all_dtend_enabled, all_dttimes_enabled)):
1.30 +
1.31 + dtend_enabled = str(index) in all_dtend_enabled
1.32 + dttimes_enabled = str(index) in all_dttimes_enabled
1.33 period, errors = self.handle_period_controls(start_values, end_values, dtend_enabled, dttimes_enabled)
1.34
1.35 if errors:
1.36 @@ -974,41 +976,6 @@
1.37 dtend, dtend_attr = dtstart, dtstart_attr
1.38 return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.39
1.40 - def get_active_event_period(self, obj):
1.41 -
1.42 - """
1.43 - Return (dtstart, dtstart attributes), (dtend, dtend attributes) for
1.44 - 'obj', overridden by request parameters, if present.
1.45 - """
1.46 -
1.47 - page = self.page
1.48 - args = self.env.get_args()
1.49 -
1.50 - # Configure the start and end datetimes.
1.51 -
1.52 - dtend_enabled = args.get("dtend-control", [None])[0] == "enable"
1.53 - dttimes_enabled = args.get("dttimes-control", [None])[0] == "enable"
1.54 -
1.55 - # Start with the object's original details, overriding them with request
1.56 - # information.
1.57 -
1.58 - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)
1.59 -
1.60 - d = self.get_date_control_values("dtstart")
1.61 - t = self.handle_date_control_values(d, dttimes_enabled)
1.62 - if t:
1.63 - dtstart, dtstart_attr = t
1.64 -
1.65 - if dtend_enabled:
1.66 - d = self.get_date_control_values("dtend")
1.67 - t = self.handle_date_control_values(d, dttimes_enabled)
1.68 - if t:
1.69 - dtend, dtend_attr = t
1.70 - else:
1.71 - dtend, dtend_attr = None, {}
1.72 -
1.73 - return (dtstart, dtstart_attr), (dtend, dtend_attr)
1.74 -
1.75 # Page fragment methods.
1.76
1.77 def show_request_controls(self, obj):
1.78 @@ -1090,6 +1057,8 @@
1.79 page = self.page
1.80 page.form(method="POST")
1.81
1.82 + page.input(name="editing", type="hidden", value="true")
1.83 +
1.84 args = self.env.get_args()
1.85
1.86 # Obtain the user's timezone.
1.87 @@ -1101,13 +1070,12 @@
1.88 is_organiser = get_uri(obj.get_value("ORGANIZER")) == self.user
1.89
1.90 if is_organiser:
1.91 - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_active_event_period(obj)
1.92 new_attendees, new_attendee = self.handle_new_attendees(obj)
1.93 else:
1.94 - (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)
1.95 new_attendees = []
1.96 new_attendee = ""
1.97
1.98 + (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)
1.99 self.show_object_datetime_controls(dtstart, dtend)
1.100
1.101 # Provide a summary of the object.
1.102 @@ -1276,21 +1244,30 @@
1.103
1.104 page.style.close()
1.105
1.106 - dtend_control = args.get(ssn("dtend-control", "recur", index), [None])[index or 0:]
1.107 - dttimes_control = args.get(ssn("dttimes-control", "recur", index), [None])[index or 0:]
1.108 -
1.109 - dtend_enabled = dtend_control and dtend_control[0] == "enable" or isinstance(end, datetime) or start != end - timedelta(1)
1.110 - dttimes_enabled = dttimes_control and dttimes_control[0] == "enable" or isinstance(start, datetime) or isinstance(end, datetime)
1.111 + dtend_control = args.get(ssn("dtend-control", "recur", index), [])
1.112 + dttimes_control = args.get(ssn("dttimes-control", "recur", index), [])
1.113 +
1.114 + dtend_enabled = index is not None and str(index) in dtend_control or index is None and dtend_control
1.115 + dttimes_enabled = index is not None and str(index) in dttimes_control or index is None and dttimes_control
1.116 +
1.117 + initial_load = not args.has_key("editing")
1.118 +
1.119 + dtend_enabled = dtend_enabled or initial_load and (isinstance(end, datetime) or start != end - timedelta(1))
1.120 + dttimes_enabled = dttimes_enabled or initial_load and (isinstance(start, datetime) or isinstance(end, datetime))
1.121
1.122 if dtend_enabled:
1.123 - page.input(name=ssn("dtend-control", "recur", index), type="checkbox", value="enable", id=sn("dtend-enable", index), checked="checked")
1.124 + page.input(name=ssn("dtend-control", "recur", index), type="checkbox",
1.125 + value=(index is not None and str(index) or "enable"), id=sn("dtend-enable", index), checked="checked")
1.126 else:
1.127 - page.input(name=ssn("dtend-control", "recur", index), type="checkbox", value="enable", id=sn("dtend-enable", index))
1.128 + page.input(name=ssn("dtend-control", "recur", index), type="checkbox",
1.129 + value=(index is not None and str(index) or "enable"), id=sn("dtend-enable", index))
1.130
1.131 if dttimes_enabled:
1.132 - page.input(name=ssn("dttimes-control", "recur", index), type="checkbox", value="enable", id=sn("dttimes-enable", index), checked="checked")
1.133 + page.input(name=ssn("dttimes-control", "recur", index), type="checkbox",
1.134 + value=(index is not None and str(index) or "enable"), id=sn("dttimes-enable", index), checked="checked")
1.135 else:
1.136 - page.input(name=ssn("dttimes-control", "recur", index), type="checkbox", value="enable", id=sn("dttimes-enable", index))
1.137 + page.input(name=ssn("dttimes-control", "recur", index), type="checkbox",
1.138 + value=(index is not None and str(index) or "enable"), id=sn("dttimes-enable", index))
1.139
1.140 def show_datetime_controls(self, obj, dt, attr, show_start):
1.141
1.142 @@ -1442,6 +1419,7 @@
1.143 # Show each recurrence in a separate table if editable.
1.144
1.145 if is_organiser and explicit_periods:
1.146 +
1.147 for index, (start, end, origin) in enumerate(periods[1:]):
1.148
1.149 # Isolate the controls from neighbouring tables.