# HG changeset patch # User Paul Boddie # Date 1442693365 -7200 # Node ID e6564d017302859a613e3717a2c2c636652cda8a # Parent 53408cd94020d4d57aa883934bce1be4827fb489 Added methods related to attendee editing. diff -r 53408cd94020 -r e6564d017302 imipweb/event.py --- a/imipweb/event.py Sat Sep 19 17:58:47 2015 +0200 +++ b/imipweb/event.py Sat Sep 19 22:09:25 2015 +0200 @@ -376,6 +376,27 @@ return ordered_attendees + def can_remove_attendee(self, attendee): + + """ + Return whether 'attendee' can be removed from the current object without + notification. + """ + + return self.can_edit_attendee(attendee) or attendee == self.user + + def can_edit_attendee(self, attendee): + + "Return whether 'attendee' can be edited by an organiser." + + return self.attendee_is_new(attendee) or not self.obj.is_shared() + + def attendee_is_new(self, attendee): + + "Return whether 'attendee' is new to the current object." + + return attendee not in self.get_stored_attendees() + def update_attendees_from_page(self): "Add or remove attendees. This does not affect the stored object." @@ -383,7 +404,6 @@ args = self.env.get_args() attendees = self.get_attendees_from_page() - existing_attendees = self.get_stored_attendees() if args.has_key("add"): attendees.append("") @@ -400,9 +420,7 @@ except IndexError: continue - existing = attendee in existing_attendees - - if not existing or not self.obj.is_shared() or attendee == self.user: + if self.can_remove_attendee(attendee): attendees.remove(attendee) else: still_to_remove.append(i) @@ -607,14 +625,13 @@ page = self.page args = self.env.get_args() - existing = attendee_attr is not None partstat = attendee_attr and attendee_attr.get("PARTSTAT") page.td(class_="objectvalue") # Show a form control as organiser for new attendees. - if self.is_organiser() and (not existing or not self.obj.is_shared()): + if self.is_organiser() and self.can_edit_attendee(attendee): self._control("attendee", "value", attendee, size="40") else: self._control("attendee", "hidden", attendee) @@ -630,9 +647,12 @@ # button in order to refresh the page and show a control for # the current user, if indicated. - elif self.is_organiser() and not existing: + elif self.is_organiser() and self.attendee_is_new(attendee): self._control("partstat-refresh", "submit", "refresh", id="partstat-%d" % i, class_="refresh") page.label(dict(self.partstat_items).get(partstat, ""), for_="partstat-%s" % i, class_="partstat") + + # Otherwise, just show a label with the participation status. + else: page.span(dict(self.partstat_items).get(partstat, ""), class_="partstat") @@ -642,7 +662,7 @@ # Permit the removal of newly-added attendees. - remove_type = (not existing or not self.obj.is_shared() or attendee == self.user) and "submit" or "checkbox" + remove_type = self.can_remove_attendee(attendee) and "submit" or "checkbox" self._control("remove", remove_type, str(i), str(i) in args.get("remove", []), id="remove-%d" % i, class_="remove") page.label("Remove", for_="remove-%d" % i, class_="remove")