- Модуль: report
- Путь к файлу: ~/bitrix/modules/report/classes/general/report.php
- Класс: CReport
- Вызов: CReport::rewriteUserShortName
static function rewriteUserShortName(&$select, &$runtime, $format, $entity, $grc =false)
{
foreach ($select as $k => $def)
{
if (
(is_string($def) && (mb_substr($def, -11) == '.SHORT_NAME' || $def === 'SHORT_NAME'))
|| (is_array($def) && count($def['expression']) === 2 && mb_substr($def['expression'][1], -11) == '.SHORT_NAME')
)
{
$definition = is_string($def) ? $def : $def['expression'][1];
$pre = mb_substr($definition, 0, -11);
$_alias = EntityQueryChain::getAliasByDefinition($entity, $definition);
$expression = self::getFormattedNameExpr($format, $pre);
// show login if names is null
global $DB;
$nNameElements = count($expression) - 1;
if ($nNameElements < 1)
{
$expression = array(
$DB->IsNull('%s', '' ''),
(empty($pre) ? '' : $pre.'.').'LOGIN'
);
}
else
{
$arConcatNameElements = array($DB->IsNull('%s', '' ''));
$n = $nNameElements;
while (--$n > 0)
$arConcatNameElements[] = $DB->IsNull('%s', '' '');
$strConcatNameElements = call_user_func_array(array($DB, 'concat'), $arConcatNameElements);
$expression[0] = 'CASE WHEN '.$DB->Length('LTRIM(RTRIM('.$strConcatNameElements.'))').'>0 THEN '.$expression[0].' ELSE %s END';
for ($i = 1; $i <= $nNameElements; $i++)
$expression[] = $expression[$i];
$expression[] = (empty($pre) ? '' : $pre.'.').'LOGIN';
}
// modify select
unset($select[$k]);
if (is_string($def))
{
$runtime[$_alias] = array(
'data_type' => 'string',
'expression' => $expression
);
}
else
{
// add aggr
if (mb_substr($def['expression'][0], 0, 14) == 'COUNT(DISTINCT')
{
$_alias = 'COUNT_DISTINCT_'.$_alias;
}
elseif ($grc)
{
$_alias = 'GROUP_CONCAT_'.$_alias;
}
$expression[0] = str_replace('%s', $expression[0], $def['expression'][0]);
$runtime[$_alias] = array(
'data_type' => 'integer',
'expression' => $expression
);
}
$select[] = $_alias;
}
}
}