• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/ustat/ustat.php
  • Класс: BitrixIntranetUStatUStat
  • Вызов: UStat::getMaxUserActivity
static function getMaxUserActivity(TypeDateTime $dateFrom, TypeDateTime $dateTo, $interval)
{
	if (!in_array($interval, array('hour', 'day', 'month'), true))
	{
		throw new MainArgumentException('Interval should be the "hour", or "day", or "month".');
	}

	// first, get sum by user
	if ($interval === 'hour')
	{
		$subQuery = new EntityQuery(UserHourTable::getEntity());

		$subQuery->setFilter(array(
			'> array(
				ConvertTimeStamp($dateFrom->getTimestamp(), 'FULL'),
				ConvertTimeStamp($dateTo->getTimestamp(), 'FULL')
			)
		));
	}
	else
	{
		$subQuery = new EntityQuery(UserDayTable::getEntity());

		$subQuery->setFilter(array(
			'> array(
				ConvertTimeStamp($dateFrom->getTimestamp()),
				ConvertTimeStamp($dateTo->getTimestamp())
			)
		));
	}

	$subQuery->addSelect(new EntityExpressionField('TOTAL_SUM', 'SUM(%s)', 'TOTAL'));

	foreach (UserHourTable::getSectionNames() as $sectionName)
	{
		$subQuery->addSelect(new EntityExpressionField($sectionName.'_SUM', 'SUM(%s)', $sectionName));
	}

	$subQuery->setGroup('USER_ID');

	// then get max values
	$query = new EntityQuery($subQuery);

	$query->addSelect(new EntityExpressionField('TOTAL', 'MAX(%s)', 'TOTAL_SUM'));

	foreach (UserHourTable::getSectionNames() as $sectionName)
	{
		$query->addSelect(new EntityExpressionField($sectionName, 'MAX(%s)', $sectionName.'_SUM'));
	}

	$result = $query->exec();
	$data = $result->fetch();

	return $data;
}