From 2fab7683e16a66bf4807237b93a4017a28ba558f Mon Sep 17 00:00:00 2001 From: ben8 Date: Mon, 7 Apr 2025 15:27:27 +0200 Subject: [PATCH 01/31] =?UTF-8?q?h=C3=BCbscherer=5Fbutton?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- django/templates/library/detail_quiz.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/django/templates/library/detail_quiz.html b/django/templates/library/detail_quiz.html index 21a7e3d..5f7acf7 100644 --- a/django/templates/library/detail_quiz.html +++ b/django/templates/library/detail_quiz.html @@ -19,8 +19,12 @@ {% endif %} - Quiz kopieren - + + + + + Quiz kopieren + From c4489c2301f2d916aa7a6c97c3b38e0ef3e1d555 Mon Sep 17 00:00:00 2001 From: juhnsa Date: Mon, 7 Apr 2025 17:36:19 +0200 Subject: [PATCH 02/31] Ergaenzung zu #68 --- django/library/views.py | 1 + django/templates/base.html | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/django/library/views.py b/django/library/views.py index 36d77b9..5f16d54 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -206,6 +206,7 @@ def copy_quiz(request, pk): question.data = question.data # `data`-Feld wird explizit übernommen # Verknüpfe mit dem neuen Quiz question.save() + messages.success(request, "Quiz wurde erfolgreich kopiert!") return redirect('library:detail_quiz', pk=new_quiz.pk) diff --git a/django/templates/base.html b/django/templates/base.html index 3ec89de..30c799e 100644 --- a/django/templates/base.html +++ b/django/templates/base.html @@ -17,7 +17,18 @@
- + + {% if messages %} + + {% endif %} + {% endblock content %} From 1f3b551b9470b9c7326fd72d40ccbd06706c1f89 Mon Sep 17 00:00:00 2001 From: ben8 Date: Fri, 11 Apr 2025 19:31:12 +0200 Subject: [PATCH 11/31] Favoriten --- ...remove_qivipquiz_favorite_date_and_more.py | 22 +++++++++++++++++++ ...6_alter_qivipquizfavorite_favorite_date.py | 18 +++++++++++++++ django/library/models.py | 3 +-- django/library/views.py | 18 +++++++++------ 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py create mode 100644 django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py diff --git a/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py b/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py new file mode 100644 index 0000000..8d92ed4 --- /dev/null +++ b/django/library/migrations/0045_remove_qivipquiz_favorite_date_and_more.py @@ -0,0 +1,22 @@ +# Generated by Django 5.1.7 on 2025-04-11 16:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0044_remove_qivipquizfavorite_favorite_date_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='qivipquiz', + name='favorite_date', + ), + migrations.AddField( + model_name='qivipquizfavorite', + name='favorite_date', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py b/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py new file mode 100644 index 0000000..e08ca9d --- /dev/null +++ b/django/library/migrations/0046_alter_qivipquizfavorite_favorite_date.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.7 on 2025-04-11 16:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0045_remove_qivipquiz_favorite_date_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='qivipquizfavorite', + name='favorite_date', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/django/library/models.py b/django/library/models.py index b1769b0..1477a3d 100644 --- a/django/library/models.py +++ b/django/library/models.py @@ -39,7 +39,6 @@ class QivipQuiz(models.Model): credits=models.TextField(blank=True, editable=True) average_rating = models.FloatField(default=3.0) rating_count = models.IntegerField(default=0) - favorite_date=models.DateTimeField(auto_now=True) def __str__(self): return self.name @@ -48,7 +47,7 @@ class QivipQuizFavorite(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) # Verknüpfung zu User quiz = models.ForeignKey(QivipQuiz, on_delete=models.CASCADE, related_name='favorites') # Verknüpfung zu Quiz favorite = models.BooleanField(default=False) # Favoritenstatus - + favorite_date = models.DateTimeField(null=True, blank=True) class Meta: unique_together = ('user', 'quiz') # Sicherstellen, dass es nur ein Favorit pro User und Quiz gibt diff --git a/django/library/views.py b/django/library/views.py index 565709e..7baeef4 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -1,3 +1,4 @@ +from django.utils import timezone import uuid from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render, redirect, get_object_or_404 @@ -19,7 +20,7 @@ def overview_quiz(request): # Filter form = QuizFilterForm(request.GET) try: - favorite_quizzes_data = QivipQuizFavorite.objects.filter(user=request.user, favorite=True) + favorite_quizzes_data = QivipQuizFavorite.objects.filter(user=request.user, favorite=True).order_by("-favorite_date") favorite_quiz_ids = favorite_quizzes_data.values_list('quiz', flat=True) favorite_quizzes = QivipQuiz.objects.filter(id__in=favorite_quiz_ids) except: @@ -31,7 +32,7 @@ def overview_quiz(request): # Initialize querysets if request.user.is_authenticated: filter_my_quizzes = QivipQuiz.objects.filter(user_id=request.user).annotate(max_amout_questions=Count('questions')) - favorite_quizzes = QivipQuiz.objects.filter(id__in=favorite_quiz_ids).annotate(max_amout_questions=Count('questions')) + favorite_quizzes = favorite_quizzes.filter(id__in=favorite_quiz_ids).annotate(max_amout_questions=Count('questions')) filter_other_quizzes = QivipQuiz.objects.exclude(user_id=request.user) else: favorite_quizzes = QivipQuiz.objects.none() @@ -137,7 +138,7 @@ def overview_quiz(request): # Pagination for favorite_quizzes - favorite_quizzes_paginator = Paginator(favorite_quizzes.order_by("-favorite_date"), 8) # 8 quizzes per page + favorite_quizzes_paginator = Paginator(favorite_quizzes, 8) # 8 quizzes per page try: favorite_quizzes = favorite_quizzes_paginator.page(request.GET.get('my_page', 1)) except: @@ -163,19 +164,22 @@ def favorite_quiz(request, pk): if favorite: favorite.favorite=not favorite.favorite - favorite.save() + if favorite.favorite==True: - quiz.save(update_fields=['favorite_date']) + favorite.favorite_date = timezone.now() + statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich zu den Favoriten hinzugefügt!" messages.success(request,statement ) else: + favorite.favorite_date = None + statement="Das Quiz '"+ favorite.quiz.name+ "' wurde erfolgreich von den Favoriten entfernt!" messages.error(request, statement) - + favorite.save() else: - QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True) + QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True, favorite_date=timezone.now()) return redirect(request.META.get('HTTP_REFERER', 'library:overview_quiz')) From d53240c710050ba1370e165b1d25ca240a2a2c47 Mon Sep 17 00:00:00 2001 From: ben8 Date: Fri, 11 Apr 2025 20:29:55 +0200 Subject: [PATCH 12/31] Favoriten_nur_wenn_angemeldet! --- django/library/views.py | 11 +++++++++-- django/templates/library/overview_quiz.html | 11 ++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/django/library/views.py b/django/library/views.py index 7baeef4..fabbcff 100644 --- a/django/library/views.py +++ b/django/library/views.py @@ -180,10 +180,17 @@ def favorite_quiz(request, pk): favorite.save() else: QivipQuizFavorite.objects.create(user=request.user, quiz=quiz, favorite=True, favorite_date=timezone.now()) - - + """ + referer = request.META.get('HTTP_REFERER') + if referer and 'library/' in referer: + + return redirect(request.META.get('HTTP_REFERER', 'library:overview_quiz')) + else: + return overview_quiz(request) + """ return redirect(request.META.get('HTTP_REFERER', 'library:overview_quiz')) + # Neues Quiz erstellen @login_required def new_quiz(request): diff --git a/django/templates/library/overview_quiz.html b/django/templates/library/overview_quiz.html index 7a420cd..4c27130 100644 --- a/django/templates/library/overview_quiz.html +++ b/django/templates/library/overview_quiz.html @@ -104,6 +104,7 @@ {% else %}
{% endif %} + {% if user.is_authenticated %} {% if quiz.id not in favorite_quiz_ids %}
@@ -123,6 +124,7 @@
{% endif %} + {% endif %} @@ -207,7 +209,7 @@ - {% if quiz.user == request.user %} + {% if quiz.user_id == request.user %} @@ -285,7 +287,7 @@ {% else %}
{% endif %} - + {% if user.is_authenticated %} {% if quiz.favorite == False %}
{% endif %} + {% endif %} @@ -390,7 +393,7 @@ - {% if quiz.user == request.user %} + {% if quiz.user_id == request.user %} @@ -475,6 +478,7 @@ {% else %}
{% endif %} + {% if user.is_authenticated %} {% if quiz.id not in favorite_quiz_ids %}
{% endif %} + {% endif %} From 5f05964b1b37abf0192bb80c89974e9580371a5d Mon Sep 17 00:00:00 2001 From: ben8 Date: Sun, 13 Apr 2025 13:09:39 +0200 Subject: [PATCH 13/31] =?UTF-8?q?Suchleiste=5F=C3=BCberall=20#96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- django/templates/partials/_nav.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/django/templates/partials/_nav.html b/django/templates/partials/_nav.html index 60f8a6f..1b0cc9a 100644 --- a/django/templates/partials/_nav.html +++ b/django/templates/partials/_nav.html @@ -5,8 +5,8 @@ - {% if show_search %} -
+ +
- {% endif %} +