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