Browse Source

unread messages badge added to the sidebar for livechat

master
Mohsen Taba 2 months ago
parent
commit
4332e03d4d
  1. 1
      config/settings/base.py
  2. 5
      static/css/styles.css
  3. 31
      utils/admin.py

1
config/settings/base.py

@ -679,6 +679,7 @@ UNFOLD = {
"icon": "forum", # آیکون چت
"link": lambda request: admin_url_generator(request, "live_chat_dashboard"),
"permission": is_main_panel,
"badge": "utils.admin.get_unread_chat_messages_badge",
},
]
},

5
static/css/styles.css

@ -1,5 +1,6 @@
/* Bulletproof target for the Certificate badge using its URL */
a[href*="/certificate/certificate/"] span:last-child {
/* Bulletproof target for the Certificate and Live Chat badges using their URLs */
a[href*="/certificate/certificate/"] span:last-child,
a[href*="/live-chat/"] span:last-child {
background-color: #1eb866 !important;
/* Forces your custom green */
border-radius: 9999px !important;

31
utils/admin.py

@ -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', '')}

Loading…
Cancel
Save