1.1 --- a/imip_manager.py Wed Feb 04 19:13:22 2015 +0100
1.2 +++ b/imip_manager.py Wed Feb 04 19:18:36 2015 +0100
1.3 @@ -474,6 +474,11 @@
1.4 if args.has_key("summary"):
1.5 obj["SUMMARY"] = [(args["summary"][0], {})]
1.6
1.7 + if args.has_key("partstat"):
1.8 + attendees = obj.get_value_map("ATTENDEE")
1.9 + if attendees.has_key(self.user):
1.10 + attendees[self.user]["PARTSTAT"] = args["partstat"][0]
1.11 +
1.12 # Process any action.
1.13
1.14 accept = args.has_key("accept")
1.15 @@ -481,6 +486,7 @@
1.16 discard = args.has_key("discard")
1.17 invite = args.has_key("invite")
1.18 cancel = args.has_key("cancel")
1.19 + save = args.has_key("save")
1.20 update = not queued and args.has_key("update")
1.21
1.22 if accept or decline or invite or cancel:
1.23 @@ -494,10 +500,16 @@
1.24
1.25 self.remove_request(uid)
1.26
1.27 - elif discard:
1.28 + # Save single user events.
1.29
1.30 - # Remove the request and the object.
1.31 + elif save:
1.32 + self.store.set_event(self.user, uid, obj.to_node())
1.33 + freebusy = self.store.get_freebusy(self.user)
1.34 + self.remove_request(uid)
1.35
1.36 + # Remove the request and the object.
1.37 +
1.38 + elif discard:
1.39 self.remove_event(uid)
1.40 self.remove_request(uid)
1.41
1.42 @@ -529,7 +541,11 @@
1.43 is_attendee = attendees.has_key(self.user)
1.44 attendee_attr = attendees.get(self.user)
1.45
1.46 - if is_attendee:
1.47 + have_other_attendees = len(attendees) > (is_attendee and 1 or 0)
1.48 +
1.49 + # Show appropriate options depending on the role of the user.
1.50 +
1.51 + if is_attendee and not is_organiser:
1.52 partstat = attendee_attr.get("PARTSTAT")
1.53 if partstat == "ACCEPTED":
1.54 page.p("This request has been accepted.")
1.55 @@ -538,9 +554,6 @@
1.56 else:
1.57 page.p("This request has not yet been dealt with.")
1.58
1.59 - # Show appropriate options depending on the role of the user.
1.60 -
1.61 - if is_attendee:
1.62 if needs_update:
1.63 page.p("This request can be updated as follows:")
1.64 else:
1.65 @@ -555,16 +568,21 @@
1.66 page.p.close()
1.67
1.68 if is_organiser:
1.69 - if needs_update:
1.70 - page.p("As organiser, you can perform the following:")
1.71 - else:
1.72 - page.p("As organiser, you will need to perform an action:")
1.73 + if have_other_attendees:
1.74 + if needs_update:
1.75 + page.p("As organiser, you can perform the following:")
1.76 + else:
1.77 + page.p("As organiser, you will need to perform an action:")
1.78
1.79 - page.p()
1.80 - page.input(name="invite", type="submit", value="Invite")
1.81 - page.add(" ")
1.82 - page.input(name="cancel", type="submit", value="Cancel")
1.83 - page.p.close()
1.84 + page.p()
1.85 + page.input(name="invite", type="submit", value="Invite")
1.86 + page.add(" ")
1.87 + page.input(name="cancel", type="submit", value="Cancel")
1.88 + page.p.close()
1.89 + else:
1.90 + page.p()
1.91 + page.input(name="save", type="submit", value="Save")
1.92 + page.p.close()
1.93
1.94 # Updated objects need to have details updated upon sending.
1.95
1.96 @@ -579,6 +597,12 @@
1.97 "ATTENDEE" : "Attendee",
1.98 }
1.99
1.100 + partstat_items = [
1.101 + ("NEEDS-ACTION", "Not confirmed"),
1.102 + ("ACCEPTED", "Attending"),
1.103 + ("DECLINED", "Not attending"),
1.104 + ]
1.105 +
1.106 def show_object_on_page(self, uid, obj, needs_update):
1.107
1.108 """
1.109 @@ -653,7 +677,7 @@
1.110 if name == "ATTENDEE":
1.111 partstat = attr.get("PARTSTAT")
1.112 if partstat:
1.113 - page.add(" (%s)" % partstat)
1.114 + self._show_menu("partstat", partstat, self.partstat_items)
1.115
1.116 page.td.close()
1.117 page.tr.close()
1.118 @@ -1220,6 +1244,17 @@
1.119 identifier = "slot-%s" % value
1.120 return value, identifier
1.121
1.122 + def _show_menu(self, name, value, items):
1.123 + page = self.page
1.124 + values = self.env.get_args().get(name, [value])
1.125 + page.select(name=name)
1.126 + for v, label in items:
1.127 + if v in values:
1.128 + page.option(label, value=v, selected="selected")
1.129 + else:
1.130 + page.option(label, value=v)
1.131 + page.select.close()
1.132 +
1.133 # Incoming HTTP request direction.
1.134
1.135 def select_action(self):