Ajout des fonctionnalités de gestion de progression des cours : vue dédiée pour le toggle des leçons, mise à jour des templates pour afficher la progression, intégration des routes Ajax, styles associés, et ajustements des vues et modèles pour gérer les données utilisateur.
This commit is contained in:
parent
609745a723
commit
ac8ef6894d
8 changed files with 261 additions and 9 deletions
|
|
@ -2,6 +2,9 @@ from django.urls import path
|
|||
from . import views
|
||||
|
||||
app_name = 'progression'
|
||||
urlpatterns = [
|
||||
|
||||
urlpatterns = [
|
||||
# On ne garde QUE la route AJAX ici.
|
||||
# Les routes 'list', 'detail', etc. doivent rester dans courses/urls.py
|
||||
path('ajax/toggle-lesson/', views.toggle_lesson_completion, name='toggle_lesson'),
|
||||
]
|
||||
|
|
@ -1,3 +1,41 @@
|
|||
from django.shortcuts import render
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
import json
|
||||
from django.http import JsonResponse
|
||||
from django.views.decorators.http import require_POST
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from progression.models import Progression
|
||||
from courses.models import Lesson
|
||||
|
||||
# Create your views here.
|
||||
@login_required
|
||||
@require_POST
|
||||
def toggle_lesson_completion(request):
|
||||
data = json.loads(request.body)
|
||||
lesson_id = data.get('lesson_id')
|
||||
|
||||
lesson = get_object_or_404(Lesson, id=lesson_id)
|
||||
# On remonte au cours via le module (Lesson -> Module -> Course)
|
||||
course = lesson.module.course
|
||||
|
||||
# On récupère ou crée la progression
|
||||
progression, created = Progression.objects.get_or_create(
|
||||
user=request.user,
|
||||
course=course
|
||||
)
|
||||
|
||||
# La logique du Toggle
|
||||
if lesson in progression.completed_lessons.all():
|
||||
progression.completed_lessons.remove(lesson)
|
||||
is_completed = False
|
||||
else:
|
||||
progression.completed_lessons.add(lesson)
|
||||
is_completed = True
|
||||
|
||||
# Mise à jour de la dernière leçon vue
|
||||
progression.last_viewed_lesson = lesson
|
||||
progression.save()
|
||||
|
||||
return JsonResponse({
|
||||
'status': 'success',
|
||||
'is_completed': is_completed,
|
||||
'new_percent': progression.percent_completed
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue