utils.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.users.bans import get_user_ban
  4. from misago.users.models import Online
  5. ACTIVITY_CUTOFF = timedelta(minutes=15)
  6. def get_online_queryset(viewer=None):
  7. min_last_click = timezone.now() - ACTIVITY_CUTOFF
  8. queryset = Online.objects.filter(last_click__gte=min_last_click)
  9. if viewer and not viewer.acl['can_see_hidden_users']:
  10. queryset = queryset.filter(user__is_hiding_presence=False)
  11. return queryset.select_related('user')
  12. def get_user_state(user, acl):
  13. user_state = {
  14. 'is_banned': False,
  15. 'is_hidden': user.is_hiding_presence,
  16. 'is_online_hidden': False,
  17. 'is_offline_hidden': False,
  18. 'is_online': False,
  19. 'is_offline': False,
  20. 'banned_until': None,
  21. 'last_click': user.last_login or user.joined_on,
  22. }
  23. user_ban = get_user_ban(user)
  24. if user_ban:
  25. user_state['is_banned'] = True
  26. user_state['banned_until'] = user_ban.expires_on
  27. ban_expiration_date = user_ban.formatted_expiration_date
  28. user_state['formatted_ban_expiration_date'] = ban_expiration_date
  29. try:
  30. if not user.is_hiding_presence or acl['can_see_hidden_users']:
  31. online_tracker = user.online_tracker
  32. if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
  33. user_state['is_online'] = True
  34. user_state['last_click'] = online_tracker.last_click
  35. except Online.DoesNotExist:
  36. pass
  37. if user_state['is_hidden']:
  38. if acl['can_see_hidden_users']:
  39. if user_state['is_online']:
  40. user_state['is_online_hidden'] = True
  41. else:
  42. user_state['is_offline_hidden'] = True
  43. else:
  44. user_state['is_hidden'] = True
  45. else:
  46. if user_state['is_online']:
  47. user_state['is_online'] = True
  48. else:
  49. user_state['is_offline'] = True
  50. return user_state