From c53ed78d2b2f29209d7fccc4cd850b1af4b275fa Mon Sep 17 00:00:00 2001 From: Robert Morell Date: Mon, 21 May 2012 22:48:50 -0700 Subject: [PATCH 1/3] Disallow extending time on closed polls Otherwise you can reopen a closed poll and change the result. --- models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models.py b/models.py index f50e82f..842a4af 100644 --- a/models.py +++ b/models.py @@ -59,6 +59,8 @@ def register_vote(self,choice,member=None): def extend_duration(self,hours): if hours <= 0: raise Exception('Negative extensions are not valid.') + if self.has_results: + raise Exception('Cannot extend closed polls.') self.duration += hours if self.start_time: self.end_time = self.start_time + timedelta(hours=self.duration) From 5782599e7e733c86d0c33788dae8cc2c1bd70452 Mon Sep 17 00:00:00 2001 From: Robert Morell Date: Mon, 21 May 2012 22:56:28 -0700 Subject: [PATCH 2/3] Disallow voting in closed polls --- models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models.py b/models.py index 842a4af..fa90eca 100644 --- a/models.py +++ b/models.py @@ -40,6 +40,8 @@ def vote_for_member(self,member=None): return self.votes.filter('member =',member).get() def register_vote(self,choice,member=None): + if self.has_results: + raise Exception('Cannot vote in closed polls.') if not member: member = users.get_current_user() member_vote = self.vote_for_member(member) From 960ad87711285eee3cf44663d2c19a2d769d2212 Mon Sep 17 00:00:00 2001 From: Robert Morell Date: Mon, 21 May 2012 22:56:48 -0700 Subject: [PATCH 3/3] Update status when querying Otherwise the status is only updated when the issues page is viewed. This fixes a race condition where the issue may have been closed but the status won't reflect that and may still allow updates. --- models.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/models.py b/models.py index fa90eca..63305fe 100644 --- a/models.py +++ b/models.py @@ -80,9 +80,11 @@ def hours_left(self): return hours def is_active(self): + self.update_status() return self.status in ('active') def has_results(self): + self.update_status() return self.status in ('done') def member_is_creator(self,member=None):