diff --git a/django/library/migrations/0058_qivipquiz_quiz_played_lernmodus_and_more.py b/django/library/migrations/0058_qivipquiz_quiz_played_lernmodus_and_more.py
new file mode 100644
index 0000000..df07756
--- /dev/null
+++ b/django/library/migrations/0058_qivipquiz_quiz_played_lernmodus_and_more.py
@@ -0,0 +1,33 @@
+# Generated by Django 5.1.7 on 2025-11-14 14:51
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('library', '0057_quizcategory_color'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='qivipquiz',
+ name='quiz_played_Lernmodus',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ migrations.AddField(
+ model_name='qivipquiz',
+ name='quiz_played_Moderiermodus',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ migrations.AddField(
+ model_name='qivipquiz',
+ name='quiz_played_Moderiermodus_players',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ migrations.AddField(
+ model_name='qivipquiz',
+ name='single_player_or_multiple',
+ field=models.CharField(blank=True, max_length=20),
+ ),
+ ]
diff --git a/django/library/migrations/0059_remove_qivipquiz_single_player_or_multiple.py b/django/library/migrations/0059_remove_qivipquiz_single_player_or_multiple.py
new file mode 100644
index 0000000..7b011d1
--- /dev/null
+++ b/django/library/migrations/0059_remove_qivipquiz_single_player_or_multiple.py
@@ -0,0 +1,17 @@
+# Generated by Django 5.1.7 on 2025-11-14 15:04
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('library', '0058_qivipquiz_quiz_played_lernmodus_and_more'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='qivipquiz',
+ name='single_player_or_multiple',
+ ),
+ ]
diff --git a/django/library/models.py b/django/library/models.py
index 10d307b..e7291a9 100644
--- a/django/library/models.py
+++ b/django/library/models.py
@@ -43,7 +43,11 @@ class QivipQuiz(models.Model):
on_delete=models.PROTECT,
related_name="quizzes"
)
+
+ quiz_played_Lernmodus = models.IntegerField(null=True, blank=True, default=0)
+ quiz_played_Moderiermodus= models.IntegerField(null=True, blank=True, default=0)
+ quiz_played_Moderiermodus_players= models.IntegerField(null=True, blank=True, default=0)
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
user_id = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quiz')
diff --git a/django/library/views.py b/django/library/views.py
index bc62d6f..832b076 100644
--- a/django/library/views.py
+++ b/django/library/views.py
@@ -811,6 +811,9 @@ def copy_quiz(request, pk):
new_quiz.base_quiz_id = pk
new_quiz.rating_count = 0
new_quiz.average_rating = 3.0
+ new_quiz.quiz_played_Lernmodus = 0
+ new_quiz.quiz_played_Moderiermodus = 0
+ new_quiz.quiz_played_Moderiermodus_players = 0
if original_quiz.status=="öffentlich":
new_quiz.published_at = timezone.now()
else:
diff --git a/django/play/consumers/game.py b/django/play/consumers/game.py
index 21ac078..7298541 100644
--- a/django/play/consumers/game.py
+++ b/django/play/consumers/game.py
@@ -4,7 +4,7 @@ from channels.generic.websocket import AsyncWebsocketConsumer
from channels.db import database_sync_to_async
from django.utils import timezone
from django.urls import reverse
-from play.models import QuizGame, QuizGameParticipant, QuizAnswer
+from play.models import QuizGame, QuizGameParticipant, QuizAnswer,QivipQuiz
from django.conf import settings
from geopy.distance import geodesic
@@ -149,6 +149,7 @@ class GameConsumer(AsyncWebsocketConsumer):
await self.show_scoreboard()
elif message_type == 'finish_game':
+
host_id = text_data_json['host_id']
if await self.verify_host(host_id):
await self.finish_game()
@@ -625,11 +626,35 @@ class GameConsumer(AsyncWebsocketConsumer):
'redirect_url': reverse('play:scores', kwargs={'join_code': self.join_code})
}
)
-
+
+ @database_sync_to_async
+ def counter_played_quizzes(self): # Zähler, wie oft ein Quiz gespielt worden ist.
+
+ quiz = QuizGame.objects.get(join_code=self.join_code).quiz_id
+ quiz_game = QuizGame.objects.get(join_code=self.join_code)
+
+
+
+
+
+ if quiz_game.single_player_or_multiple=="multiple":
+ quiz.quiz_played_Moderiermodus+=1
+
+ active_participants = QuizGameParticipant.objects.filter(
+ quiz_game=quiz_game
+ ).count()
+ quiz.quiz_played_Moderiermodus_players+=active_participants
+
+ else:
+ quiz.quiz_played_Lernmodus+=1
+ quiz.save()
+
@database_sync_to_async
def _finish_game(self):
try:
+
quiz_game = QuizGame.objects.get(join_code=self.join_code)
+
quiz_game.current_state = 'finished'
quiz_game.save()
return True
@@ -638,6 +663,7 @@ class GameConsumer(AsyncWebsocketConsumer):
async def finish_game(self):
success = await self._finish_game()
+ await self.counter_played_quizzes()
if success:
# Notify clients to redirect to finished page
await self.channel_layer.group_send(
diff --git a/django/play/migrations/0017_quizgame_quiz_played_lernmodus_and_more.py b/django/play/migrations/0017_quizgame_quiz_played_lernmodus_and_more.py
new file mode 100644
index 0000000..7be4668
--- /dev/null
+++ b/django/play/migrations/0017_quizgame_quiz_played_lernmodus_and_more.py
@@ -0,0 +1,28 @@
+# Generated by Django 5.1.7 on 2025-11-14 13:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('play', '0016_quizgameparticipant_coordinate_answer'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='quizgame',
+ name='quiz_played_Lernmodus',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ migrations.AddField(
+ model_name='quizgame',
+ name='quiz_played_Moderiermodus',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ migrations.AddField(
+ model_name='quizgame',
+ name='quiz_played_Moderiermodus_players',
+ field=models.IntegerField(blank=True, default=0, null=True),
+ ),
+ ]
diff --git a/django/play/migrations/0018_quizgame_single_player_or_multiple.py b/django/play/migrations/0018_quizgame_single_player_or_multiple.py
new file mode 100644
index 0000000..1e6f584
--- /dev/null
+++ b/django/play/migrations/0018_quizgame_single_player_or_multiple.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.7 on 2025-11-14 14:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('play', '0017_quizgame_quiz_played_lernmodus_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='quizgame',
+ name='single_player_or_multiple',
+ field=models.CharField(blank=True, max_length=20),
+ ),
+ ]
diff --git a/django/play/migrations/0019_remove_quizgame_quiz_played_lernmodus_and_more.py b/django/play/migrations/0019_remove_quizgame_quiz_played_lernmodus_and_more.py
new file mode 100644
index 0000000..fb56a4b
--- /dev/null
+++ b/django/play/migrations/0019_remove_quizgame_quiz_played_lernmodus_and_more.py
@@ -0,0 +1,29 @@
+# Generated by Django 5.1.7 on 2025-11-14 14:50
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('play', '0018_quizgame_single_player_or_multiple'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='quizgame',
+ name='quiz_played_Lernmodus',
+ ),
+ migrations.RemoveField(
+ model_name='quizgame',
+ name='quiz_played_Moderiermodus',
+ ),
+ migrations.RemoveField(
+ model_name='quizgame',
+ name='quiz_played_Moderiermodus_players',
+ ),
+ migrations.RemoveField(
+ model_name='quizgame',
+ name='single_player_or_multiple',
+ ),
+ ]
diff --git a/django/play/migrations/0020_quizgame_single_player_or_multiple.py b/django/play/migrations/0020_quizgame_single_player_or_multiple.py
new file mode 100644
index 0000000..950d4c0
--- /dev/null
+++ b/django/play/migrations/0020_quizgame_single_player_or_multiple.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.7 on 2025-11-14 15:04
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('play', '0019_remove_quizgame_quiz_played_lernmodus_and_more'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='quizgame',
+ name='single_player_or_multiple',
+ field=models.CharField(blank=True, max_length=20),
+ ),
+ ]
diff --git a/django/play/models.py b/django/play/models.py
index 6d47299..70aa7c7 100644
--- a/django/play/models.py
+++ b/django/play/models.py
@@ -15,7 +15,7 @@ class QuizGame(models.Model):
('scoreboard', 'Scoreboard'),
]
-
+ single_player_or_multiple=models.CharField(max_length=20, blank=True)
host_id = models.CharField(max_length=200, unique=True)
join_code = models.CharField(max_length=6, unique=True, blank=True)
quiz_id = models.ForeignKey(QivipQuiz, on_delete=models.CASCADE)
diff --git a/django/play/views.py b/django/play/views.py
index daeba2a..55d7091 100644
--- a/django/play/views.py
+++ b/django/play/views.py
@@ -419,14 +419,24 @@ def waiting_room(request, join_code):
def selected_mode(request, join_code):
-
-
mode = request.GET.get('mode','default')
request.session['mode'] = mode
+
+ quiz_game = QuizGame.objects.get(join_code=join_code)
+ if mode=="learn":
+
+ quiz_game.single_player_or_multiple="single"
+ else:
+
+ quiz_game.single_player_or_multiple="multiple"
+
+ quiz_game.save()
+
+
quiz_game = get_object_or_404(QuizGame, join_code=join_code)
quiz = get_object_or_404(QivipQuiz, pk=quiz_game.quiz_id.id)
- QuizGameParticipant.objects.filter(quiz_game=quiz_game).delete()
+ QuizGameParticipant.objects.filter(quiz_game=quiz_game).delete()
# Hier werden die Fragen gemischt!
import random
diff --git a/django/templates/library/detail_quiz.html b/django/templates/library/detail_quiz.html
index 83d30dd..47c8f54 100644
--- a/django/templates/library/detail_quiz.html
+++ b/django/templates/library/detail_quiz.html
@@ -31,7 +31,7 @@
+ Quiz-Statistik +
+ ++ {{ quiz.quiz_played_Lernmodus }} + mal im Lernmodus gespielt +
+ ++ {{ quiz.quiz_played_Moderiermodus }} + mal im Moderiermodus gespielt + + (insg. {{ quiz.quiz_played_Moderiermodus_players }} Spieler) + +
+