# HG changeset patch # User Paul Boddie # Date 1423058655 -3600 # Node ID 08b8165ad45e13212609a3e62eae9393a1655e25 # Parent 1c2242bd5de420d3cda24131907df086b1076595 Permit users to be both organisers and attendees of the same event. diff -r 1c2242bd5de4 -r 08b8165ad45e imip_manager.py --- a/imip_manager.py Wed Feb 04 14:53:47 2015 +0100 +++ b/imip_manager.py Wed Feb 04 15:04:15 2015 +0100 @@ -124,16 +124,18 @@ # Communication methods. - def send_message(self, method, sender): + def send_message(self, method, sender, for_organiser): """ Create a full calendar object employing the given 'method', and send it - to the appropriate recipients, also sending a copy to the 'sender'. + to the appropriate recipients, also sending a copy to the 'sender'. The + 'for_organiser' value indicates whether the organiser is sending this + message. """ parts = [self.obj.to_part(method)] - if self.user == self.organiser: + if for_organiser: recipients = map(get_address, self.attendees) else: recipients = [get_address(self.organiser)] @@ -184,7 +186,7 @@ self.obj["SEQUENCE"] = [(str(int(sequence) + 1), {})] self.update_dtstamp() - self.send_message("REPLY", get_address(attendee)) + self.send_message("REPLY", get_address(attendee), for_organiser=False) return True @@ -209,7 +211,7 @@ self.obj["SEQUENCE"] = [(str(int(sequence) + 1), {})] self.update_dtstamp() - self.send_message("REQUEST", get_address(self.organiser)) + self.send_message("REQUEST", get_address(self.organiser), for_organiser=True) return True @@ -443,8 +445,7 @@ if not participant: continue participant = get_uri(participant) - if participant != self.user: - rwrite(("ATTENDEE", {}, participant)) + rwrite(("ATTENDEE", {"RSVP" : "TRUE", "PARTSTAT" : "NEEDS-ACTION"}, participant)) obj = ("VEVENT", {}, record) @@ -521,18 +522,18 @@ is_organiser = obj.get_value("ORGANIZER") == self.user - if not is_organiser: - attendees = obj.get_value_map("ATTENDEE") - attendee_attr = attendees.get(self.user) + attendees = obj.get_value_map("ATTENDEE") + is_attendee = attendees.has_key(self.user) + attendee_attr = attendees.get(self.user) - if attendee_attr: - partstat = attendee_attr.get("PARTSTAT") - if partstat == "ACCEPTED": - page.p("This request has been accepted.") - elif partstat == "DECLINED": - page.p("This request has been declined.") - else: - page.p("This request has not yet been dealt with.") + if is_attendee: + partstat = attendee_attr.get("PARTSTAT") + if partstat == "ACCEPTED": + page.p("This request has been accepted.") + elif partstat == "DECLINED": + page.p("This request has been declined.") + else: + page.p("This request has not yet been dealt with.") if needs_action: page.p("An action is required for this request:") @@ -545,7 +546,8 @@ if is_organiser: page.input(name="invite", type="submit", value="Invite") - else: + + if is_attendee: page.input(name="accept", type="submit", value="Accept") page.add(" ") page.input(name="decline", type="submit", value="Decline")