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')
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)