Affichage de la progression utilisateur dans les cours suivis et amélioration des templates associés.
This commit is contained in:
parent
81b42b8b4a
commit
8f0fad45be
4 changed files with 65 additions and 29 deletions
|
|
@ -12,7 +12,7 @@ class CourseSitemap(sitemaps.Sitemap):
|
||||||
priority = 0.9
|
priority = 0.9
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
return Course.objects.filter(enable=True) # Exemple de filtre
|
return Course.objects.filter(enable=True).order_by('id')
|
||||||
|
|
||||||
def location(self, item):
|
def location(self, item):
|
||||||
# Assure-toi que ton modèle Course a bien une méthode get_absolute_url
|
# Assure-toi que ton modèle Course a bien une méthode get_absolute_url
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,27 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
<div class="profile-details">
|
<div class="profile-details">
|
||||||
<h2>Mes cours</h2>
|
<h2>Mes cours</h2>
|
||||||
<p>Retrouvez ici la liste de tous les cours que vous suivez.</p>
|
<p>Retrouvez ici la liste de tous les cours que vous suivez et votre progression.</p>
|
||||||
<ul>
|
|
||||||
{% for course in user_courses %}
|
{% if progress_list %}
|
||||||
<li><a href="{% url 'courses:show' course.name|slugify course.id %}">{{ course.name }}</a></li>
|
<ul class="profile-courses">
|
||||||
{% endfor %}
|
{% for p in progress_list %}
|
||||||
</ul>
|
{% with course=p.course %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'courses:show' course.name|slugify course.id %}">
|
||||||
|
{% if course.thumbnail %}
|
||||||
|
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
|
||||||
|
{% endif %}
|
||||||
|
<span>{{ course.name }}</span>
|
||||||
|
</a>
|
||||||
|
<div class="muted small">Progression: {{ p.percent_completed }}%</div>
|
||||||
|
</li>
|
||||||
|
{% endwith %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% else %}
|
||||||
|
<p class="muted">Vous ne suivez aucun cours pour le moment.</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
@ -22,24 +22,27 @@
|
||||||
|
|
||||||
<div class="profile-card">
|
<div class="profile-card">
|
||||||
<h3>Mes cours</h3>
|
<h3>Mes cours</h3>
|
||||||
{% with courses=user.course_set.all %}
|
{% with progress_list=latest_progress %}
|
||||||
{% if courses %}
|
{% if progress_list %}
|
||||||
<ul class="profile-courses">
|
<ul class="profile-courses">
|
||||||
{% for course in courses|slice:":6" %}
|
{% for p in progress_list %}
|
||||||
<li>
|
{% with course=p.course %}
|
||||||
<a href="{% url 'courses:show' course_id=course.id course_name=course.slug %}">
|
<li>
|
||||||
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
|
<a href="{% url 'courses:show' course_id=course.id course_name=course.slug %}">
|
||||||
<span>{{ course.name }}</span>
|
<img src="/{{ course.thumbnail }}" alt="{{ course.name }}" class="course-thumb-mini">
|
||||||
</a>
|
<span>{{ course.name }}</span>
|
||||||
</li>
|
</a>
|
||||||
{% endfor %}
|
<div class="muted small">Progression: {{ p.percent_completed }}%</div>
|
||||||
</ul>
|
</li>
|
||||||
<div class="text-right">
|
{% endwith %}
|
||||||
<a class="btn btn-secondary btn-sm" href="{% url 'user_courses' %}">Voir tous mes cours</a>
|
{% endfor %}
|
||||||
</div>
|
</ul>
|
||||||
{% else %}
|
<div class="text-right">
|
||||||
<p class="muted">Aucun cours suivi pour le moment.</p>
|
<a class="btn btn-secondary btn-sm" href="{% url 'user_courses' %}">Voir tous mes cours</a>
|
||||||
{% endif %}
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<p class="muted">Aucun cours suivi pour le moment.</p>
|
||||||
|
{% endif %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ from django.contrib import messages
|
||||||
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
|
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from courses.models import Course
|
from courses.models import Course
|
||||||
|
from progression.models import Progression
|
||||||
from .forms import UserRegistrationForm, UserLoginForm, UserUpdateForm, ProfileUpdateForm, CompleteProfileForm
|
from .forms import UserRegistrationForm, UserLoginForm, UserUpdateForm, ProfileUpdateForm, CompleteProfileForm
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
|
|
@ -81,7 +82,17 @@ def logout(request):
|
||||||
def profile(request):
|
def profile(request):
|
||||||
if not hasattr(request.user, 'profile'):
|
if not hasattr(request.user, 'profile'):
|
||||||
return redirect('complete_profile')
|
return redirect('complete_profile')
|
||||||
return render(request, 'users/profile.html')
|
|
||||||
|
latest_progress = (
|
||||||
|
Progression.objects
|
||||||
|
.filter(user=request.user)
|
||||||
|
.select_related('course')
|
||||||
|
.prefetch_related('completed_lessons')
|
||||||
|
.order_by('-updated_at')[:5]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Affiche les 5 derniers cours regardés avec leur progression
|
||||||
|
return render(request, 'users/profile.html', {'latest_progress': latest_progress})
|
||||||
|
|
||||||
@login_required(login_url='login')
|
@login_required(login_url='login')
|
||||||
def complete_profile(request):
|
def complete_profile(request):
|
||||||
|
|
@ -130,9 +141,16 @@ def account_update(request):
|
||||||
|
|
||||||
@login_required(login_url='login')
|
@login_required(login_url='login')
|
||||||
def my_courses(request):
|
def my_courses(request):
|
||||||
user_courses = Course.objects.filter(author=request.user.id)
|
# Liste tous les cours suivis par l'utilisateur avec leur progression
|
||||||
print(user_courses)
|
progress_list = (
|
||||||
return render(request, 'users/my_courses.html', {'user_courses' : user_courses})
|
Progression.objects
|
||||||
|
.filter(user=request.user)
|
||||||
|
.select_related('course')
|
||||||
|
.prefetch_related('completed_lessons')
|
||||||
|
.order_by('-updated_at')
|
||||||
|
)
|
||||||
|
|
||||||
|
return render(request, 'users/my_courses.html', {'progress_list': progress_list})
|
||||||
|
|
||||||
def create_post(request):
|
def create_post(request):
|
||||||
# Implement post creation logic here
|
# Implement post creation logic here
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue