1.1 --- a/imip_manager.py Mon Feb 09 23:30:01 2015 +0100
1.2 +++ b/imip_manager.py Tue Feb 10 00:40:51 2015 +0100
1.3 @@ -138,9 +138,6 @@
1.4
1.5 self.set_object(obj)
1.6
1.7 - self.organiser = self.obj.get_value("ORGANIZER")
1.8 - self.attendees = self.obj.get_values("ATTENDEE")
1.9 -
1.10 # Communication methods.
1.11
1.12 def send_message(self, method, sender, for_organiser):
1.13 @@ -158,10 +155,13 @@
1.14 # also attending. The updated event will be saved by the outgoing
1.15 # handler.
1.16
1.17 + organiser = self.obj.get_value("ORGANIZER")
1.18 + attendees = self.obj.get_values("ATTENDEE")
1.19 +
1.20 if for_organiser:
1.21 - recipients = [get_address(attendee) for attendee in self.attendees if attendee != self.user]
1.22 + recipients = [get_address(attendee) for attendee in attendees if attendee != self.user]
1.23 else:
1.24 - recipients = [get_address(self.organiser)]
1.25 + recipients = [get_address(organiser)]
1.26
1.27 # Bundle free/busy information if appropriate.
1.28
1.29 @@ -228,7 +228,7 @@
1.30
1.31 return False
1.32
1.33 - def process_created_request(self, method, update=False):
1.34 + def process_created_request(self, method, update=False, removed=None):
1.35
1.36 """
1.37 Process the current request for the given 'user', sending a created
1.38 @@ -237,6 +237,9 @@
1.39
1.40 If 'update' is given, the sequence number will be incremented in order
1.41 to override any previous message.
1.42 +
1.43 + If 'removed' is specified, a list of participants to be removed is
1.44 + provided.
1.45 """
1.46
1.47 organiser, organiser_attr = self.obj.get_item("ORGANIZER")
1.48 @@ -244,10 +247,17 @@
1.49 if self.messenger and self.messenger.sender != get_address(organiser):
1.50 organiser_attr["SENT-BY"] = get_uri(self.messenger.sender)
1.51
1.52 + if removed:
1.53 + attendee_map = self.obj.get_value_map("ATTENDEE")
1.54 + self.obj["ATTENDEE"] = [(attendee, attendee_attr)
1.55 + for (attendee, attendee_attr) in attendee_map.items()
1.56 + if attendee not in removed]
1.57 +
1.58 self.update_dtstamp()
1.59 self.set_sequence(update)
1.60
1.61 - self.send_message(method, get_address(self.organiser), for_organiser=True)
1.62 + self.send_message(method, get_address(organiser), for_organiser=True)
1.63 +
1.64 return True
1.65
1.66 class Manager(Common):
1.67 @@ -508,9 +518,10 @@
1.68 if args.has_key("summary"):
1.69 obj["SUMMARY"] = [(args["summary"][0], {})]
1.70
1.71 + organisers = obj.get_value_map("ORGANIZER")
1.72 + attendees = obj.get_value_map("ATTENDEE")
1.73 +
1.74 if args.has_key("partstat"):
1.75 - organisers = obj.get_value_map("ORGANIZER")
1.76 - attendees = obj.get_value_map("ATTENDEE")
1.77 for d in attendees, organisers:
1.78 if d.has_key(self.user):
1.79 d[self.user]["PARTSTAT"] = args["partstat"][0]
1.80 @@ -519,6 +530,10 @@
1.81
1.82 is_organiser = obj.get_value("ORGANIZER") == self.user
1.83
1.84 + # Obtain any participants to be removed.
1.85 +
1.86 + removed = args.get("remove")
1.87 +
1.88 # Obtain the user's timezone and process datetime values.
1.89
1.90 update = False
1.91 @@ -572,7 +587,8 @@
1.92 # Process the object and remove it from the list of requests.
1.93
1.94 if reply and handler.process_received_request(update) or \
1.95 - (invite or cancel) and handler.process_created_request(invite and "REQUEST" or "CANCEL", update):
1.96 + is_organiser and (invite or cancel) and \
1.97 + handler.process_created_request(invite and "REQUEST" or "CANCEL", update, removed):
1.98
1.99 self.remove_request(uid)
1.100
1.101 @@ -862,7 +878,7 @@
1.102
1.103 first = True
1.104
1.105 - for value, attr in items:
1.106 + for i, (value, attr) in enumerate(items):
1.107 if not first:
1.108 page.tr()
1.109 else:
1.110 @@ -878,6 +894,12 @@
1.111 self._show_menu("partstat", partstat, self.partstat_items)
1.112 else:
1.113 page.span(dict(self.partstat_items).get(partstat, ""), class_="partstat")
1.114 +
1.115 + if is_organiser and name == "ATTENDEE":
1.116 + page.input(name="remove", type="checkbox", value=value, id="remove-%d" % i, class_="remove")
1.117 + page.label("Remove", for_="remove-%d" % i, class_="remove")
1.118 + page.label("Uninvited", for_="remove-%d" % i, class_="removed")
1.119 +
1.120 else:
1.121 page.td(class_="objectattribute")
1.122 page.add(value)