1.1 --- a/imipweb/event.py Wed Jun 14 00:30:32 2017 +0200
1.2 +++ b/imipweb/event.py Sun Sep 10 23:45:01 2017 +0200
1.3 @@ -3,7 +3,7 @@
1.4 """
1.5 A Web interface to a calendar event.
1.6
1.7 -Copyright (C) 2014, 2015, 2016 Paul Boddie <paul@boddie.org.uk>
1.8 +Copyright (C) 2014, 2015, 2016, 2017 Paul Boddie <paul@boddie.org.uk>
1.9
1.10 This program is free software; you can redistribute it and/or modify it under
1.11 the terms of the GNU General Public License as published by the Free Software
1.12 @@ -23,7 +23,8 @@
1.13 uri_parts, uri_values
1.14 from imiptools.dates import format_datetime, to_timezone
1.15 from imiptools.mail import Messenger
1.16 -from imipweb.data import EventPeriod, event_period_from_period, FormPeriod, PeriodError
1.17 +from imipweb.data import EventPeriod, event_period_from_period, \
1.18 + get_period_control_values, PeriodError
1.19 from imipweb.resource import DateTimeFormUtilities, FormUtilities, ResourceClientForObject
1.20
1.21 # Fake gettext method for strings to be translated later.
1.22 @@ -312,13 +313,9 @@
1.23
1.24 elif name == "ATTENDEE":
1.25 attendee_map = dict(items)
1.26 - first = True
1.27
1.28 for i, value in enumerate(attendees):
1.29 - if not first:
1.30 - page.tr()
1.31 - else:
1.32 - first = False
1.33 + if i: page.tr()
1.34
1.35 # Obtain details of attendees to supply attributes.
1.36
1.37 @@ -327,8 +324,7 @@
1.38
1.39 # Allow more attendees to be specified.
1.40
1.41 - if not first:
1.42 - page.tr()
1.43 + if i: page.tr()
1.44
1.45 page.td(colspan=2)
1.46 self.control("add", "submit", "add", id="add", class_="add")
1.47 @@ -339,13 +335,8 @@
1.48 # Handle potentially many values of other kinds.
1.49
1.50 else:
1.51 - first = True
1.52 -
1.53 for i, (value, attr) in enumerate(items):
1.54 - if not first:
1.55 - page.tr()
1.56 - else:
1.57 - first = False
1.58 + if i: page.tr()
1.59
1.60 page.td(class_="objectvalue %s" % field, colspan=2)
1.61 if name == "ORGANIZER":
1.62 @@ -1009,14 +1000,11 @@
1.63
1.64 "Return the main period defined in the event form."
1.65
1.66 - args = self.env.get_args()
1.67 -
1.68 - dtend_enabled = args.get("dtend-control", [None])[0]
1.69 - dttimes_enabled = args.get("dttimes-control", [None])[0]
1.70 - start = self.get_date_control_values("dtstart")
1.71 - end = self.get_date_control_values("dtend")
1.72 -
1.73 - period = FormPeriod(start, end, dtend_enabled, dttimes_enabled, self.get_tzid(), "DTSTART")
1.74 + period = get_period_control_values(self.env.get_args(),
1.75 + "dtstart", "dtend",
1.76 + "dtend-control", "dttimes-control",
1.77 + origin="DTSTART",
1.78 + tzid=self.get_tzid())
1.79
1.80 # Handle absent main period details.
1.81
1.82 @@ -1029,28 +1017,11 @@
1.83
1.84 "Return the recurrences defined in the event form."
1.85
1.86 - args = self.env.get_args()
1.87 -
1.88 - all_dtend_enabled = args.get("dtend-control-recur", [])
1.89 - all_dttimes_enabled = args.get("dttimes-control-recur", [])
1.90 - all_starts = self.get_date_control_values("dtstart-recur", multiple=True)
1.91 - all_ends = self.get_date_control_values("dtend-recur", multiple=True, tzid_name="dtstart-recur")
1.92 - all_origins = args.get("recur-origin", [])
1.93 - all_replaced = args.get("recur-replaced", [])
1.94 -
1.95 - periods = []
1.96 -
1.97 - for index, (start, end, origin) in \
1.98 - enumerate(map(None, all_starts, all_ends, all_origins)):
1.99 -
1.100 - dtend_enabled = str(index) in all_dtend_enabled
1.101 - dttimes_enabled = str(index) in all_dttimes_enabled
1.102 - replaced = str(index) in all_replaced
1.103 -
1.104 - period = FormPeriod(start, end, dtend_enabled, dttimes_enabled, self.get_tzid(), origin, replaced)
1.105 - periods.append(period)
1.106 -
1.107 - return periods
1.108 + return get_period_control_values(self.env.get_args(),
1.109 + "dtstart-recur", "dtend-recur",
1.110 + "dtend-control-recur", "dttimes-control-recur",
1.111 + origin_name="recur-origin", replaced_name="recur-replaced",
1.112 + tzid=self.get_tzid())
1.113
1.114 def set_recurrences_in_page(self, recurrences):
1.115