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 = {
@ -215,6 +215,34 @@ def distances(request):
'title': "Gestion des distances", 'title': "Gestion des distances",
} }
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

Loading…
Cancel
Save