Allow players to retract their vote on a team. ()

Closes .
This commit is contained in:
Daniel Perelman 2016-09-18 01:03:20 -07:00 committed by GitHub
parent e8c21182b1
commit 6740b8e3fc
3 changed files with 32 additions and 23 deletions
avalon/avalon_game

View File

@ -31,10 +31,13 @@
<button type="submit" formaction="{% url 'retract_team' access_code=access_code player_secret=player_secret round_num=round_num vote_num=vote_num %}" class="button-cancel">Change team</button>
</div>
{% endif %}
</form>
{% if player_vote %}
<p>You are voting: {{ player_vote }}</p>
<div class="button-container">
<button type="submit" formaction="{% url 'vote' access_code=access_code player_secret=player_secret round_num=round_num vote_num=vote_num vote='cancel' %}" class="button-cancel-vote">Retract vote</button>
</div>
</form>
{% endif %}
{% endblock %}

View File

@ -17,7 +17,7 @@ urlpatterns = [
url(r'^ready/$', views.ready, name='ready'),
url(r'^cancel_game/$', views.cancel_game, name='cancel_game'),
url(r'^(?P<round_num>[1-5])/(?P<vote_num>[1-5])/', include([
url(r'^vote/(?P<vote>(approve|reject))/$', views.vote, name='vote'),
url(r'^vote/(?P<vote>(approve|reject|cancel))/$', views.vote, name='vote'),
url(r'^choose/(?P<who>[0-9])/$', views.choose, name='choose'),
url(r'^unchoose/(?P<who>[0-9])/$', views.unchoose, name='unchoose'),
url(r'^finalize_team/$', views.finalize_team, name='finalize_team'),

View File

@ -483,28 +483,34 @@ def vote(request, game, player, round_num, vote_num, vote):
if vote_round.vote_status == VoteRound.VOTE_STATUS_VOTING\
and vote_round.game_round.round_num == round_num\
and vote_round.vote_num == vote_num:
accept = vote == "approve"
vote_round.playervote_set\
.update_or_create(defaults={'accept': accept},
player=player)
team_approved = vote_round.team_approved()
if team_approved is not None:
# All players voted, voting round is over.
vote_round.vote_status = VoteRound.VOTE_STATUS_VOTED
vote_round.save()
if team_approved:
# Team was approved
game.game_phase = Game.GAME_PHASE_MISSION
else:
# Team was rejected
if vote_round.is_final_vote():
game.game_phase = Game.GAME_PHASE_END
if vote == "cancel":
try:
vote_round.playervote_set.get(player=player).delete()
except PlayerVote.DoesNotExist:
pass
else:
accept = vote == "approve"
vote_round.playervote_set\
.update_or_create(defaults={'accept': accept},
player=player)
team_approved = vote_round.team_approved()
if team_approved is not None:
# All players voted, voting round is over.
vote_round.vote_status = VoteRound.VOTE_STATUS_VOTED
vote_round.save()
if team_approved:
# Team was approved
game.game_phase = Game.GAME_PHASE_MISSION
else:
game.game_phase = Game.GAME_PHASE_PICK
VoteRound.objects\
.create(game_round=vote_round.game_round,
vote_num=vote_round.vote_num+1,
leader=vote_round.next_leader())
# Team was rejected
if vote_round.is_final_vote():
game.game_phase = Game.GAME_PHASE_END
else:
game.game_phase = Game.GAME_PHASE_PICK
VoteRound.objects\
.create(game_round=vote_round.game_round,
vote_num=vote_round.vote_num+1,
leader=vote_round.next_leader())
game.save()
return redirect('game', access_code=game.access_code,