|
@@ -9,7 +9,27 @@ from misago.users.models import BanCache, Online
|
|
|
ACTIVITY_CUTOFF = timedelta(minutes=2)
|
|
|
|
|
|
|
|
|
-def get_user_status(viewer, user):
|
|
|
+
|
|
|
+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,
|
|
@@ -28,7 +48,7 @@ def get_user_status(viewer, user):
|
|
|
|
|
|
try:
|
|
|
online_tracker = user.online_tracker
|
|
|
- is_hidden = user.is_hiding_presence and not viewer.acl_cache['can_see_hidden_users']
|
|
|
+ is_hidden = user.is_hiding_presence and not request.user.acl_cache['can_see_hidden_users']
|
|
|
|
|
|
if online_tracker and not is_hidden:
|
|
|
if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
|
|
@@ -38,7 +58,7 @@ def get_user_status(viewer, user):
|
|
|
pass
|
|
|
|
|
|
if user_status['is_hidden']:
|
|
|
- if viewer.acl_cache['can_see_hidden_users']:
|
|
|
+ if request.user.acl_cache['can_see_hidden_users']:
|
|
|
user_status['is_hidden'] = False
|
|
|
if user_status['is_online']:
|
|
|
user_status['is_online_hidden'] = True
|
|
@@ -55,22 +75,3 @@ def get_user_status(viewer, user):
|
|
|
user_status['is_offline'] = True
|
|
|
|
|
|
return user_status
|
|
|
-
|
|
|
-
|
|
|
-def make_users_status_aware(viewer, 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(viewer, user)
|