- Модуль: conversion
- Путь к файлу: ~/bitrix/modules/conversion/lib/reportcontext.php
- Класс: BitrixConversionReportContext
- Вызов: ReportContext::getCounters
public function getCounters(array $parameters = array())
{
$query = new Query(InternalsContextCounterDayTable::getEntity());
if ($filter = $parameters['filter'])
{
$query->setFilter($filter);
}
$i = 0;
foreach ($this->attributes as $name => $value)
{
self::setAttributeFilter($query, '_conversion_attribute_'.(++ $i).'_', $name, $value);
}
$query->registerRuntimeField(null, new ExpressionField('VALUE_SUM', 'SUM(%s)', array('VALUE')));
$splitNames = array();
if ($split = $parameters['split'])
{
if (! is_array($split))
throw new ArgumentTypeException('parameters[split]', 'array');
foreach ($split as $name => $value)
{
switch ($name)
{
case 'ATTRIBUTE_NAME':
if (! is_string($value))
throw new ArgumentTypeException('parameters[split][ATTRIBUTE_NAME]', 'string');
self::setAttributeFilter($query, 'split_attribute', $value);
$query->addGroup('split_attribute.VALUE');
$query->addSelect('split_attribute.VALUE', 'ATTRIBUTE_VALUE');
$splitNames []= 'ATTRIBUTE_VALUE';
break;
default: throw new ArgumentTypeException('parameters[split]['.$name.']', 'not implemented');
}
}
}
$query->addGroup('NAME');
$query->addSelect('NAME');
$query->addSelect('VALUE_SUM');
$result = $query->exec();
// return $result->fetchAll();
$counters = array();
while ($row = $result->fetch())
{
$level =& $counters;
foreach ($splitNames as $name)
{
if (! $level =& $level[$row[$name]])
{
$level = array();
}
}
$level[$row['NAME']] = $row['VALUE_SUM'];
}
return $counters;
}