1.1 --- a/imipweb/event.py Thu Sep 14 23:18:30 2017 +0200
1.2 +++ b/imipweb/event.py Fri Sep 15 00:03:38 2017 +0200
1.3 @@ -25,8 +25,8 @@
1.4 from imiptools.mail import Messenger
1.5 from imipweb.data import EventPeriod, event_period_from_period, \
1.6 form_period_from_period, \
1.7 - filter_duplicates, get_active_periods, \
1.8 - get_removed_periods, remove_from_collection, \
1.9 + classify_periods, filter_duplicates, \
1.10 + remove_from_collection, \
1.11 get_period_control_values, \
1.12 PeriodError
1.13 from imipweb.resource import DateTimeFormUtilities, FormUtilities, ResourceClientForObject
1.14 @@ -857,7 +857,11 @@
1.15 # modified period information.
1.16 # NOTE: Currently, rules are not updated.
1.17
1.18 - active_periods, to_unschedule, to_exclude = self.get_removed_periods(periods)
1.19 + editable_periods, to_change, to_remove = self.classify_periods(periods)
1.20 +
1.21 + active_periods = editable_periods + to_change
1.22 + to_unschedule = self.is_organiser() and to_remove or []
1.23 + to_exclude = not self.is_organiser() and to_remove or []
1.24
1.25 periods = set(periods)
1.26 changed = self.obj.set_period(period) or changed
1.27 @@ -1037,32 +1041,20 @@
1.28 recurrenceid_name="recur-id",
1.29 tzid=self.get_tzid())
1.30
1.31 - def get_removed_periods(self, periods):
1.32 + def classify_periods(self, periods):
1.33
1.34 """
1.35 From the recurrence 'periods' and information provided in the request,
1.36 - return the remaining active periods, the periods to unschedule, and the
1.37 - periods to exclude, in a tuple of the form (active, unscheduled,
1.38 - excluded).
1.39 + return a tuple containing the new and unchanged periods, the changed
1.40 + periods, and the periods to be removed.
1.41 """
1.42
1.43 # Get remaining periods and those whose removal is deferred.
1.44
1.45 - remaining, to_remove = get_removed_periods(periods,
1.46 + new, changed, unchanged, replaced, to_remove = classify_periods(periods,
1.47 self.get_state("recur-remove", list))
1.48
1.49 - # Sort the deferred removal periods into categories.
1.50 -
1.51 - to_unschedule = set()
1.52 - to_exclude = set()
1.53 -
1.54 - for period in to_remove:
1.55 - if not self.can_edit_recurrence(period) and self.is_organiser():
1.56 - to_unschedule.add(period)
1.57 - else:
1.58 - to_exclude.add(period)
1.59 -
1.60 - return remaining, to_unschedule, to_exclude
1.61 + return new + unchanged, changed, to_remove
1.62
1.63 def get_attendees_from_page(self):
1.64