# HG changeset patch # User Paul Boddie # Date 1428441395 -7200 # Node ID 904fc8d3a5e9d70947af3d65059fff4fcb3a46ea # Parent e2704746829869adbea80e3d2d7dfc2b371501c8 Fixed sequence number updating when updating events. Combined the invite and save actions, selecting the appropriate result when handling the form data. diff -r e27047468298 -r 904fc8d3a5e9 imipweb/event.py --- a/imipweb/event.py Tue Apr 07 22:30:06 2015 +0200 +++ b/imipweb/event.py Tue Apr 07 23:16:35 2015 +0200 @@ -82,12 +82,11 @@ reply = args.has_key("reply") discard = args.has_key("discard") - invite = args.has_key("invite") + create = args.has_key("create") cancel = args.has_key("cancel") - save = args.has_key("save") ignore = args.has_key("ignore") - have_action = reply or discard or invite or cancel or save or ignore + have_action = reply or discard or create or cancel or ignore if not have_action: return ["action"] @@ -98,11 +97,11 @@ self.redirect(self.env.get_path()) return None - update = False - # Update the object. - if reply or invite or cancel or save: + single_user = False + + if reply or create or cancel: # Update principal event details if organiser. @@ -133,6 +132,7 @@ attendees = self.get_attendees() removed = [attendees[int(i)] for i in args.get("remove", [])] to_cancel = update_attendees(obj, attendees, removed) + single_user = not attendees or attendees == [self.user] # Update attendee participation. @@ -141,6 +141,9 @@ # Process any action. + invite = create and not single_user + save = create and single_user + handled = True if reply or invite or cancel: @@ -149,13 +152,13 @@ # Process the object and remove it from the list of requests. - if reply and handler.process_received_request(update): + if reply and handler.process_received_request(): self.remove_request(uid, recurrenceid) elif self.is_organiser(obj) and (invite or cancel): if handler.process_created_request( - invite and "REQUEST" or "CANCEL", update, to_cancel): + invite and "REQUEST" or "CANCEL", to_cancel): self.remove_request(uid, recurrenceid) @@ -440,10 +443,8 @@ attendees = self.get_current_attendees(obj) is_attendee = self.user in attendees - is_request = (obj.get_value("UID"), obj.get_value("RECURRENCE-ID")) in self._get_requests() - - have_other_attendees = len(attendees) > (is_attendee and 1 or 0) + sequence = obj.get_value("SEQUENCE") # Show appropriate options depending on the role of the user. @@ -461,25 +462,18 @@ if self.is_organiser(obj): page.p("As organiser, you can perform the following:") - if have_other_attendees: - page.p() - page.input(name="invite", type="submit", value="Invite/notify attendees") - page.add(" ") - if is_request: - page.input(name="discard", type="submit", value="Discard event") - else: - page.input(name="cancel", type="submit", value="Cancel event") - page.add(" ") - page.input(name="ignore", type="submit", value="Do nothing for now") - page.p.close() + page.p() + page.input(name="create", type="submit", value=(sequence is None and "Create event" or "Update event")) + page.add(" ") + + if sequence is not None and not is_request: + page.input(name="cancel", type="submit", value="Cancel event") else: - page.p() - page.input(name="save", type="submit", value="Save event") - page.add(" ") page.input(name="discard", type="submit", value="Discard event") - page.add(" ") - page.input(name="ignore", type="submit", value="Do nothing for now") - page.p.close() + + page.add(" ") + page.input(name="ignore", type="submit", value="Do nothing for now") + page.p.close() def show_object_on_page(self, uid, obj, errors=None): diff -r e27047468298 -r 904fc8d3a5e9 imipweb/handler.py --- a/imipweb/handler.py Tue Apr 07 22:30:06 2015 +0200 +++ b/imipweb/handler.py Tue Apr 07 23:16:35 2015 +0200 @@ -101,14 +101,11 @@ # Action methods. - def process_received_request(self, update=False): + def process_received_request(self): """ Process the current request for the given 'user'. Return whether any action was taken. - - If 'update' is given, the sequence number will be incremented in order - to override any previous response. """ # Reply only on behalf of this user. @@ -123,7 +120,7 @@ self.obj["ATTENDEE"] = [(attendee, attendee_attr)] self.update_dtstamp() - self.set_sequence(update) + self.set_sequence(False) self.send_message("REPLY", get_address(attendee), from_organiser=False) @@ -131,15 +128,12 @@ return False - def process_created_request(self, method, update=False, to_cancel=None): + def process_created_request(self, method, to_cancel=None): """ Process the current request, sending a created request of the given 'method' to attendees. Return whether any action was taken. - If 'update' is given, the sequence number will be incremented in order - to override any previous message. - If 'to_cancel' is specified, a list of participants to be sent cancel messages is provided. """ @@ -150,7 +144,7 @@ organiser_attr["SENT-BY"] = get_uri(self.messenger.sender) self.update_dtstamp() - self.set_sequence(update) + self.set_sequence(True) self.send_message(method, get_address(organiser), from_organiser=True)