From 596f03c0d16b96cf327099e40e09d19e24ad0d19 Mon Sep 17 00:00:00 2001 From: Ben Adida <ben@adida.net> Date: Wed, 27 Oct 2010 21:44:09 -0700 Subject: [PATCH] made sure user can reload cast_done without any trouble --- helios/templates/cast_done.html | 2 +- helios/views.py | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/helios/templates/cast_done.html b/helios/templates/cast_done.html index 6c0faa4..a6dbf96 100644 --- a/helios/templates/cast_done.html +++ b/helios/templates/cast_done.html @@ -10,7 +10,7 @@ <p> Your smart ballot tracker is:<br /><br /> - <tt style="font-size:1.8em; font-weight: bold; padding-left: 20px;"> {{last_vote.vote_hash}}</tt> + <tt style="font-size:1.8em; font-weight: bold; padding-left: 20px;"> {{vote_hash}}</tt> </p> {% if logout %} diff --git a/helios/views.py b/helios/views.py index 3a1819d..c15635b 100644 --- a/helios/views.py +++ b/helios/views.py @@ -551,11 +551,24 @@ def one_election_cast_confirm(request, election): @election_view() def one_election_cast_done(request, election): + """ + This view needs to be loaded because of the IFRAME, but then this causes + problems if someone clicks "reload". So we need a strategy. + We store the ballot hash in the session + """ user = get_user(request) - voter = Voter.get_by_election_and_user(election, user) - votes = CastVote.get_by_voter(voter) - logout = settings.LOGOUT_ON_CONFIRMATION + if user: + voter = Voter.get_by_election_and_user(election, user) + votes = CastVote.get_by_voter(voter) + vote_hash = votes[0].vote_hash + + logout = settings.LOGOUT_ON_CONFIRMATION + + save_in_session_across_logouts(request, 'last_vote_hash', vote_hash) + else: + vote_hash = request.session['last_vote_hash'] + logout = False # local logout ensures that there's no more # user locally @@ -565,7 +578,7 @@ def one_election_cast_done(request, election): # auth_views.do_local_logout(request) # remote logout is happening asynchronously in an iframe to be modular given the logout mechanism - return render_template(request, 'cast_done', {'election': election, 'last_vote': votes[0], 'logout': logout}, include_user=False) + return render_template(request, 'cast_done', {'election': election, 'vote_hash': vote_hash, 'logout': logout}, include_user=False) @election_view() @json -- GitLab