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