You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
4.5 KiB
142 lines
4.5 KiB
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')
|
|
|