1.1 --- a/imiptools/client.py Sat Oct 24 16:12:06 2015 +0200
1.2 +++ b/imiptools/client.py Sat Oct 24 17:14:59 2015 +0200
1.3 @@ -787,8 +787,19 @@
1.4 # Use any attendee property information for an organiser, not the
1.5 # organiser property attributes.
1.6
1.7 - attr = self.get_attendance(user, obj=obj)
1.8 - return as_organiser or attr is not None and not attr or attr and attr.get("PARTSTAT") != "DECLINED"
1.9 + attr = self.get_attendance(user, obj)
1.10 + return as_organiser or attr is not None and not attr or attr and attr.get("PARTSTAT") not in ("DECLINED", "NEEDS-ACTION")
1.11 +
1.12 + def has_indicated_attendance(self, user=None, obj=None):
1.13 +
1.14 + """
1.15 + Return whether the given 'user' (or the current user if not specified)
1.16 + has indicated attendance in the given 'obj' (or the current object if
1.17 + not specified).
1.18 + """
1.19 +
1.20 + attr = self.get_attendance(user, obj)
1.21 + return attr and attr.get("PARTSTAT") not in (None, "NEEDS-ACTION")
1.22
1.23 def get_overriding_transparency(self, user, as_organiser=False):
1.24
2.1 --- a/imiptools/handlers/person_outgoing.py Sat Oct 24 16:12:06 2015 +0200
2.2 +++ b/imiptools/handlers/person_outgoing.py Sat Oct 24 17:14:59 2015 +0200
2.3 @@ -128,7 +128,8 @@
2.4
2.5 # Remove any associated request.
2.6
2.7 - self.store.dequeue_request(self.user, self.uid, self.recurrenceid)
2.8 + if from_organiser or self.has_indicated_attendance():
2.9 + self.store.dequeue_request(self.user, self.uid, self.recurrenceid)
2.10 self.store.remove_counters(self.user, self.uid, self.recurrenceid)
2.11
2.12 # Update free/busy information.
3.1 --- a/imipweb/event.py Sat Oct 24 16:12:06 2015 +0200
3.2 +++ b/imipweb/event.py Sat Oct 24 17:14:59 2015 +0200
3.3 @@ -877,7 +877,8 @@
3.4 # Process the object and remove it from the list of requests.
3.5
3.6 if reply and self.process_received_request(changed):
3.7 - self.remove_request()
3.8 + if self.has_indicated_attendance():
3.9 + self.remove_request()
3.10
3.11 elif self.is_organiser() and (invite or cancel):
3.12