- Модуль: intranet
- Путь к файлу: ~/bitrix/modules/intranet/lib/component/ustatonline.php
- Класс: BitrixIntranetComponentUstatOnline
- Вызов: UstatOnline::getCurrentOnlineUserData
public function getCurrentOnlineUserData()
{
global $CACHE_MANAGER;
$cache = new CPHPCache;
$cacheId = "ONLINE_USER_DATA";
$cacheDir = "/intranet/ustat_online/";
if($cache->initCache(300, $cacheId, $cacheDir))
{
$cacheVars = $cache->getVars();
$users = $cacheVars["USERS"];
$count = $cacheVars["COUNT"];
}
else
{
$cache->startDataCache();
$CACHE_MANAGER->StartTagCache($cacheDir);
$users = [];
$date = new DateTime;
$filter = [
'=ACTIVE' => true,
'=IS_REAL_USER' => true,
'>=LAST_ACTIVITY_DATE' => $date->add('-'.$this->getLimitOnlineSeconds().' seconds'),
"!UF_DEPARTMENT" => false,
];
$select = [
"ID", "LAST_NAME", "NAME", "SECOND_NAME", "LOGIN", "PERSONAL_PHOTO", "LAST_ACTIVITY_DATE",
];
$result = UserTable::getList([
'select' => $select,
'filter' => $filter,
'limit' => 7,
'count_total' => true,
'order' => ['LAST_ACTIVITY_DATE' => 'DESC']
]);
$count = $result->getCount();
while ($user = $result->fetch())
{
$element = self::prepareUser($user);
$element = array_change_key_case($element, CASE_LOWER);
foreach ($element as $key => $value)
{
if ($value instanceof DateTime)
{
$element[$key] = date('c', $value->getTimestamp());
}
}
$users[] = $element;
}
$CACHE_MANAGER->EndTagCache();
$cache->endDataCache([
"USERS" => $users,
"COUNT" => $count
]);
}
return [
"users" => $users,
"count" => $count
];
}