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