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