1.1 --- a/imipweb/event.py Mon Apr 06 22:57:23 2015 +0200
1.2 +++ b/imipweb/event.py Tue Apr 07 00:36:47 2015 +0200
1.3 @@ -28,8 +28,7 @@
1.4 from imiptools.mail import Messenger
1.5 from imiptools.period import have_conflict
1.6 from imipweb.data import EventPeriod, \
1.7 - end_date_from_calendar, end_date_to_calendar, \
1.8 - event_period_from_recurrence_period, \
1.9 + event_period_from_period, form_period_from_period, \
1.10 FormDate, FormPeriod, PeriodError
1.11 from imipweb.handler import ManagerHandler
1.12 from imipweb.resource import Resource
1.13 @@ -188,9 +187,9 @@
1.14
1.15 "Set in the given 'obj' the given 'period' as the main start and end."
1.16
1.17 - p = period.as_event_period()
1.18 + p = event_period_from_period(period)
1.19 result = self.set_datetime_in_object(p.start, p.start_attr and p.start_attr.get("TZID"), "DTSTART", obj)
1.20 - result = self.set_datetime_in_object(end_date_to_calendar(p.end), p.end_attr and p.end_attr.get("TZID"), "DTEND", obj) or result
1.21 + result = self.set_datetime_in_object(p.end, p.end_attr and p.end_attr.get("TZID"), "DTEND", obj) or result
1.22 return result
1.23
1.24 def set_periods_in_object(self, obj, periods):
1.25 @@ -206,9 +205,9 @@
1.26 del obj["RDATE"]
1.27
1.28 for period in periods:
1.29 - p = period.as_event_period()
1.30 + p = event_period_from_period(period)
1.31 tzid = p.start_attr and p.start_attr.get("TZID") or p.end_attr and p.end_attr.get("TZID")
1.32 - new_rdates.append(get_period_item(p.start, end_date_to_calendar(p.end), tzid))
1.33 + new_rdates.append(get_period_item(p.start, p.end, tzid))
1.34
1.35 obj["RDATE"] = new_rdates
1.36
1.37 @@ -305,7 +304,7 @@
1.38 else:
1.39 dtend, dtend_attr = dtstart, dtstart_attr
1.40
1.41 - return EventPeriod(dtstart, end_date_from_calendar(dtend), dtstart_attr, dtend_attr)
1.42 + return EventPeriod(dtstart, dtend, dtstart_attr, dtend_attr)
1.43
1.44 def get_main_period(self):
1.45
1.46 @@ -332,8 +331,8 @@
1.47 def get_existing_recurrences(self, obj):
1.48 recurrences = []
1.49 for period in obj.get_periods(self.get_tzid(), self.get_window_end()):
1.50 - if period.origin == "RDATE":
1.51 - recurrences.append(event_period_from_recurrence_period(period))
1.52 + if period.origin != "DTSTART":
1.53 + recurrences.append(period)
1.54 return recurrences
1.55
1.56 def get_recurrences(self):
1.57 @@ -708,22 +707,21 @@
1.58 page.a("This event modifies a recurring event.", href=self.link_to(uid))
1.59 page.p.close()
1.60
1.61 - # Obtain the periods associated with the event in the user's time zone.
1.62 + # Obtain the periods associated with the event.
1.63
1.64 - periods = map(event_period_from_recurrence_period, obj.get_periods(self.get_tzid(), self.get_window_end()))
1.65 recurrences = self.get_current_recurrences(obj)
1.66
1.67 - if len(periods) <= 1:
1.68 + if len(recurrences) < 1:
1.69 return
1.70
1.71 recurrenceids = self._get_recurrences(uid)
1.72
1.73 + page.p("This event occurs on the following occasions within the next %d days:" % self.get_window_size())
1.74 +
1.75 # Show each recurrence in a separate table if editable.
1.76
1.77 if self.is_organiser(obj) and recurrences:
1.78
1.79 - page.p("The following occurrences are editable:")
1.80 -
1.81 for index, p in enumerate(recurrences):
1.82
1.83 # Isolate the controls from neighbouring tables.
1.84 @@ -735,6 +733,7 @@
1.85 page.table(cellspacing=5, cellpadding=5, class_="recurrence")
1.86 page.caption("Occurrence")
1.87 page.tbody()
1.88 +
1.89 page.tr()
1.90 error = errors and ("dtstart", index) in errors and " error" or ""
1.91 page.th("Start", class_="objectheading start%s" % error)
1.92 @@ -745,6 +744,7 @@
1.93 page.th("End", class_="objectheading end%s" % error)
1.94 self.show_recurrence_controls(obj, index, p, recurrenceid, recurrenceids, False)
1.95 page.tr.close()
1.96 +
1.97 page.tbody.close()
1.98 page.table.close()
1.99
1.100 @@ -752,26 +752,25 @@
1.101
1.102 # Otherwise, use a compact single table.
1.103
1.104 - page.p("This event occurs on the following occasions within the next %d days:" % self.get_window_size())
1.105 + else:
1.106 + page.table(cellspacing=5, cellpadding=5, class_="recurrence")
1.107 + page.caption("Occurrences")
1.108 + page.thead()
1.109 + page.tr()
1.110 + page.th("Start", class_="objectheading start")
1.111 + page.th("End", class_="objectheading end")
1.112 + page.tr.close()
1.113 + page.thead.close()
1.114 + page.tbody()
1.115
1.116 - page.table(cellspacing=5, cellpadding=5, class_="recurrence")
1.117 - page.caption("Occurrences")
1.118 - page.thead()
1.119 - page.tr()
1.120 - page.th("Start", class_="objectheading start")
1.121 - page.th("End", class_="objectheading end")
1.122 - page.tr.close()
1.123 - page.thead.close()
1.124 - page.tbody()
1.125 + for index, p in enumerate(recurrences):
1.126 + page.tr()
1.127 + self.show_recurrence_label(p, recurrenceid, recurrenceids, True)
1.128 + self.show_recurrence_label(p, recurrenceid, recurrenceids, False)
1.129 + page.tr.close()
1.130
1.131 - for index, p in enumerate(periods):
1.132 - page.tr()
1.133 - self.show_recurrence_label(p, recurrenceid, recurrenceids, True)
1.134 - self.show_recurrence_label(p, recurrenceid, recurrenceids, False)
1.135 - page.tr.close()
1.136 -
1.137 - page.tbody.close()
1.138 - page.table.close()
1.139 + page.tbody.close()
1.140 + page.table.close()
1.141
1.142 def show_conflicting_events(self, uid, obj):
1.143
1.144 @@ -865,7 +864,7 @@
1.145 individual controls for dynamic manipulation.
1.146 """
1.147
1.148 - p = period.as_form_period()
1.149 + p = form_period_from_period(period)
1.150
1.151 page = self.page
1.152 args = self.env.get_args()
1.153 @@ -967,14 +966,11 @@
1.154 page = self.page
1.155 sn = self._suffixed_name
1.156 ssn = self._simple_suffixed_name
1.157 - p = period
1.158 +
1.159 + p = event_period_from_period(period)
1.160
1.161 start_utc = format_datetime(to_timezone(p.get_start(), "UTC"))
1.162 replaced = recurrenceids and start_utc in recurrenceids and "replaced" or ""
1.163 - css = " ".join([
1.164 - replaced,
1.165 - recurrenceid and start_utc == recurrenceid and "affected" or ""
1.166 - ])
1.167
1.168 # Show controls for editing as organiser.
1.169
1.170 @@ -1006,10 +1002,10 @@
1.171 else:
1.172 self.show_recurrence_label(p, recurrenceid, recurrenceids, show_start)
1.173
1.174 - def show_recurrence_label(self, p, recurrenceid, recurrenceids, show_start):
1.175 + def show_recurrence_label(self, period, recurrenceid, recurrenceids, show_start):
1.176
1.177 """
1.178 - Show datetime details for the given period 'p', employing any
1.179 + Show datetime details for the given 'period', employing any
1.180 'recurrenceid' and 'recurrenceids' for the object to configure the
1.181 displayed information.
1.182
1.183 @@ -1019,6 +1015,8 @@
1.184
1.185 page = self.page
1.186
1.187 + p = event_period_from_period(period)
1.188 +
1.189 start_utc = format_datetime(to_timezone(p.get_start(), "UTC"))
1.190 replaced = recurrenceids and start_utc in recurrenceids and "replaced" or ""
1.191 css = " ".join([