|
@@ -12,10 +12,14 @@ ACTIVITY_CUTOFF = timedelta(minutes=15)
|
|
def state_for_acl(user, acl):
|
|
def state_for_acl(user, acl):
|
|
user_state = {
|
|
user_state = {
|
|
'is_banned': False,
|
|
'is_banned': False,
|
|
- 'banned_until': False,
|
|
|
|
- 'is_online': False,
|
|
|
|
'is_hidden': user.is_hiding_presence,
|
|
'is_hidden': user.is_hiding_presence,
|
|
- 'last_click': user.last_login,
|
|
|
|
|
|
+ '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)
|
|
user_ban = get_user_ban(user)
|
|
@@ -24,11 +28,26 @@ def state_for_acl(user, acl):
|
|
user_state['banned_until'] = user_ban.valid_until
|
|
user_state['banned_until'] = user_ban.valid_until
|
|
|
|
|
|
try:
|
|
try:
|
|
- online_tracker = user.online_tracker
|
|
|
|
- if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
|
|
|
|
- user_state['is_online'] = True
|
|
|
|
- user_state['last_click'] = online_tracker.last_click
|
|
|
|
|
|
+ if not user.is_hiding_presence or acl['can_see_hidden_users']:
|
|
|
|
+ online_tracker = user.online_tracker
|
|
|
|
+ if online_tracker.last_click >= timezone.now() - ACTIVITY_CUTOFF:
|
|
|
|
+ user_state['is_online'] = True
|
|
|
|
+ user_state['last_click'] = online_tracker.last_click
|
|
except Online.DoesNotExist:
|
|
except Online.DoesNotExist:
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
+ if user_state['is_hidden']:
|
|
|
|
+ if acl['can_see_hidden_users']:
|
|
|
|
+ if user_state['is_online']:
|
|
|
|
+ user_state['is_online_hidden'] = True
|
|
|
|
+ else:
|
|
|
|
+ user_state['is_offline_hidden'] = True
|
|
|
|
+ else:
|
|
|
|
+ user_state['is_hidden'] = True
|
|
|
|
+ else:
|
|
|
|
+ if user_state['is_online']:
|
|
|
|
+ user_state['is_online'] = True
|
|
|
|
+ else:
|
|
|
|
+ user_state['is_offline'] = True
|
|
|
|
+
|
|
return user_state
|
|
return user_state
|