Exemplo n.º 1
0
def delete_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id)
    is_quest_organizer(request, quest)
    quest.delete()
    if quest.parent:
        return redirect('coordination:quest_lines', quest_id=quest.parent.id)
    else:
        return redirect('coordination:quests')
Exemplo n.º 2
0
def delete_player(request, quest_id, user_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    user = get_object_or_404(User, pk=user_id)
    member = get_object_or_404(Membership, quest=quest, user=user)
    if member.player:
        user.delete()
    return redirect('coordination:quest_players', quest_id=quest_id)
Exemplo n.º 3
0
def create_finish_mission(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, type=Quest.LINE_NONLINEAR)
    if quest.not_started:
        is_quest_organizer(request, quest)
        finish = Mission.objects.create(quest=quest, name_in_table='Финиш', order_number=1, is_finish=True)
        Mission.update_finish_number(quest)
        return redirect('coordination:mission_detail', mission_id=finish.id)
    return redirect('coordination:quest_missions', quest_id=quest.pk)
Exemplo n.º 4
0
def delete_players(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    player_ids = request.POST.getlist('delete_ids[]')
    users = User.objects.filter(id__in=player_ids)
    for user in users:
        member = Membership.players.filter(quest=quest, user=user).first()
        if member and member.player:
            user.delete()
    return redirect('coordination:quest_players', quest_id=quest_id)
Exemplo n.º 5
0
def begin_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    quest.begin()
    if quest.multilinear:
        players = quest.players()
        lines = quest.lines()
        for line in lines:
            first_mission = line.missions().first()
            for player in players:
                CurrentMission.objects.create(player=player, mission=first_mission)
    return redirect('coordination:quest_control', quest_id=quest_id)
Exemplo n.º 6
0
def clear_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    if quest.not_started:
        if quest.multilinear:
            lines = quest.lines()
            CurrentMission.objects.filter(mission__quest__in=lines).delete()
            Keylog.objects.filter(mission__quest__in=lines).delete()
        else:
            start_mission = quest.start_mission()
            CurrentMission.objects.filter(mission__quest=quest).update(mission=start_mission)
            Keylog.objects.filter(mission__quest=quest).delete()
    return redirect('coordination:quest_control', quest_id=quest_id)
Exemplo n.º 7
0
def next_mission(request, quest_id, user_id):
    quest = get_object_or_404(Quest, pk=quest_id)
    is_quest_organizer(request, quest)
    if quest.linear and quest.started:
        player = get_object_or_404(User, pk=user_id)
        cm = get_object_or_404(CurrentMission, mission__quest=quest, player=player)
        if not cm.mission.is_finish:
            right_key = cm.mission.key
            keylog = Keylog(key=right_key, fix_time=timezone.now(), player=player, mission=cm.mission, is_right=True)
            cm.mission = Mission.objects.get(quest=quest, order_number=cm.mission.order_number + 1)
            cm.start_time = keylog.fix_time
            keylog.save()
            cm.save()
    return redirect('coordination:quest_control', quest_id=quest_id)
Exemplo n.º 8
0
def delete_mission(request, mission_id):
    mission = get_object_or_404(Mission, pk=mission_id)
    quest = mission.quest
    if not quest.started:
        is_quest_organizer(request, quest)
        if quest.linear or quest.nonlinear:
            if not mission.is_start and not mission.is_finish:
                mission.delete()
                Mission.update_finish_number(quest)
        else:
            if not mission.is_start:
                mission.delete()
                Mission.update_finish_number(quest)
    return redirect('coordination:quest_missions', quest_id=quest.pk)
Exemplo n.º 9
0
def detail_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    if not quest.published:
        request = is_quest_organizer(request, quest)
    organizers = quest.organizers()
    context = {'quest': quest, 'organizers': organizers}
    return render(request, 'coordination/quests/detail.html', context)
Exemplo n.º 10
0
def detail_line(request, quest_id, line_id):
    quest = get_object_or_404(Quest, pk=quest_id, type=Quest.MULTILINEAR)
    if not quest.published:
        request = is_quest_organizer(request, quest)
    line = get_object_or_404(Quest, pk=line_id, parent=quest)
    missions = line.missions()
    context = {'quest': quest, 'line': line, 'missions': missions}
    return render(request, 'coordination/missions/line_detail.html', context)
Exemplo n.º 11
0
def edit_hint(request, hint_id):
    hint = get_object_or_404(Hint, pk=hint_id)
    request = is_quest_organizer(request, hint.mission.quest)
    if request.method == "POST":
        form = HintForm(request.POST, instance=hint)
        if form.is_valid():
            form.save()
            return redirect('coordination:mission_detail', mission_id=hint.mission.id)
    else:
        form = HintForm(instance=hint)
    context = {'form': form}
    return render(request, 'coordination/hints/form.html', context)
Exemplo n.º 12
0
def edit_mission(request, mission_id):
    mission = get_object_or_404(Mission, pk=mission_id)
    request = is_quest_organizer(request, mission.quest)
    if request.method == "POST":
        form = MissionForm(request.POST, request.FILES, instance=mission)
        if form.is_valid():
            form.save()
            return redirect('coordination:mission_detail', mission_id=mission_id)
    else:
        form = MissionForm(instance=mission)
    context = {'form': form}
    return render(request, 'coordination/missions/form.html', context)
Exemplo n.º 13
0
def edit_message(request, quest_id, message_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    message = get_object_or_404(Message, pk=message_id)
    if request.method == "POST":
        form = MessageForm(request.POST, instance=message)
        if form.is_valid():
            form.save()
            return redirect('coordination:quest_messages', quest_id=quest_id)
    else:
        form = MessageForm(instance=message)
    context = {'form': form}
    return render(request, 'coordination/messages/form.html', context)
Exemplo n.º 14
0
def control_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    context = {'quest': quest, }
    if quest.nonlinear:
        rest_quest = 0
        if quest.started:
            rest_quest = get_timedelta(quest.game_over)
        context.update({'rest_quest': rest_quest})
    elif quest.linear:
        current_missions = quest.current_missions()
        context.update({'current_missions': current_missions})
    return render(request, 'coordination/quests/control.html', context)
Exemplo n.º 15
0
def results_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    if not quest.published:
        request = is_quest_organizer(request, quest)
    context = {'quest': quest, }
    if quest.nonlinear or quest.multilinear:
        players = quest.players_ext()
        context.update({'players': players})
    else:
        missions = quest.missions().exclude(is_finish=True)
        keylogs = Keylog.right_keylogs(missions)
        current_missions = quest.current_missions()
        context.update({'missions': missions, 'keylogs': keylogs, 'current_missions': current_missions})
    return render(request, 'coordination/quests/results.html', context)
Exemplo n.º 16
0
def edit_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id)
    request = is_quest_organizer(request, quest)
    if request.method == "POST":
        form = QuestForm(request.POST, instance=quest)
        if form.is_valid():
            form.save()
            if quest.parent:
                return redirect('coordination:line_detail', quest_id=quest.parent.id, line_id=quest.id)
            else:
                return redirect('coordination:quest_detail', quest_id=quest.id)
    else:
        form = QuestForm(instance=quest)
    context = {'form': form}
    return render(request, 'coordination/quests/form.html', context)
Exemplo n.º 17
0
def messages_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    messages = quest.messages()
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            message = form.save(commit=False)
            message.quest = quest
            message.save()
            return redirect('coordination:quest_messages', quest_id=quest.id)
    else:
        form = MessageForm()
    context = {'quest': quest, 'messages': messages, 'form': form}
    return render(request, 'coordination/quests/messages.html', context)
Exemplo n.º 18
0
def create_line(request, quest_id, type=Quest.LINEAR):
    quest = get_object_or_404(Quest, pk=quest_id, type=Quest.MULTILINEAR)
    request = is_quest_organizer(request, quest)
    if request.method == 'POST':
        form = QuestForm(request.POST)
        if form.is_valid():
            line = form.save(commit=False)
            line.creator = quest.creator
            line.type = type
            line.parent = quest
            line.save()
            return redirect('coordination:line_detail', quest_id=quest.id, line_id=line.pk)
    else:
        form = QuestForm(type=type, parent=quest)
    context = {'form': form}
    return render(request, 'coordination/quests/form.html', context)
Exemplo n.º 19
0
def organizers_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    organizers = quest.organizers()
    all_orgs = User.objects.filter(groups__name='organizers').exclude(id__in=organizers)
    if request.method == 'POST':
        form = OrganizerForm(request.POST, organizers=all_orgs)
        if form.is_valid():
            organizer = form.cleaned_data["organizer"]
            Membership.objects.create(quest=quest, user=organizer, role=Membership.ORGANIZER)
            return redirect('coordination:quest_organizers', quest_id=quest_id)
    else:
        form = OrganizerForm(organizers=all_orgs)
    agent = quest.agents().first()
    context = {'quest': quest, 'organizers': organizers, 'form': form, 'agent': agent}
    return render(request, 'coordination/quests/members/organizers.html', context)
Exemplo n.º 20
0
def players_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    players = quest.players()
    form = PlayerForm(request.POST or None)
    if form.is_valid():
        name = form.cleaned_data["name"]
        username = generate_random_username(name)
        password = generate_random_password()
        user = User.objects.create_user(username=username, password=password, first_name=name, last_name=password)
        Membership.objects.create(quest=quest, user=user, role=Membership.PLAYER)
        if quest.linear or quest.line_nonlinear:
            start_mission = quest.start_mission()
            CurrentMission.objects.create(player=user, mission=start_mission)
        return redirect('coordination:quest_players', quest_id=quest_id)
    context = {'quest': quest, 'form': form, 'players': players}
    return render(request, 'coordination/quests/members/players.html', context)
Exemplo n.º 21
0
def create_mission(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id)
    if quest.not_started:
        request = is_quest_organizer(request, quest)
        if request.method == 'POST':
            form = MissionForm(request.POST, request.FILES, quest=quest)
            if form.is_valid():
                mission = form.save(commit=False)
                mission.quest = quest
                mission.save()
                return redirect('coordination:mission_detail', mission_id=mission.pk)
        else:
            form = MissionForm(quest=quest)
        context = {'quest': quest, 'form': form}
        return render(request, 'coordination/missions/form.html', context)
    if quest.parent:
        return redirect('coordination:quest_lines', quest_id=quest.pk)
    else:
        return redirect('coordination:quest_missions', quest_id=quest.pk)
Exemplo n.º 22
0
def keylog_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    mission = request.GET.get('mission', None)
    player = request.GET.get('player', None)
    missions = quest.missions().exclude(is_finish=True)
    if quest.nonlinear:
        missions = missions.exclude(order_number=0)
    if not mission and not player:
        url = reverse('coordination:quest_keylog', args=[quest.id])
        return redirect('{0}?mission={1}'.format(url, missions.first().id))
    keylogs = None
    players = quest.players()
    if mission:
        keylogs = Keylog.objects.filter(mission__id=mission)
        mission = int(mission)
    if player:
        keylogs = Keylog.objects.filter(player__id=player)
        player = int(player)
    context = {'quest': quest, 'keylogs': keylogs, 'players': players, 'missions': missions,
               'cur_mission': mission, 'cur_player': player}
    return render(request, 'coordination/quests/keylog.html', context)
Exemplo n.º 23
0
def end_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    quest.end()
    return redirect('coordination:quest_control', quest_id=quest_id)
Exemplo n.º 24
0
def players_quest_print(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    request = is_quest_organizer(request, quest)
    players = quest.players()
    context = {'quest': quest, 'players': players}
    return render(request, 'coordination/quests/members/players_print.html', context)
Exemplo n.º 25
0
def delete_message(request, quest_id, message_id, parent__isnull=True):
    quest = get_object_or_404(Quest, pk=quest_id)
    is_quest_organizer(request, quest)
    message = get_object_or_404(Message, pk=message_id, quest=quest)
    message.delete()
    return redirect('coordination:quest_messages', quest_id=quest_id)
Exemplo n.º 26
0
def delete_hint(request, hint_id):
    hint = get_object_or_404(Hint, pk=hint_id)
    mission = hint.mission
    is_quest_organizer(request, mission.quest)
    hint.delete()
    return redirect('coordination:mission_detail', mission_id=mission.id)
Exemplo n.º 27
0
def delete_keylog(request, quest_id, keylog_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    keylog = get_object_or_404(Keylog, pk=keylog_id, mission__quest=quest)
    keylog.delete()
    return redirect('coordination:quest_keylog', quest_id=quest_id)
Exemplo n.º 28
0
def publish_quest(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    quest.publish()
    return redirect('coordination:quest_detail', quest_id=quest_id)
Exemplo n.º 29
0
def delete_keylogs(request, quest_id):
    quest = get_object_or_404(Quest, pk=quest_id, parent__isnull=True)
    is_quest_organizer(request, quest)
    keylog_ids = request.POST.getlist('delete_ids[]')
    Keylog.objects.filter(mission__quest=quest, id__in=keylog_ids).delete()
    return redirect('coordination:quest_keylog', quest_id=quest_id)