Browse Source

Settings en BDD; correction divers bugs

master
Christophe SCAYA 3 years ago
parent
commit
5128de314b
  1. 15
      Docs/Zones CDG 2022.md
  2. 4
      EscapeGame/templates/admin_template.html
  3. 30
      app/admin.py
  4. 1
      app/apps.py
  5. 3
      app/forms.py
  6. 9
      app/functions.py
  7. 33
      app/migrations/0001_initial.py
  8. 23
      app/migrations/0002_alter_zone_code_alter_zone_etat.py
  9. 22
      app/migrations/0003_alter_zone_code_alter_distance_unique_together.py
  10. 40
      app/migrations/0004_equipe_alter_zone_code_challenge.py
  11. 29
      app/migrations/0005_alter_challenge_code_alter_equipe_code_and_more.py
  12. 19
      app/migrations/0006_alter_zone_code.py
  13. 33
      app/migrations/0007_alter_challenge_end_time_alter_challenge_start_time_and_more.py
  14. 33
      app/migrations/0008_alter_challenge_end_time_alter_challenge_start_time_and_more.py
  15. 18
      app/migrations/0009_challenge_rank.py
  16. 19
      app/migrations/0010_alter_challenge_zone.py
  17. 19
      app/migrations/0011_alter_challenge_zone.py
  18. 18
      app/migrations/0012_zone_description.py
  19. 23
      app/migrations/0013_remove_challenge_code_zone_mdp.py
  20. 19
      app/migrations/0014_alter_zone_mdp.py
  21. 20
      app/migrations/0015_settings.py
  22. 0
      app/migrations/__init__.py
  23. 3
      app/models.py
  24. 10
      app/templates/app/settings.html
  25. 2
      app/templates/app/zone.html
  26. 1
      app/urls.py
  27. 34
      app/views.py

15
Docs/Zones CDG 2022.md

@ -1,15 +0,0 @@
<u>**Zone : salle 202**</u><br/>
***Mdp :*** 1200<br/>
***Description :***<br/>
Bienvenue dans l’antre de Mendeleïev ! Pour trouver le code de cette salle, rendez-vous près du tableau périodique et effectuez la somme des numéros atomiques de tous les éléments commençant par les lettres P et R.
<u>**Zone : salle 209**</u><br/>
***Mdp :*** 1365<br/>
***Description :***<br/>
Bienvenue dans l'antre de la robotique. Pour sortir de la salle, commencez d'abord par chercher où se trouvent les petits robots bleus. Allumez ensuite dans l'ordre les robots 2, 4, 6 et 8. A l'allumage, chaque robot fournit un code de couleur qui correspond à un chiffre (voir feuille collée sur l'armoire). Le code pour sortir de la salle correspond à l'assemblage de ces 4 chiffres !
Nb : Si vous voulez revoir le code couleur d'un robot, il suffit de l'éteindre et de la rallumer. Merci d'éteindre les robots une fois le code trouvé !
<u>**Zone : toiture terrasse**</u><br/>
***Mdp :*** 9412<br/>
***Description :***<br/>
Contrairement à ce que l’on pourrait croire, la « toiture terrasse inaccessible » du CDI, n’est pas si inaccessible qu’il n’y paraît. À vous de trouver comment vous y rendre. Une fois sur place, regardez votre plan, le code se trouve sur l’objet représenté par un cercle noir.

4
EscapeGame/templates/admin_template.html

@ -58,8 +58,8 @@ aria-expanded="true" aria-controls="collapseTwo">
</a> </a>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar"> <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
<a class="collapse-item" href="{% url 'app:createNewGame'%}">Initialisier jeu</a> <a class="collapse-item" href="{% url 'app:createNewGame'%}" onclick="return confirm('ATTENTION ! Cette action est irreversible !')" >Initialisier jeu</a>
<a class="collapse-item" href="cards.html">blabla</a> <a class="collapse-item" href="{% url 'app:settings'%}">Paramètres</a>
</div> </div>
</div> </div>
</li> </li>

30
app/admin.py

@ -2,7 +2,29 @@ from django.contrib import admin
from .models import Zone, Distance, Equipe, Challenge from .models import Zone, Distance, Equipe, Challenge
admin.site.register(Zone) class zoneAdmin(admin.ModelAdmin):
admin.site.register(Distance) list_display = ('zone', 'etat')
admin.site.register(Equipe) def zone(self, obj):
admin.site.register(Challenge) return obj.nom+" ("+str(obj.code)+")"
class distanceAdmin(admin.ModelAdmin):
list_display = ('zone1','zone2', 'distance')
def zone1(self, obj):
return obj.zone1.nom
def zone2(self, obj):
return obj.zone2.nom
class equipeAdmin(admin.ModelAdmin):
list_display = ('pk','nom')
class challengeAdmin(admin.ModelAdmin):
list_display = ('equipe','zone','rank')
def equipe(self, obj):
return obj.equipe.nom
def zone(self, obj):
return obj.zone.nom
admin.site.register(Zone, zoneAdmin)
admin.site.register(Distance, distanceAdmin)
admin.site.register(Equipe, equipeAdmin)
admin.site.register(Challenge, challengeAdmin)

1
app/apps.py

@ -3,4 +3,3 @@ from django.apps import AppConfig
class AppConfig(AppConfig): class AppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'
name = 'app' name = 'app'
nb_challenges = 4

3
app/forms.py

@ -15,3 +15,6 @@ class LoginForm(forms.Form):
class ZoneForm(forms.Form): class ZoneForm(forms.Form):
code = forms.DecimalField(label="Code", min_value=1000, max_value=9999, decimal_places=0) code = forms.DecimalField(label="Code", min_value=1000, max_value=9999, decimal_places=0)
class SettingsForm(forms.Form):
nb_challenges = forms.DecimalField(label="Nombre de challenges", min_value=1, max_value=10, decimal_places=0)

9
app/functions.py

@ -3,6 +3,13 @@ from django.db.models import Max;
from django.apps import apps from django.apps import apps
from datetime import datetime from datetime import datetime
def getSettings():
try:
settings = Settings.objects.all()[0]
return settings
except IndexError:
return None
def getMaxChallenge(equipe): def getMaxChallenge(equipe):
max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank'] max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank']
if max_rank is None: if max_rank is None:
@ -28,7 +35,7 @@ def createChallenge(equipe):
challenge = Challenge(equipe=equipe,zone=attributeZone(),rank=1) challenge = Challenge(equipe=equipe,zone=attributeZone(),rank=1)
challenge.save() challenge.save()
return challenge return challenge
if max_rank < apps.get_app_config('app').nb_challenges: if max_rank < getSettings().nb_challenges:
challenge = Challenge(equipe=equipe,zone=attributeZone(equipe),rank=max_rank+1) challenge = Challenge(equipe=equipe,zone=attributeZone(equipe),rank=max_rank+1)
challenge.save() challenge.save()
return challenge return challenge

