def accept_invite(request, game_id): game = get_object_or_404(Game, id=game_id) if not game.player_can_rsvp(request.user): raise PermissionDenied(game.reason_player_cannot_rsvp(request.user)) invite = get_object_or_none( request.user.game_invite_set.filter(relevant_game=game.id)) if request.method == 'POST': if not invite: # player self-invite invite = Game_Invite(invited_player=request.user, relevant_game=game) if game.scenario in request.user.scenario_set.all(): invite.as_ringer = True form = make_accept_invite_form(invite)(request.POST) if form.is_valid(): game_attendance = invite.attendance with transaction.atomic(): invite.save() if game_attendance: game_attendance.attending_character = form.cleaned_data[ 'attending_character'] game_attendance.save() else: game_attendance = Game_Attendance( attending_character=form. cleaned_data['attending_character'], relevant_game=game, ) game_attendance.save() invite.is_declined = False invite.attendance = game_attendance invite.save() if invite.as_ringer and not form.cleaned_data[ 'attending_character']: #Reveal scenario to ringer game.scenario.played_discovery(request.user) return HttpResponseRedirect( reverse('games:games_view_game', args=(game.id, ))) else: print(form.errors) return None else: can_view_scenario = False if request.user.has_perm("view_scenario", game.scenario): can_view_scenario = True # Build a accept form. if not invite: # if game is open for self-invites, make a temp invite that we don't save so we can make a form invite = Game_Invite(invited_player=request.user, relevant_game=game) if game.scenario in request.user.scenario_set.all(): invite.as_ringer = True form = make_accept_invite_form(invite) context = { 'form': form, 'game': game, 'invite': invite, 'can_view_scenario': can_view_scenario, } return render(request, 'games/accept_invite.html', context)
def accept_invite(request, game_id): if not request.user.is_authenticated or request.user.is_anonymous: raise PermissionDenied("You must log in to accept this Game invite") game = get_object_or_404(Game, id=game_id) if not game.is_scheduled( ) or game.creator.id == request.user.id or game.gm.id == request.user.id: raise PermissionDenied( "This Game has already started, or you're the GM!") invite = get_object_or_none( request.user.game_invite_set.filter(relevant_game=game)) if not invite and not game.open_invitations: raise PermissionDenied( "This is awkward. . . You, uh, haven't been invited to this Game") if request.method == 'POST': if not invite: # player self-invite invite = Game_Invite(invited_player=request.user, relevant_game=game) if game.scenario in request.user.scenario_set.all(): invite.as_ringer = True form = make_accept_invite_form(invite)(request.POST) if form.is_valid(): game_attendance = invite.attendance with transaction.atomic(): invite.save() if game_attendance: game_attendance.attending_character = form.cleaned_data[ 'attending_character'] game_attendance.save() else: game_attendance = Game_Attendance( attending_character=form. cleaned_data['attending_character'], relevant_game=game, ) game_attendance.save() invite.is_declined = False invite.attendance = game_attendance invite.save() if invite.as_ringer and not form.cleaned_data[ 'attending_character']: #Reveal scenario to ringer game.scenario.played_discovery(request.user) return HttpResponseRedirect( reverse('games:games_view_game', args=(game.id, ))) else: print(form.errors) return None else: can_view_scenario = False if request.user.has_perm("view_scenario", game.scenario): can_view_scenario = True # Build a accept form. if not invite: # if game is open for self-invites, make a temp invite that we don't save so we can make a form invite = Game_Invite(invited_player=request.user, relevant_game=game) if game.scenario in request.user.scenario_set.all(): invite.as_ringer = True form = make_accept_invite_form(invite) context = { 'form': form, 'game': game, 'invite': invite, 'can_view_scenario': can_view_scenario, } return render(request, 'games/accept_invite.html', context)