# HG changeset patch # User Paul Boddie # Date 1423073916 -3600 # Node ID e7bb28ae6781ccbecb6aee6918d6a5c7320d5233 # Parent ac813723ed7128daf7eb0c200c0328fb61603970 Added some support for saving single user events, although free/busy information should also be generated. diff -r ac813723ed71 -r e7bb28ae6781 imip_manager.py --- a/imip_manager.py Wed Feb 04 19:13:22 2015 +0100 +++ b/imip_manager.py Wed Feb 04 19:18:36 2015 +0100 @@ -474,6 +474,11 @@ if args.has_key("summary"): obj["SUMMARY"] = [(args["summary"][0], {})] + if args.has_key("partstat"): + attendees = obj.get_value_map("ATTENDEE") + if attendees.has_key(self.user): + attendees[self.user]["PARTSTAT"] = args["partstat"][0] + # Process any action. accept = args.has_key("accept") @@ -481,6 +486,7 @@ discard = args.has_key("discard") invite = args.has_key("invite") cancel = args.has_key("cancel") + save = args.has_key("save") update = not queued and args.has_key("update") if accept or decline or invite or cancel: @@ -494,10 +500,16 @@ self.remove_request(uid) - elif discard: + # Save single user events. - # Remove the request and the object. + elif save: + self.store.set_event(self.user, uid, obj.to_node()) + freebusy = self.store.get_freebusy(self.user) + self.remove_request(uid) + # Remove the request and the object. + + elif discard: self.remove_event(uid) self.remove_request(uid) @@ -529,7 +541,11 @@ is_attendee = attendees.has_key(self.user) attendee_attr = attendees.get(self.user) - if is_attendee: + have_other_attendees = len(attendees) > (is_attendee and 1 or 0) + + # Show appropriate options depending on the role of the user. + + if is_attendee and not is_organiser: partstat = attendee_attr.get("PARTSTAT") if partstat == "ACCEPTED": page.p("This request has been accepted.") @@ -538,9 +554,6 @@ else: page.p("This request has not yet been dealt with.") - # Show appropriate options depending on the role of the user. - - if is_attendee: if needs_update: page.p("This request can be updated as follows:") else: @@ -555,16 +568,21 @@ page.p.close() if is_organiser: - if needs_update: - page.p("As organiser, you can perform the following:") - else: - page.p("As organiser, you will need to perform an action:") + if have_other_attendees: + if needs_update: + page.p("As organiser, you can perform the following:") + else: + page.p("As organiser, you will need to perform an action:") - page.p() - page.input(name="invite", type="submit", value="Invite") - page.add(" ") - page.input(name="cancel", type="submit", value="Cancel") - page.p.close() + page.p() + page.input(name="invite", type="submit", value="Invite") + page.add(" ") + page.input(name="cancel", type="submit", value="Cancel") + page.p.close() + else: + page.p() + page.input(name="save", type="submit", value="Save") + page.p.close() # Updated objects need to have details updated upon sending. @@ -579,6 +597,12 @@ "ATTENDEE" : "Attendee", } + partstat_items = [ + ("NEEDS-ACTION", "Not confirmed"), + ("ACCEPTED", "Attending"), + ("DECLINED", "Not attending"), + ] + def show_object_on_page(self, uid, obj, needs_update): """ @@ -653,7 +677,7 @@ if name == "ATTENDEE": partstat = attr.get("PARTSTAT") if partstat: - page.add(" (%s)" % partstat) + self._show_menu("partstat", partstat, self.partstat_items) page.td.close() page.tr.close() @@ -1220,6 +1244,17 @@ identifier = "slot-%s" % value return value, identifier + def _show_menu(self, name, value, items): + page = self.page + values = self.env.get_args().get(name, [value]) + page.select(name=name) + for v, label in items: + if v in values: + page.option(label, value=v, selected="selected") + else: + page.option(label, value=v) + page.select.close() + # Incoming HTTP request direction. def select_action(self):