- Модуль: imopenlines
- Путь к файлу: ~/bitrix/modules/imopenlines/lib/im.php
- Класс: BitrixImOpenLinesIm
- Вызов: Im::userIsOnline
static function userIsOnline($id)
{
$result = false;
if(Loader::includeModule('im'))
{
$id = intval($id);
if ($id > 0)
{
$cache = Cache::createInstance();
if ($cache->initCache(self::CACHE_TIME_IM_USER_ONLINE, $id, self::CACHE_DIR_IM_USER_ONLINE))
{
$result = $cache->getVars();
}
elseif ($cache->startDataCache())
{
$lastActivityDate = Queue::getTimeLastActivityOperator();
$timeHelper = Application::getConnection()->getSqlHelper()->addSecondsToDateTime('(-'.$lastActivityDate.')');
$query = new Query(UserTable::getEntity());
$query->setSelect(['IS_ONLINE_CUSTOM']);
$query->registerRuntimeField('', new ReferenceField(
'IM_STATUS',
'BitrixImModelStatusTable',
['=ref.USER_ID' => 'this.ID'],
['join_type'=>'left']
));
$query->registerRuntimeField('',
new ExpressionField(
'IS_ONLINE_CUSTOM',
'CASE WHEN %1$s > '.$timeHelper.' && (%2$s IS NULL || %1$s > %2$s) THEN 'Y' ELSE 'N' END',
['LAST_ACTIVITY_DATE', 'IM_STATUS.IDLE'])
);
$query->setFilter(['ID' => $id]);
$resultQuery = $query->exec();
if ($resultQuery->fetch()['IS_ONLINE_CUSTOM'] == 'Y')
{
$result = true;
}
$cache->endDataCache($result);
}
}
}
return $result;
}