1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- from datetime import timedelta
- from django.utils import timezone
- from ..bans import get_user_ban
- from ..models import BanCache, Online
- ACTIVITY_CUTOFF = timedelta(minutes=2)
- def make_users_status_aware(request, users, fetch_state=False):
- users_dict = {}
- for user in users:
- users_dict[user.pk] = user
- if fetch_state:
- # Fill ban cache on users
- for ban_cache in BanCache.objects.filter(user__in=users_dict.keys()):
- users_dict[ban_cache.user_id].ban_cache = ban_cache
- # Fill user online trackers
- for online_tracker in Online.objects.filter(user__in=users_dict.keys()):
- users_dict[online_tracker.user_id].online_tracker = online_tracker
- # Fill user states
- for user in users:
- user.status = get_user_status(request, user)
- def get_user_status(request, user):
- user_status = {
- "is_banned": False,
- "is_hidden": user.is_hiding_presence,
- "is_online_hidden": False,
- "is_offline_hidden": False,
- "is_online": False,
- "is_offline": False,
- "banned_until": None,
- "last_click": user.last_login or user.joined_on,
- }
- user_ban = get_user_ban(user, request.cache_versions)
- if user_ban:
- user_status["is_banned"] = True
- user_status["banned_until"] = user_ban.expires_on
- try:
- online_tracker = user.online_tracker
- is_hidden = (
- user.is_hiding_presence and not request.user_acl["can_see_hidden_users"]
- )
- if online_tracker and not is_hidden:
- if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
- user_status["is_online"] = True
- user_status["last_click"] = online_tracker.last_click
- except Online.DoesNotExist:
- pass
- if user_status["is_hidden"]:
- if request.user_acl["can_see_hidden_users"]:
- user_status["is_hidden"] = False
- if user_status["is_online"]:
- user_status["is_online_hidden"] = True
- user_status["is_online"] = False
- else:
- user_status["is_offline_hidden"] = True
- user_status["is_offline"] = False
- else:
- user_status["is_hidden"] = True
- else:
- if user_status["is_online"]:
- user_status["is_online"] = True
- else:
- user_status["is_offline"] = True
- return user_status
|