online.py 874 B

12345678910111213141516171819202122232425262728293031323334
  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 state_for_acl(user, acl):
  7. user_state = {
  8. 'is_banned': False,
  9. 'banned_until': False,
  10. 'is_online': False,
  11. 'is_hidden': user.is_hiding_presence,
  12. 'last_click': user.last_login,
  13. }
  14. user_ban = get_user_ban(user)
  15. if user_ban:
  16. user_state['is_banned'] = True
  17. user_state['banned_until'] = user_ban.valid_until
  18. try:
  19. online_tracker = user.online_tracker
  20. if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
  21. user_state['is_online'] = True
  22. user_state['last_click'] = online_tracker.last_click
  23. except Online.DoesNotExist:
  24. pass
  25. return user_state