passion_retro/forum/middleware.py
2025-09-12 11:11:44 +02:00

47 lines
No EOL
1.9 KiB
Python
Executable file

from django.utils.deprecation import MiddlewareMixin
from .models import Forum, Topic, Post
from users.models import User
from django.db.models import Count
class ForumStatsMiddleware(MiddlewareMixin):
# On récupère les statistiques du forum pour les affiché dans le menu
def process_request(self, request):
# Nombre total de forums
total_forums = Forum.objects.count()
# Nombre total de topics
total_topics = Topic.objects.count()
# Nombre total de posts
total_posts = Post.objects.count()
# Utilisateur ayant posté le plus de messages
user_with_most_posts = User.objects.annotate(num_posts=Count('post')).order_by('-num_posts').first()
# Nombre de messages de l'utilisateur ayant posté le plus de messages
most_posts = user_with_most_posts.num_posts if user_with_most_posts else 0
# Utilisateur ayant créé le plus de topics
user_with_most_topics = None
most_topics = 0
for user in User.objects.all():
if user.topic_set.count() > most_topics:
user_with_most_topics = user
most_topics = user.topic_set.count()
# Dernier message posté
last_post = Post.objects.latest('created') if total_posts > 0 else None
# Derneir topic créé
last_topic = Topic.objects.latest('created') if total_topics > 0 else None
# Ajouter les variables à l'objet request
request.total_forums = total_forums
request.total_topics = total_topics
request.total_posts = total_posts
request.user_with_most_posts = user_with_most_posts
request.most_posts = most_posts
request.user_with_most_topics = user_with_most_topics
request.most_topics = most_topics
request.last_post = last_post
request.last_topic = last_topic