33
app/migrations/0001_initial.py

@ -0,0 +1,33 @@
# Generated by Django 4.1 on 2022-08-09 19:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Zone',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nom', models.CharField(max_length=50)),
('etat', models.CharField(choices=[('L', 'Libre'), ('A', 'Attibuée'), ('O', 'Occupée')], max_length=1)),
('code', models.IntegerField()),
],
),
migrations.CreateModel(
name='Distance',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('distance', models.IntegerField()),
('zone1', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='zone1', to='app.zone')),
('zone2', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='zone2', to='app.zone')),
],
),
]

23
app/migrations/0002_alter_zone_code_alter_zone_etat.py

@ -0,0 +1,23 @@
# Generated by Django 4.1 on 2022-08-09 19:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='zone',
name='code',
field=models.IntegerField(default=6258),
),
migrations.AlterField(
model_name='zone',
name='etat',
field=models.CharField(choices=[('L', 'Libre'), ('A', 'Attibuée'), ('O', 'Occupée')], default='L', max_length=1),
),
]

22
app/migrations/0003_alter_zone_code_alter_distance_unique_together.py

@ -0,0 +1,22 @@
# Generated by Django 4.1 on 2022-08-09 19:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0002_alter_zone_code_alter_zone_etat'),
]
operations = [
migrations.AlterField(
model_name='zone',
name='code',
field=models.IntegerField(default=2017),
),
migrations.AlterUniqueTogether(
name='distance',
unique_together={('zone1', 'zone2')},
),
]

40
app/migrations/0004_equipe_alter_zone_code_challenge.py

@ -0,0 +1,40 @@
# Generated by Django 4.1 on 2022-08-12 12:03
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('app', '0003_alter_zone_code_alter_distance_unique_together'),
]
operations = [
migrations.CreateModel(
name='Equipe',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nom', models.CharField(max_length=50)),
('code', models.IntegerField(default=3892)),
('start_time', models.TimeField()),
('end_time', models.TimeField()),
],
),
migrations.AlterField(
model_name='zone',
name='code',
field=models.IntegerField(default=4254),
),
migrations.CreateModel(
name='Challenge',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.IntegerField(default=6920)),
('start_time', models.TimeField()),
('end_time', models.TimeField()),
('equipe', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.equipe')),
('zone', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.zone')),
],
),
]

29
app/migrations/0005_alter_challenge_code_alter_equipe_code_and_more.py

@ -0,0 +1,29 @@
# Generated by Django 4.1 on 2022-08-22 14:30
import app.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0004_equipe_alter_zone_code_challenge'),
]
operations = [
migrations.AlterField(
model_name='challenge',
name='code',
field=models.IntegerField(default=app.models.random_string, unique=True),
),
migrations.AlterField(
model_name='equipe',
name='code',
field=models.IntegerField(default=app.models.random_string, unique=True),
),
migrations.AlterField(
model_name='zone',
name='code',
field=models.IntegerField(default=3734),
),
]

19
app/migrations/0006_alter_zone_code.py

@ -0,0 +1,19 @@
# Generated by Django 4.1 on 2022-08-22 14:32
import app.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0005_alter_challenge_code_alter_equipe_code_and_more'),
]
operations = [
migrations.AlterField(
model_name='zone',
name='code',
field=models.IntegerField(default=app.models.random_string, unique=True),
),
]

33
app/migrations/0007_alter_challenge_end_time_alter_challenge_start_time_and_more.py

@ -0,0 +1,33 @@
# Generated by Django 4.1 on 2022-08-23 13:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0006_alter_zone_code'),
]
operations = [
migrations.AlterField(
model_name='challenge',
name='end_time',
field=models.TimeField(null=True),
),
migrations.AlterField(
model_name='challenge',
name='start_time',
field=models.TimeField(null=True),
),
migrations.AlterField(
model_name='equipe',
name='end_time',
field=models.TimeField(null=True),
),
migrations.AlterField(
model_name='equipe',
name='start_time',
field=models.TimeField(null=True),
),
]

33
app/migrations/0008_alter_challenge_end_time_alter_challenge_start_time_and_more.py

@ -0,0 +1,33 @@
# Generated by Django 4.1 on 2022-08-23 13:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0007_alter_challenge_end_time_alter_challenge_start_time_and_more'),
]
operations = [
migrations.AlterField(
model_name='challenge',
name='end_time',
field=models.TimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='challenge',
name='start_time',
field=models.TimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='equipe',
name='end_time',
field=models.TimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='equipe',
name='start_time',
field=models.TimeField(blank=True, null=True),
),
]

18
app/migrations/0009_challenge_rank.py

@ -0,0 +1,18 @@
# Generated by Django 4.1 on 2022-08-24 13:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0008_alter_challenge_end_time_alter_challenge_start_time_and_more'),
]
operations = [
migrations.AddField(
model_name='challenge',
name='rank',
field=models.IntegerField(default=1),
),
]

19
app/migrations/0010_alter_challenge_zone.py

@ -0,0 +1,19 @@
# Generated by Django 4.1 on 2022-08-24 13:56
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('app', '0009_challenge_rank'),
]
operations = [
migrations.AlterField(
model_name='challenge',
name='zone',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='app.zone'),
),
]

19
app/migrations/0011_alter_challenge_zone.py

@ -0,0 +1,19 @@
# Generated by Django 4.1 on 2022-08-24 20:49
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('app', '0010_alter_challenge_zone'),
]
operations = [
migrations.AlterField(
model_name='challenge',
name='zone',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.zone'),
),
]

18
app/migrations/0012_zone_description.py

@ -0,0 +1,18 @@
# Generated by Django 4.1 on 2022-09-01 20:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0011_alter_challenge_zone'),
]
operations = [
migrations.AddField(
model_name='zone',
name='description',
field=models.TextField(default=''),
),
]

23
app/migrations/0013_remove_challenge_code_zone_mdp.py

@ -0,0 +1,23 @@
# Generated by Django 4.1 on 2022-09-05 21:36
import app.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0012_zone_description'),
]
operations = [
migrations.RemoveField(
model_name='challenge',
name='code',
),
migrations.AddField(
model_name='zone',
name='mdp',
field=models.IntegerField(default=app.models.random_string),
),
]

19
app/migrations/0014_alter_zone_mdp.py

@ -0,0 +1,19 @@
# Generated by Django 4.1 on 2022-09-05 21:39
import app.models
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0013_remove_challenge_code_zone_mdp'),
]
operations = [
migrations.AlterField(
model_name='zone',
name='mdp',
field=models.IntegerField(default=app.models.random_string, unique=True),
),
]

20
app/migrations/0015_settings.py

@ -0,0 +1,20 @@
# Generated by Django 4.1 on 2022-09-23 21:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0014_alter_zone_mdp'),
]
operations = [
migrations.CreateModel(
name='Settings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nb_challenges', models.IntegerField(default=1)),
],
),
]

0
app/migrations/__init__.py

3
app/models.py

