utils.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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_user_status(user, acl):
  7. user_status = {
  8. 'is_banned': False,
  9. 'is_hidden': user.is_hiding_presence,
  10. 'is_online_hidden': False,
  11. 'is_offline_hidden': False,
  12. 'is_online': False,
  13. 'is_offline': False,
  14. 'banned_until': None,
  15. 'last_click': user.last_login or user.joined_on,
  16. }
  17. user_ban = get_user_ban(user)
  18. if user_ban:
  19. user_status['is_banned'] = True
  20. user_status['banned_until'] = user_ban.expires_on
  21. try:
  22. if not user.is_hiding_presence or acl['can_see_hidden_users']:
  23. online_tracker = user.online_tracker
  24. if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
  25. user_status['is_online'] = True
  26. user_status['last_click'] = online_tracker.last_click
  27. except Online.DoesNotExist:
  28. pass
  29. if user_status['is_hidden']:
  30. if acl['can_see_hidden_users']:
  31. if user_status['is_online']:
  32. user_status['is_online_hidden'] = True
  33. else:
  34. user_status['is_offline_hidden'] = True
  35. else:
  36. user_status['is_hidden'] = True
  37. else:
  38. if user_status['is_online']:
  39. user_status['is_online'] = True
  40. else:
  41. user_status['is_offline'] = True
  42. return user_status