Example #1
0
 public function getRegisteredChain($key, $force_create = false)
 {
     if (isset($this->global_chains[$key])) {
         return $this->global_chains[$key];
     }
     if ($force_create) {
         $chain = QueryChain::getChainByDefinition($this->init_entity, $key);
         $this->registerChain('global', $chain);
         return $chain;
     }
     return false;
 }
Example #2
0
     $grcSelect[] = $alias;
 } else {
     // normal field
     $alias = Entity\QueryChain::getAliasByDefinition($entity, $elem['name']);
     $grcSelect[$alias] = $selElem;
 }
 CReport::rewriteUserShortName($grcSelect, $runtime, $arParams['USER_NAME_FORMAT'], $entity, true);
 // add primary of grc entity field
 $grcChain = Entity\QueryChain::getChainByDefinition($entity, $elem['name']);
 $grc_field = $grcChain->getLastElement()->getValue();
 if (is_array($grc_field)) {
     $grc_field = end($grc_field);
 }
 $grc_primary = end($grc_field->getEntity()->getPrimaryArray());
 $grc_marker = substr($elem['name'], 0, strrpos($elem['name'], '.')) . '.' . $grc_primary;
 $grc_marker_alias = Entity\QueryChain::getAliasByDefinition($entity, $grc_marker);
 $grcSelect[$grc_marker_alias] = $grc_marker;
 // select
 $resultName = $viewColumns[$num]['resultName'];
 $grcData[$resultName] = array();
 $grc_query = new Entity\Query($entity);
 $grc_query->setSelect($grcSelect);
 $grc_query->setFilter($grcFilter);
 foreach ($runtime as $k => $v) {
     $grc_query->registerRuntimeField($k, $v);
 }
 $result = $grc_query->exec();
 while ($row = $result->fetch()) {
     if (empty($row[$grc_marker_alias])) {
         continue;
     }
Example #3
0
 public static function getAliasByChain(QueryChain $chain)
 {
     $alias = array();
     $elements = $chain->getAllElements();
     // add prefix of init entity
     if (count($elements) > 2) {
         $alias[] = $chain->getFirstElement()->getAliasFragment();
     }
     // add other members of chain
     /** @var QueryChainElement[] $elements */
     $elements = array_slice($elements, 1);
     foreach ($elements as $element) {
         $fragment = $element->getAliasFragment();
         if (strlen($fragment)) {
             $alias[] = $fragment;
         }
     }
     return join('_', $alias);
 }
Example #4
0
 public static function rewriteUserShortName(&$select, &$runtime, $format, $entity, $grc = false)
 {
     foreach ($select as $k => $def) {
         if (is_string($def) && (substr($def, -11) == '.SHORT_NAME' || $def === 'SHORT_NAME') || is_array($def) && count($def['expression']) === 2 && substr($def['expression'][1], -11) == '.SHORT_NAME') {
             $definition = is_string($def) ? $def : $def['expression'][1];
             $pre = substr($definition, 0, -11);
             $_alias = Entity\QueryChain::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', '\' \''));
                 if (($n = $nNameElements) > 1) {
                     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';
                 if ($nNameElements > 1) {
                     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 (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;
         }
     }
 }
Example #5
0
 public function getBuildFromChains()
 {
     if (is_null($this->buildFromChains)) {
         $this->buildFromChains = array();
         foreach ($this->buildFrom as $elem) {
             // validate if build from scalar or expression
             $chain = QueryChain::getChainByDefinition($this->entity, $elem);
             $field = $chain->getLastElement()->getValue();
             if ($field instanceof ScalarField || $field instanceof ExpressionField) {
                 $this->buildFromChains[] = $chain;
             } else {
                 throw new SystemException(sprintf('Expected ScalarField or ExpressionField in `%s` build_from, but `%s` was given.', $this->name, is_object($field) ? get_class($field) . ':' . $field->getName() : gettype($field)));
             }
         }
     }
     return $this->buildFromChains;
 }
Example #6
0
 public static function rewriteUserShortName(&$select, $format, $entity, $grc = false)
 {
     foreach ($select as $k => $def) {
         if (is_string($def) && substr($def, -11) == '.SHORT_NAME' || is_array($def) && substr($def['expression'][1], -11) == '.SHORT_NAME') {
             $definition = is_string($def) ? $def : $def['expression'][1];
             $pre = substr($definition, 0, -11);
             $_alias = Entity\QueryChain::getAliasByDefinition($entity, $definition);
             $expression = self::getFormattedNameExpr($format, $pre);
             // modify select
             unset($select[$k]);
             if (is_string($def)) {
                 $select[$_alias] = array('data_type' => 'string', 'expression' => $expression);
             } else {
                 // add aggr
                 if (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]);
                 $select[$_alias] = array('data_type' => 'integer', 'expression' => $expression);
             }
         }
     }
 }