import random from django.db.models import Max; from django.http import HttpResponse from django.template import loader from django.contrib import admin from django.conf import settings from django.shortcuts import redirect from django.contrib import messages from .forms import LoginForm from .models import * from django.apps import apps from .functions import * """ Fonction displayZone Cette vue permet de charger les données d'une zone Si zone_id n'est pas fourni, cela affiche la première vue du jeu qui démarre le chrono de l'équipe et qui """ def displayZone(request, zone_id=None): if 'equipe_code' not in request.session: return redirect('app:setEquipe') equipe = Equipe.objects.get(code=request.session['equipe_code']) template = loader.get_template('app/zone.html') context = { 'zone':None } challenge = getMaxChallenge(equipe) if zone_id is None: messages.error(request, "Merci d'indiquer une zone à charger !") else: try: zone = Zone.objects.filter(code=challenge.zone.code)[0] if request.method == 'POST': if int(request.POST.get('mdp')) == zone.mdp: zone.etat = 'L' zone.save() #next_zone = attributeZone(zone) messages.success(request, "Bon mot de passe") else: messages.warning(request, "Mauvais mot de passe") context = { 'zone':zone, 'title': "Bienvenue dans la zone "+zone.nom, } elif zone_id == zone.code: startChallengeTime(challenge) zone.etat = 'O' zone.save() context = { 'zone':zone, 'title': "Bienvenue dans la zone "+zone.nom, } else: messages.warning(request, "Mauvaise zone ! vous devez vous rendre dans la zone "+zone.nom) except Zone.DoesNotExist: messages.error(request, "Cette zone n'existe pas !") return HttpResponse(template.render(context, request)) """ Fonction setEquipe Fonction permettant d'enregistrer une équipe et de lui donner la prochaine zone de destination. Lors de la première exécution, la fonction démarre le chrono de l'équipe. """ def setEquipe(request): template = loader.get_template('app/setEquipe.html') if 'equipe_code' not in request.session: if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): equipe = Equipe.objects.get(code=int(form.cleaned_data['equipe'])) request.session['equipe_code'] = equipe.code request.session['equipe_nom'] = equipe.nom challenge = getMaxChallenge(equipe) if challenge is None: startEquipeTime(equipe) challenge = createChallenge(equipe) context = { 'zone': challenge.zone.nom, 'equipe_nom': request.session['equipe_nom'], } else: context = { 'form': LoginForm(request.POST), } else: context = { 'form': LoginForm(), } else: context = { 'zone': getMaxChallenge(Equipe.objects.get(code=request.session['equipe_code'])).zone.nom, 'equipe_nom': request.session['equipe_nom'], } return HttpResponse(template.render(context, request)) def dashboard(request): if not request.user.is_authenticated & request.user.is_superuser: return redirect("/admin/login/?next=/dashboard") template = loader.get_template('app/dashboard.html') liste_equipe = Equipe.objects.all() context = { 'liste_equipe': liste_equipe } return HttpResponse(template.render(context, request)) """ Fonction createNewGame Cette fonction efface les challenges présents en base pour en créer de nouveaux pour chacune des équipes """ def createNewGame(request): #On efface toutes les session existantes request.session.flush() #On efface les challenges existants Challenge.objects.all().delete() #On libère toutes les zones liste_zone = Zone.objects.all() for zone in liste_zone.iterator(): zone.etat='L' zone.save() liste_equipe = Equipe.objects.all() for equipe in liste_equipe.iterator(): equipe.start_time=None equipe.end_time=None equipe.save() #On vérifie que le nombre de zones soit au moins égal aun nombre d'équipe +1 if len(liste_zone) < len(liste_equipe)+1: messages.error(request, "Pas assez de zone pour créer un nouveau jeu") else: messages.info(request, 'Création du jeu OK.') return redirect('app:dashboard')