tracker.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.utils import timezone
  2. from misago.users.models import Online
  3. from misago.users.online.ranks import clear_ranks_online_cache
  4. def mute_tracker(request):
  5. request._misago_online_tracker = None
  6. def start_tracking(request, user):
  7. online_tracker = Online.objects.create(
  8. user=user,
  9. current_ip=request._misago_real_ip,
  10. is_visible_on_index=user.rank.is_on_index
  11. )
  12. if online_tracker.is_visible_on_index:
  13. clear_ranks_online_cache()
  14. request.user.online_tracker = online_tracker
  15. request._misago_online_tracker = online_tracker
  16. def update_tracker(request, tracker):
  17. tracker.current_ip = request._misago_real_ip
  18. tracker.last_click = timezone.now()
  19. rank_visible_on_index = request.user.rank.is_on_index
  20. if tracker.is_visible_on_index != rank_visible_on_index:
  21. tracker.is_visible_on_index = rank_visible_on_index
  22. tracker.save(update_fields=[
  23. 'last_click', 'current_ip', 'is_visible_on_index'
  24. ])
  25. clear_ranks_online_cache()
  26. else:
  27. tracker.save(update_fields=['last_click', 'current_ip'])
  28. def stop_tracking(request, tracker):
  29. user = tracker.user
  30. user.last_login = tracker.last_click
  31. user.last_ip = tracker.current_ip
  32. user.save(update_fields=['last_login', 'last_ip'])
  33. if tracker.is_visible_on_index:
  34. clear_ranks_online_cache()
  35. tracker.delete()