# HG changeset patch # User Paul Boddie # Date 1428180211 -7200 # Node ID a165cad1a1ff8fa36734174759faba87ededd2ab # Parent 06e7afb8016087801012d871c2bceee5429fe8cc Changed get_attendees to obtain a normalised list of unique attendees, providing update_attendees for adding and removing from such a list. Introduced get_attendees into the event finalisation process. diff -r 06e7afb80160 -r a165cad1a1ff imipweb/event.py --- a/imipweb/event.py Sat Apr 04 22:33:42 2015 +0200 +++ b/imipweb/event.py Sat Apr 04 22:43:31 2015 +0200 @@ -125,7 +125,7 @@ # Obtain any participants and those to be removed. - attendees = args.get("attendee") + attendees = self.get_attendees() removed = args.get("remove") to_cancel = update_attendees(obj, attendees, removed) @@ -407,13 +407,34 @@ dtend, dtend_attr = dtstart, dtstart_attr return (dtstart, dtstart_attr), (dtend, dtend_attr) - def get_attendees(self, obj): + def get_attendees(self): + + """ + Return attendees from the request, normalised for iCalendar purposes, + and without duplicates. + """ + + args = self.env.get_args() + + attendees = args.get("attendee", []) + unique_attendees = set() + ordered_attendees = [] + + for attendee in attendees: + attendee = get_uri(attendee) + if attendee not in unique_attendees: + unique_attendees.add(attendee) + ordered_attendees.append(attendee) + + return ordered_attendees + + def update_attendees(self, obj): "Add or remove attendees. This does not affect the stored object." args = self.env.get_args() - attendees = args.get("attendee", []) + attendees = self.get_attendees() if args.has_key("add"): attendees.append("") @@ -503,7 +524,7 @@ initial_load = not args.has_key("editing") existing_attendees = uri_values(obj.get_values("ATTENDEE") or []) - attendees = is_organiser and self.get_attendees(obj) or \ + attendees = is_organiser and self.update_attendees(obj) or \ (initial_load or not is_organiser) and existing_attendees or [] (dtstart, dtstart_attr), (dtend, dtend_attr) = self.get_event_period(obj)