• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/classes/general/im_status.php
  • Класс: CIMStatus
  • Вызов: CIMStatus::OnUserOnlineStatusGetCustomStatus
static function OnUserOnlineStatusGetCustomStatus($userId, $lastseen, $now, $mode)
{
	$result = false;
	$status = self::GetStatus($userId);
	if (!$status)
	{
		return $result;
	}

	$result = [];
	$externalUser = BitrixMainUserTable::getExternalUserTypes();
	$externalUser[] = 'network';

	if (in_array($status['EXTERNAL_AUTH_ID'], $externalUser))
	{
		$result['STATUS'] = 'online';
		$result['STATUS_TEXT'] = GetMessage('IM_STATUS_EAID_'.mb_strtoupper($status['EXTERNAL_AUTH_ID']));
		$result['LAST_SEEN_TEXT'] = '';

		return $result;
	}

	/** @var BitrixMainTypeDateTime $mobileLastDate */
	$mobileLastDate = $status['MOBILE_LAST_DATE'];
	if ($mobileLastDate)
	{
		if (
			$now - $mobileLastDate->getTimestamp() < CUser::GetSecondsForLimitOnline()
			&& $lastseen - $mobileLastDate->getTimestamp() < 300
		)
		{
			$result['STATUS'] = 'mobile';
			$result['STATUS_TEXT'] = GetMessage('IM_STATUS_MOBILE');
			$result['LAST_SEEN'] = $mobileLastDate->getTimestamp();
			$result['LAST_SEEN_TEXT'] = CUser::FormatLastActivityDate($mobileLastDate->getTimestamp(), $now);
		}
	}

	if ($mode == CUser::STATUS_OFFLINE)
	{
		return $result;
	}

	if ($result && $result['STATUS'] === 'mobile')
	{
	}
	else if (in_array($status['STATUS'], Array('dnd', 'away', 'break', 'video')))
	{
		$result['STATUS'] = $status['STATUS'];
		$result['STATUS_TEXT'] = GetMessage('IM_STATUS_'.mb_strtoupper($status['STATUS']));
	}

	/** @var BitrixMainTypeDateTime $idleDate */
	$idleDate = $status['IDLE'];
	if ($idleDate)
	{
		$result['STATUS'] = 'idle';
		$result['STATUS_TEXT'] = GetMessage('IM_STATUS_IDLE');
		$result['LAST_SEEN'] = $idleDate->getTimestamp();
		$result['LAST_SEEN_TEXT'] = CUser::FormatLastActivityDate($idleDate, $now);
	}

	return $result;
}