|
|
|
@ -86,6 +86,37 @@ def get_pending_certificates_badge(request): |
|
|
|
print(f"Badge Error: {e}") |
|
|
|
return None |
|
|
|
|
|
|
|
def get_unread_chat_messages_badge(request): |
|
|
|
"""Generates the integer for the Live Chat sidebar badge""" |
|
|
|
try: |
|
|
|
from apps.chat.models import RoomMessage, ChatMessage |
|
|
|
from django.db.models import Q |
|
|
|
|
|
|
|
user = request.user |
|
|
|
if not user.is_authenticated: |
|
|
|
return None |
|
|
|
|
|
|
|
personal_q = Q(initiator=user) | Q(recipient=user) |
|
|
|
|
|
|
|
if user.is_superuser or getattr(user, 'has_role', lambda x: False)('admin') or getattr(user, 'has_role', lambda x: False)('super_admin') or getattr(user, 'has_role', lambda x: False)('consultant'): |
|
|
|
room_filter = personal_q | Q(room_type=RoomMessage.RoomTypeChoices.GROUP) |
|
|
|
else: |
|
|
|
room_filter = personal_q | \ |
|
|
|
Q(room_type=RoomMessage.RoomTypeChoices.GROUP, course__professor=user) | \ |
|
|
|
Q(room_type=RoomMessage.RoomTypeChoices.GROUP, course__participants__student=user, course__participants__is_active=True) |
|
|
|
|
|
|
|
rooms = RoomMessage.objects.filter(room_filter) |
|
|
|
|
|
|
|
count = ChatMessage.objects.filter( |
|
|
|
room__in=rooms, |
|
|
|
is_read=False |
|
|
|
).exclude(sender=user).count() |
|
|
|
|
|
|
|
return count if count > 0 else None |
|
|
|
except Exception as e: |
|
|
|
print(f"Chat Badge Error: {e}") |
|
|
|
return None |
|
|
|
|
|
|
|
def variables(request): |
|
|
|
return {"plausible_domain": getattr(settings, 'PLAUSIBLE_DOMAIN', '')} |
|
|
|
|
|
|
|
|