- Модуль: 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;
}