コード例 #1
0
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)
コード例 #2
0
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)