@ -45,3 +45,6 @@ class Challenge(models.Model):
end_time = models.TimeField(null=True, blank=True) end_time = models.TimeField(null=True, blank=True)
def __str__(self): def __str__(self):
return self.equipe.nom+" -> salle : "+self.zone.nom+" rang : "+str(self.rank) return self.equipe.nom+" -> salle : "+self.zone.nom+" rang : "+str(self.rank)
class Settings(models.Model):
nb_challenges = models.IntegerField(default = 1)

10
app/templates/app/settings.html

@ -0,0 +1,10 @@
{% extends 'admin_template.html' %}{% block 'contenu' %}
<form action="{% url "app:settings" %}" method="POST">{% csrf_token %}
<div class="d-flex flex-row justify-content-center">
{{ form.as_div }}
</div>
<div class="pl-2">
<input type="submit" value="OK">
</div>
</form>
{% endblock %}

2
app/templates/app/zone.html

@ -1,6 +1,6 @@
{% extends 'default_template.html' %} {% extends 'default_template.html' %}
{% block 'contenu' %} {% block 'contenu' %}
<div class="p-2"> <div class="p-2 text-left">
{{zone.description |safe}} {{zone.description |safe}}
</div> </div>
{% if zone.description %} {% if zone.description %}

1
app/urls.py

@ -11,5 +11,6 @@ urlpatterns = [
path('dashboard/', views.createNewGame, name='createNewGame'), path('dashboard/', views.createNewGame, name='createNewGame'),
path('admin-dashboard/', views.dashboard, name='admin-dashboard'), path('admin-dashboard/', views.dashboard, name='admin-dashboard'),
path('admin-distances/', views.distances, name='admin-distances'), path('admin-distances/', views.distances, name='admin-distances'),
path('settings/', views.settings, name='settings'),
path('dashboard/createNewGame', views.createNewGame, name='createNewGame'), path('dashboard/createNewGame', views.createNewGame, name='createNewGame'),
] ]

34
app/views.py

@ -105,7 +105,7 @@ def setEquipe(request):
max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank'] max_rank = Challenge.objects.filter(equipe=equipe).aggregate(max_rank=Max("rank"))['max_rank']
if max_rank is None: if max_rank is None:
max_rank = 0 max_rank = 0
if max_rank < apps.get_app_config('app').nb_challenges: if max_rank < getSettings().nb_challenges:
context = { context = {
'zone': getMaxChallenge(Equipe.objects.get(code=request.session['equipe_code'])).zone.nom, 'zone': getMaxChallenge(Equipe.objects.get(code=request.session['equipe_code'])).zone.nom,
'equipe_nom': request.session['equipe_nom'], 'equipe_nom': request.session['equipe_nom'],
@ -126,7 +126,7 @@ def dashboard(request):
return redirect("/admin/login/?next=/admin-dashboard") return redirect("/admin/login/?next=/admin-dashboard")
template = loader.get_template('app/dashboard.html') template = loader.get_template('app/dashboard.html')
liste_equipe = Equipe.objects.all() liste_equipe = Equipe.objects.all().order_by('nom')
liste_equipe_challenges = list() liste_equipe_challenges = list()
for equipe in liste_equipe: for equipe in liste_equipe:
@ -163,7 +163,7 @@ def dashboard(request):
liste_equipe_challenges.append(data) liste_equipe_challenges.append(data)
nb_challenges = list() nb_challenges = list()
for i in range(apps.get_app_config('app').nb_challenges): for i in range(getSettings().nb_challenges):
nb_challenges.append(i+1) nb_challenges.append(i+1)
context = { context = {
@ -216,6 +216,34 @@ def distances(request):
} }
return HttpResponse(template.render(context, request)) return HttpResponse(template.render(context, request))
def settings(request):
template = loader.get_template('app/settings.html')
if request.method == 'POST':
form = SettingsForm(request.POST)
if form.is_valid():
settings = getSettings()
if settings is None:
settings = Settings(nb_challenges = int(form.cleaned_data['nb_challenges']))
settings.save()
else:
settings.nb_challenges = int(form.cleaned_data['nb_challenges'])
settings.save()
try:
settings = Settings.objects.all()[0]
initial_values = {
"nb_challenges":settings.nb_challenges,
}
context = {
'form': SettingsForm(initial = initial_values),
'title': "Paramètres",
}
except IndexError:
context = {
'form': SettingsForm(),
'title': "Paramètres",
}
return HttpResponse(template.render(context, request))
""" """
Fonction createNewGame Fonction createNewGame
Cette fonction efface les challenges présents en base pour en créer de nouveaux pour chacune des équipes Cette fonction efface les challenges présents en base pour en créer de nouveaux pour chacune des équipes

Loading…
Cancel
Save