- Модуль: report
- Путь к файлу: ~/bitrix/modules/report/classes/general/report.php
- Класс: CReport
- Вызов: CReport::appendHrefSelectElements
static function appendHrefSelectElements(&$elem, $fList, $entity, $helper_class, &$select, &$runtime)
{
// default href assign
if (empty($elem['href']))
{
$href = call_user_func(array($helper_class, 'getDefaultElemHref'), $elem, $fList);
if (!empty($href))
{
$elem['href'] = $href;
}
}
// user defined or default href
if (!empty($elem['href']))
{
$matches = array();
preg_match_all('/#([a-zA-Z0-9_.:\\]+)#/', $elem['href']['pattern'], $matches);
if (!empty($matches[1]))
{
foreach ($matches[1] as $match)
{
// by default get definition from href
$fieldDefinition = $match;
$fieldAggr = null;
// try to find extended info about href element
if (!empty($elem['href']['elements'][$fieldDefinition]))
{
$fieldDefinition = $elem['href']['elements'][$match]['name'];
if (!empty($elem['href']['elements'][$match]['aggr']))
{
$fieldAggr = $elem['href']['elements'][$match]['aggr'];
}
else
{
// normalize
$elem['href']['elements'][$match]['aggr'] = null;
}
}
else
{
// normalize
$elem['href']['elements'][$fieldDefinition] = array(
'name' => $fieldDefinition,
'aggr' => null
);
}
$fieldAlias = EntityQueryChain::getAliasByDefinition($entity, $fieldDefinition);
// add to select
if (empty($fieldAggr) && !in_array($fieldDefinition, $select, true))
{
$select[$fieldAlias] = $fieldDefinition;
}
elseif (!empty($fieldAggr))
{
$fieldAlias = $fieldAggr.'_'.$fieldAlias;
// add if not exists
if (!array_key_exists($fieldAlias, $select))
{
// get field object
$chain = EntityQueryChain::getChainByDefinition($entity, $fieldDefinition);
$field = $chain->getLastElement()->getValue();
// add to select
if ($fieldAggr == 'COUNT_DISTINCT')
{
$runtime[$fieldAlias] = array(
'data_type' => 'integer', // until we don't have group_concat
'expression' => array(
'COUNT(DISTINCT %s)', $fieldDefinition
)
);
}
else
{
$runtime[$fieldAlias] = array(
'data_type' => call_user_func(array($helper_class, 'getFieldDataType') ,$field),
'expression' => array(
$fieldAggr.'(%s)', $fieldDefinition
)
);
}
$select[] = $fieldAlias;
}
}
} // href pattern and elements saved
}
}
}