private static function loadBulk($entityTypeID, array &$entityIDs, array &$itemMap, array $options = null) { /** @var DuplicateEntityRanking[] $itemMap */ if ($entityTypeID !== \CCrmOwnerType::Contact && $entityTypeID !== \CCrmOwnerType::Company && $entityTypeID !== \CCrmOwnerType::Lead) { return; } if (!is_array($options)) { $options = array(); } $checkPermissions = isset($options['CHECK_PERMISSIONS']) ? (bool) $options['CHECK_PERMISSIONS'] : false; $userID = isset($options['USER_ID']) ? (int) $options['USER_ID'] : 0; $permissions = $checkPermissions ? \CCrmPerms::GetUserPermissions($userID) : null; $limit = isset($options['LIMIT']) ? (int) $options['LIMIT'] : 3000; if ($limit <= 0) { $limit = 3000; } $length = count($entityIDs); if ($length === 0) { return; } while ($length > 0) { if ($length <= $limit) { $ids = $entityIDs; unset($entityIDs); $entityIDs = array(); } else { $ids = array_splice($entityIDs, 0, $limit); } $length = count($entityIDs); if (empty($ids)) { continue; } if ($entityTypeID === \CCrmOwnerType::Lead) { $dbResult = Entity\DuplicateEntityStatisticsTable::getList(array('select' => array('ENTITY_ID', 'RANKING_DATA'), 'filter' => array('ENTITY_TYPE_ID' => \CCrmOwnerType::Lead, 'ENTITY_ID' => $ids))); while ($fields = $dbResult->fetch()) { $entityID = intval($fields['ENTITY_ID']); $key = "{$entityTypeID}_{$entityID}"; if (!isset($itemMap[$key])) { continue; } if (isset($fields['RANKING_DATA']) && $fields['RANKING_DATA'] !== '') { $data = unserialize($fields['RANKING_DATA']); /** @var DuplicateEntityRanking $ranking */ $ranking = $itemMap[$key]; $ranking->lastChanged = isset($data['LAST_CHANGED']) ? $data['LAST_CHANGED'] : 0; $ranking->completeness = isset($data['COMPLETENESS']) ? $data['COMPLETENESS'] : 0; if ($checkPermissions) { $ranking->editable = \CCrmLead::CheckUpdatePermission($entityID, $permissions); $ranking->deleteable = \CCrmLead::CheckDeletePermission($entityID, $permissions); } } } } else { $query = new Main\Entity\Query(Entity\DuplicateEntityStatisticsTable::getEntity()); $query->addSelect('ENTITY_ID'); $query->addSelect('RANKING_DATA'); $query->addFilter('ENTITY_ID', $ids); $query->addFilter('ENTITY_TYPE_ID', $entityTypeID); if ($entityTypeID === \CCrmOwnerType::Contact) { $subQuery = new Main\Entity\Query(DealTable::getEntity()); $subQuery->addSelect('CONTACT_ID'); $subQuery->addFilter('CONTACT_ID', $ids); $subQuery->addSelect('QTY'); $subQuery->registerRuntimeField('', new Main\Entity\ExpressionField('QTY', 'COUNT(*)')); $referenceField = new Main\Entity\ReferenceField('D', Main\Entity\Base::getInstanceByQuery($subQuery), array('=this.ENTITY_ID' => 'ref.CONTACT_ID'), array('join_type' => 'LEFT')); } else { $subQuery = new Main\Entity\Query(DealTable::getEntity()); $subQuery->addSelect('COMPANY_ID'); $subQuery->addFilter('COMPANY_ID', $ids); $subQuery->addSelect('QTY'); $subQuery->registerRuntimeField('', new Main\Entity\ExpressionField('QTY', 'COUNT(*)')); $referenceField = new Main\Entity\ReferenceField('D', Main\Entity\Base::getInstanceByQuery($subQuery), array('=this.ENTITY_ID' => 'ref.COMPANY_ID'), array('join_type' => 'LEFT')); } $query->registerRuntimeField('', $referenceField); $query->addSelect('D.QTY', 'QTY'); $dbResult = $query->exec(); while ($fields = $dbResult->fetch()) { $entityID = intval($fields['ENTITY_ID']); $key = "{$entityTypeID}_{$entityID}"; if (!isset($itemMap[$key])) { continue; } $itemMap[$key]->referenceCount = isset($fields['QTY']) ? intval($fields['QTY']) : 0; if (isset($fields['RANKING_DATA']) && $fields['RANKING_DATA'] !== '') { $data = unserialize($fields['RANKING_DATA']); /** @var DuplicateEntityRanking $ranking */ $ranking = $itemMap[$key]; $ranking->lastChanged = isset($data['LAST_CHANGED']) ? $data['LAST_CHANGED'] : 0; $ranking->completeness = isset($data['COMPLETENESS']) ? $data['COMPLETENESS'] : 0; if ($checkPermissions) { if ($entityTypeID === \CCrmOwnerType::Contact) { $ranking->editable = \CCrmContact::CheckUpdatePermission($entityID, $permissions); $ranking->deleteable = \CCrmContact::CheckDeletePermission($entityID, $permissions); } else { $ranking->editable = \CCrmCompany::CheckUpdatePermission($entityID, $permissions); $ranking->deleteable = \CCrmCompany::CheckDeletePermission($entityID, $permissions); } } } } } } }
function getList($blockId, $fields, $order, $filers) { $entity_requests_data_class = connectToBlock($blockId); $main_query_requests = new Entity\Query($entity_requests_data_class); $main_query_requests->setSelect($fields); //$main_query_requests->setSelect(array('ID','UF_TITLE')); if (!empty($order)) { $main_query_requests->setOrder($order); } if (!empty($filers)) { $main_query_requests->setFilter($filers); /*$main_query_requests->setFilter( array( 'UF_NAME'=>'Александр', ) );*/ } $result_requests = $main_query_requests->exec(); $result_requests = new CDBResult($result_requests); $requests = array(); while ($row_requests = $result_requests->Fetch()) { $requests[] = $row_requests; //массив выбранных элементов } return $requests; }
/** * @return array */ public function getList(array $params) { /** @var Filter $filter */ $filter = isset($params['filter']) ? $params['filter'] : null; if (!$filter instanceof Filter) { throw new Main\ObjectNotFoundException("The 'filter' is not found in params."); } /** @var array $select */ $select = isset($params['select']) && is_array($params['select']) ? $params['select'] : array(); $name = ''; if (!empty($select)) { $selectItem = $select[0]; if (isset($selectItem['name'])) { $name = $selectItem['name']; } } if ($name === '') { $name = 'COUNT'; } $group = isset($params['group']) ? strtoupper($params['group']) : ''; if ($group !== '' && $group !== self::GROUP_BY_DATE) { $group = ''; } $enableGroupByDate = $group !== ''; $period = $filter->getPeriod(); $periodStartDate = $period['START']; $periodEndDate = $period['END']; $query = new Query(DealStageHistoryTable::getEntity()); $query->registerRuntimeField('', new ExpressionField($name, "COUNT(*)")); $query->addSelect($name); $query->addFilter('=TYPE_ID', HistoryEntryType::CREATION); $query->addFilter('>=START_DATE', $periodStartDate); $query->addFilter('<=START_DATE', $periodEndDate); if ($enableGroupByDate) { $query->addSelect('START_DATE', 'DATE'); $query->addGroup('START_DATE'); $query->addOrder('START_DATE', 'ASC'); } $query->registerRuntimeField('', new ExpressionField('E1', '(CASE WHEN NOT EXISTS(' . self::prepareHistoryQuery($periodStartDate, $periodEndDate, HistoryEntryType::MODIFICATION, '%s', '_h')->getQuery() . ') THEN 1 ELSE 0 END)', 'OWNER_ID')); $query->addFilter('=E1', 1); $query->registerRuntimeField('', new ExpressionField('E2', '(CASE WHEN NOT EXISTS(' . self::prepareHistoryQuery($periodStartDate, $periodEndDate, HistoryEntryType::FINALIZATION, '%s', '_h')->getQuery() . ') THEN 1 ELSE 0 END)', 'OWNER_ID')); $query->addFilter('=E2', 1); $query->registerRuntimeField('', new ExpressionField('E3', '(CASE WHEN NOT EXISTS(' . self::prepareActivityQuery($periodStartDate, $periodEndDate, '%s', '_a')->getQuery() . ') THEN 1 ELSE 0 END)', 'OWNER_ID')); $query->addFilter('=E3', 1); $query->registerRuntimeField('', new ExpressionField('E4', '(CASE WHEN NOT EXISTS(' . self::prepareInvoiceQuery($periodStartDate, $periodEndDate, '%s', '_i')->getQuery() . ') THEN 1 ELSE 0 END)', 'OWNER_ID')); $query->addFilter('=E4', 1); $results = array(); $dbResult = $query->exec(); while ($ary = $dbResult->fetch()) { if ($enableGroupByDate) { /** @var Date $date */ $date = $ary['DATE']; $ary['DATE'] = $date->format('Y-m-d'); } $results[] = $ary; } return $results; }
/** * Executes the query * * @param string $filterField * @param mixed $filterFieldValue * @param string $method * * @return \Bitrix\Main\DB\MysqlResult */ private function execute($filterField, $filterFieldValue, $method) { $queryBuilder = new Entity\Query(Model\VarsGroupTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'CODE'))->setOrder(array('ID' => 'ASC'))->setFilter(array($filterField => $filterFieldValue)); if ($method == 'findOneBy') { $queryBuilder->setLimit(1); } return $queryBuilder->exec(); }
public function validate($value, $primary, array $row, Entity\Field $field) { $query = new Entity\Query($this->reference->getEntity()); $query->setFilter(array('=' . $this->reference->getName() => $value) + $this->filter); $query->setLimit(1); $result = $query->exec(); if ($result->fetch()) { return true; } return new Entity\FieldError($field, $this->getErrorMessage($value, $field), self::NOT_EXISTS); }
/** @return array */ public function getList(array $params) { /** @var Filter $filter */ $filter = isset($params['filter']) ? $params['filter'] : null; if (!$filter instanceof Filter) { throw new Main\ObjectNotFoundException("The 'filter' is not found in params."); } $permissionSql = ''; if ($this->enablePermissionCheck) { $permissionSql = $this->preparePermissionSql(); if ($permissionSql === false) { //Access denied; return array(); } } $period = $filter->getPeriod(); $periodStartDate = $period['START']; $periodEndDate = $period['END']; $query = new Query(DealStageHistoryTable::getEntity()); $query->addSelect('STAGE_ID'); $query->addSelect('QTY'); $query->registerRuntimeField('', new ExpressionField('QTY', 'COUNT(DISTINCT OWNER_ID)')); $typeID = $filter->getExtraParam('typeID', HistoryEntryType::UNDEFINED); if ($typeID !== HistoryEntryType::UNDEFINED) { $query->addFilter('=TYPE_ID', $typeID); if ($typeID === HistoryEntryType::CREATION) { $query->addFilter('>=START_DATE', $periodStartDate); $query->addFilter('<=START_DATE', $periodEndDate); } elseif ($typeID === HistoryEntryType::MODIFICATION) { $query->addFilter('>=CREATED_TIME', $periodStartDate); $query->addFilter('<=CREATED_TIME', $periodEndDate); } elseif ($typeID === HistoryEntryType::FINALIZATION) { $query->addFilter('>=END_DATE', $periodStartDate); $query->addFilter('<=END_DATE', $periodEndDate); } } if ($this->enablePermissionCheck && is_string($permissionSql) && $permissionSql !== '') { $query->addFilter('@OWNER_ID', new SqlExpression($permissionSql)); } $responsibleIDs = $filter->getResponsibleIDs(); if (!empty($responsibleIDs)) { $query->addFilter('@RESPONSIBLE_ID', $responsibleIDs); } $query->addGroup('STAGE_ID'); $dbResult = $query->exec(); //Trace('sql', Query::getLastQuery(), 1); $result = array(); while ($ary = $dbResult->fetch()) { $result[] = $ary; } return $result; }
/** * Deletes unnecessary files, which don't relate to version or object. * * @param int $portion Count of files which we want to delete. Default value is 10. * @return string */ public static function deleteUnnecessaryFiles($portion = 10) { $query = new Query(FileTable::getEntity()); $query->addSelect('ID')->addFilter('=EXTERNAL_ID', 'unnecessary')->addFilter('=MODULE_ID', Driver::INTERNAL_MODULE_ID)->setLimit($portion); $workLoad = false; $dbResult = $query->exec(); while ($row = $dbResult->fetch()) { $workLoad = true; \CFile::delete($row['ID']); } if (!$workLoad) { return ''; } return static::className() . '::deleteUnnecessaryFiles();'; }
/** * @return boolean */ public static function isRegistered($ownerID) { if (!is_int($ownerID)) { $ownerID = (int) $ownerID; } if ($ownerID <= 0) { throw new Main\ArgumentException('Owner ID must be greater than zero.', 'ownerID'); } $query = new Query(DealInvoiceStatisticsTable::getEntity()); $query->addSelect('CREATED_DATE'); $query->addFilter('=OWNER_ID', $ownerID); $query->setLimit(1); $dbResult = $query->exec(); $result = $dbResult->fetch(); return is_array($result); }
function elemGetEx($elemId = false) { $hlHandler = $this->hlHandler; $getList = new Entity\Query($hlHandler); $getList->setSelect(array('*')); $getList->setOrder(array("ID" => "ASC")); if (!empty($elemId)) { $getList->setFilter(array("ID" => $elemId)); } $result = $getList->exec(); $result = new CDBResult($result); $arRes = array(); while ($row = $result->Fetch()) { $arRes[] = $row; } return $arRes; }
public function calculateEntityCount(DuplicateCriterion $criterion, array $options = null) { $entityTypeID = $this->getEntityTypeID(); $enablePermissionCheck = $this->isPermissionCheckEnabled(); $userID = $this->getUserID(); $query = new Main\Entity\Query(DuplicateOrganizationMatchCodeTable::getEntity()); $query->addSelect('QTY'); $query->registerRuntimeField('', new Main\Entity\ExpressionField('QTY', 'COUNT(*)')); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); if ($enablePermissionCheck) { $permissionSql = $this->preparePermissionSql(); if ($permissionSql === false) { //Access denied; return 0; } if (is_string($permissionSql) && $permissionSql !== '') { $query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } } $matches = $criterion->getMatches(); $title = isset($matches['TITLE']) ? $matches['TITLE'] : ''; if ($title === '') { throw new Main\ArgumentException("Parameter 'TITLE' is required.", 'matches'); } $query->addFilter('=TITLE', $title); $rootEntityID = 0; if (is_array($options) && isset($options['ROOT_ENTITY_ID'])) { $rootEntityID = (int) $options['ROOT_ENTITY_ID']; } if ($rootEntityID > 0) { $query->addFilter('!ENTITY_ID', $rootEntityID); $query->addFilter('!@ENTITY_ID', DuplicateIndexMismatch::prepareQueryField($criterion, $entityTypeID, $rootEntityID, $userID)); } $limit = 0; if (is_array($options) && isset($options['LIMIT'])) { $limit = (int) $options['LIMIT']; } if ($limit > 0) { $query->setLimit($limit); } $dbResult = $query->exec(); $fields = $dbResult->fetch(); return is_array($fields) && isset($fields['QTY']) ? intval($fields['QTY']) : 0; }
public function validate($value, $primary, array $row, Entity\Field $field) { $entity = $field->getEntity(); $primaryNames = $entity->getPrimaryArray(); $query = new Entity\Query($entity); $query->setSelect($primaryNames); $query->setFilter(array('=' . $field->getName() => $value)); $query->setLimit(2); $result = $query->exec(); while ($existing = $result->fetch()) { // check primary foreach ($existing as $k => $v) { if (!isset($primary[$k]) || $primary[$k] != $existing[$k]) { return $this->getErrorMessage($value, $field); } } } return true; }
public static function getMismatches($entityTypeID, $entityID, $typeID, $matchHash, $userID, $limit = 0) { if (!is_int($limit)) { $limit = (int) $limit; } $results = array(); $query = new Main\Entity\Query(Entity\DuplicateIndexMismatchTable::getEntity()); $query->addSelect('R_ENTITY_ID', 'ENTITY_ID'); $query->addFilter('=USER_ID', $userID); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=TYPE_ID', $typeID); $query->addFilter('=MATCH_HASH', $matchHash); $query->addFilter('=L_ENTITY_ID', $entityID); if ($limit > 0) { $query->addOrder('R_ENTITY_ID', 'ASC'); $query->setLimit($limit); } $dbResult = $query->exec(); while ($fields = $dbResult->fetch()) { $results[] = (int) $fields['ENTITY_ID']; } $query = new Main\Entity\Query(Entity\DuplicateIndexMismatchTable::getEntity()); $query->addSelect('L_ENTITY_ID', 'ENTITY_ID'); $query->addFilter('=USER_ID', $userID); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=TYPE_ID', $typeID); $query->addFilter('=MATCH_HASH', $matchHash); $query->addFilter('=R_ENTITY_ID', $entityID); if ($limit > 0) { $query->addOrder('L_ENTITY_ID', 'ASC'); $query->setLimit($limit); } $dbResult = $query->exec(); while ($fields = $dbResult->fetch()) { $results[] = (int) $fields['ENTITY_ID']; } return $results; }
$arResult['FILTER_PROPERTY'] = $filterLexer->getProperty(); $arResult['FILTER_PRICE_TYPE'] = $filterLexer->getPriceType(); $arResult['FILTER_VALUE'] = $filterLexer->getValue(); } if (array_key_exists('SECTION_ID', $arResult)) { $queryBuilder = new Entity\Query(IBlock\SectionTable::getEntity()); $queryBuilder->setSelect(array('*'))->setFilter(array('ID' => $arResult['SECTION_ID'])); $sectionResult = $queryBuilder->exec(); while ($section = $sectionResult->fetch()) { $arResult['SECTIONS'][$section['ID']] = $section; } } if (array_key_exists('IBLOCKS_ID', $arResult)) { $queryBuilder = new Entity\Query(IBlock\IblockTable::getEntity()); $queryBuilder->setSelect(array('*'))->setFilter(array('ID' => $arResult['IBLOCKS_ID'])); $iblockResult = $queryBuilder->exec(); while ($iblock = $iblockResult->fetch()) { $arResult['IBLOCKS'][$iblock['ID']] = $iblock; } } if ($request->isPost() && $arResult['COMPONENT_ID'] == $request->getPost('COMPONENT_ID')) { $subscribeManager = new \Citfact\FilterSubscribe\SubscribeManager(); $response = array(); if ('DELETE' == $request->getPost('ACTION')) { $filterUserId = (int) $request->getPost('ID'); try { $removeResult = $subscribeManager->removeFilterUser($filterUserId); $response['success'] = $removeResult->isSuccess(); $response['errors'] = $removeResult->getErrorMessages(); } catch (\Exception $e) { $response['success'] = false;
/** * @return boolean */ public static function synchronize($ownerID, array $entityFields = null) { if (!is_int($ownerID)) { $ownerID = (int) $ownerID; } if ($ownerID <= 0) { throw new Main\ArgumentException('Owner ID must be greater than zero.', 'ownerID'); } $query = new Query(DealActivityStatisticsTable::getEntity()); $query->addSelect('RESPONSIBLE_ID'); $query->addFilter('=OWNER_ID', $ownerID); $query->setLimit(1); $dbResult = $query->exec(); $first = $dbResult->fetch(); if (!is_array($first)) { return false; } if (!is_array($entityFields)) { $dbResult = \CCrmDeal::GetListEx(array(), array('=ID' => $ownerID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ASSIGNED_BY_ID')); $entityFields = is_object($dbResult) ? $dbResult->Fetch() : null; if (!is_array($entityFields)) { return false; } } $responsibleID = isset($entityFields['ASSIGNED_BY_ID']) ? (int) $entityFields['ASSIGNED_BY_ID'] : 0; if ($responsibleID === (int) $first['RESPONSIBLE_ID']) { return false; } DealActivityStatisticsTable::synchronize($ownerID, array('RESPONSIBLE_ID' => $responsibleID)); return true; }
/** * Set values for property with type G(link to section). */ protected function setSectionValue() { $iblockList = $this->getListByType('G'); $queryBuilder = new Entity\Query(Iblock\SectionTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'XML_ID'))->setFilter(array('IBLOCK_ID' => $iblockList))->setOrder(array()); $sectionResult = $queryBuilder->exec(); while ($section = $sectionResult->fetch()) { foreach ($this->iblockProperty as &$field) { if ($field['PROPERTY_TYPE'] != 'G') { continue; } if ($field['LINK_IBLOCK_ID'] == $section['IBLOCK_ID']) { $field['VALUE_LIST'][] = $section; } } } }
$contextMenu[] = array('TEXT' => Loc::getMessage('USER_VARS_EDIT_GROUP'), 'TITLE' => Loc::getMessage('USER_VARS_EDIT_GROUP'), 'LINK' => 'user_vars_group_edit.php?ID=' . $dataGroup['ID'] . '&lang=' . LANGUAGE_ID, 'ICON' => 'btn_edit'); $varsMap = Model\VarsTable::getMap(); $headers = array(array('id' => 'ID', 'content' => 'ID', 'sort' => 'ID', 'default' => true), array('id' => 'NAME', 'content' => $varsMap['NAME']['title'], 'sort' => 'NAME', 'default' => true), array('id' => 'CODE', 'content' => $varsMap['CODE']['title'], 'sort' => 'CODE', 'default' => true), array('id' => 'VALUE', 'content' => $varsMap['VALUE']['title'], 'sort' => 'VALUE', 'default' => true), array('id' => 'DESCRIPTION', 'content' => $varsMap['DESCRIPTION']['title'], 'sort' => 'DESCRIPTION', 'default' => true)); $tableId = 'tbl_user_vars_list'; $adminSort = new CAdminSorting($tableId, 'NAME', 'asc'); $adminList = new CAdminList($tableId, $adminSort); $adminList->addHeaders($headers); if ($request->getQuery('mode') != 'list') { $context = new CAdminContextMenu($contextMenu); } $queryBuilder = new Entity\Query(Model\VarsTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'CODE', 'DESCRIPTION', 'VALUE'))->setFilter(array('GROUP_ID' => $dataGroup['ID'])); $sortBy = $request->getQuery('by') ? strtoupper($request->getQuery('by')) : 'ID'; $sortOrder = $request->getQuery('order') ?: 'asc'; $queryBuilder->setOrder(array($sortBy => $sortOrder)); $resultData = new CAdminResult($queryBuilder->exec(), $tableId); $resultData->navStart(); $adminList->navText($resultData->getNavPrint(Loc::getMessage('PAGES'))); while ($item = $resultData->fetch()) { $row = $adminList->addRow($item['ID'], $item); $actions = array(); $actions[] = array('ICON' => 'edit', 'TEXT' => Loc::GetMessage('USER_VARS_ACTION_EDIT_VAR'), 'ACTION' => $adminList->actionRedirect('user_vars_edit.php?ID=' . $item['ID'] . '&GROUP_ID=' . $dataGroup['ID'])); $actions[] = array('ICON' => 'delete', 'TEXT' => Loc::getMessage('USER_VARS_ACTION_DELETE_VAR'), 'ACTION' => "if(confirm('" . Loc::getMessage('USER_VARS_DELETE_VAR_CONFIRM') . "')) " . $adminList->actionRedirect('user_vars_edit.php?action=delete&ID=' . $item['ID'] . '&GROUP_ID=' . $dataGroup['ID'] . '&' . bitrix_sessid_get())); $row->addActions($actions); } $prologType = $request->getQuery('mode') == 'list' ? 'prolog_js' : 'prolog'; require sprintf('%s%s', getenv('DOCUMENT_ROOT'), $includePath[$prologType]); if ($prologType != 'prolog_js') { $context->show(); } $adminList->checkListMode();
public static function synchronize($ownerID, array $entityFields = null) { if (!is_int($ownerID)) { $ownerID = (int) $ownerID; } if ($ownerID <= 0) { throw new Main\ArgumentException('Owner ID must be greater than zero.', 'ownerID'); } $query = new Query(DealStageHistoryTable::getEntity()); $query->addSelect('START_DATE'); $query->addSelect('END_DATE'); $query->addSelect('RESPONSIBLE_ID'); $query->addFilter('=OWNER_ID', $ownerID); $query->setLimit(1); $dbResult = $query->exec(); $first = $dbResult->fetch(); if (!is_array($first)) { return false; } if (!is_array($entityFields)) { $dbResult = \CCrmDeal::GetListEx(array(), array('=ID' => $ownerID, 'CHECK_PERMISSIONS' => 'N'), false, false, array('ASSIGNED_BY_ID', 'BEGINDATE', 'CLOSEDATE')); $entityFields = is_object($dbResult) ? $dbResult->Fetch() : null; if (!is_array($entityFields)) { return false; } } $responsibleID = isset($entityFields['ASSIGNED_BY_ID']) ? (int) $entityFields['ASSIGNED_BY_ID'] : 0; $beginDate = isset($entityFields['BEGINDATE']) ? $entityFields['BEGINDATE'] : ''; /** @var Date $startDate */ $startDate = new Date($beginDate); $closeDate = isset($entityFields['CLOSEDATE']) ? $entityFields['CLOSEDATE'] : ''; /** @var Date $endDate */ $endDate = $closeDate !== '' ? new Date($closeDate) : new Date('9999-12-31', 'Y-m-d'); if ($startDate->getTimestamp() === $first['START_DATE']->getTimestamp() && $endDate->getTimestamp() === $first['END_DATE']->getTimestamp() && $responsibleID === (int) $first['RESPONSIBLE_ID']) { return false; } DealStageHistoryTable::synchronize($ownerID, array('START_DATE' => $startDate, 'END_DATE' => $endDate, 'RESPONSIBLE_ID' => $responsibleID)); return true; }
protected static function getHourlyCompanyActivitySince(Type\DateTime $hour = null) { $query = new Entity\Query('Bitrix\\Intranet\\UStat\\UserHourTable'); // set all activity columns $uStatFields = UserHourTable::getEntity()->getFields(); foreach ($uStatFields as $uStatField) { if ($uStatField instanceof Entity\ScalarField && !$uStatField->isPrimary()) { $query->addSelect(new Entity\ExpressionField($uStatField->getName() . '_SUM', 'SUM(%s)', $uStatField->getName())); } } // add & automatically group by hour $query->addSelect('HOUR'); // add filter by date if ($hour !== null) { $query->setFilter(array('>=HOUR' => \ConvertTimeStamp($hour->getTimestamp(), 'FULL'))); } // collect activity $activity = array(); $result = $query->exec(); while ($row = $result->fetch()) { foreach ($row as $k => $v) { if (substr($k, -4) === '_SUM') { $row[substr($k, 0, -4)] = $v; unset($row[$k]); } } $activity[] = $row; } return $activity; }
public static function normalizeLocationList($denormalizedList = array()) { if (empty($denormalizedList)) { return array(); } $useCodes = static::getUseCodes(); $denormalizedList = array_flip($denormalizedList); $query = new Entity\Query('Bitrix\\Sale\\Location\\Location'); $query->setSelect(array('PARENT_ID', 'ID', 'CODE', 'LNAME' => 'NAME.NAME')); $query->setFilter(array('NAME.LANGUAGE_ID' => LANGUAGE_ID)); // tmp $query->setOrder(array('LEFT_MARGIN' => 'desc')); // important $res = $query->exec(); // make table of children count for each node $relations = array(); $selected = array(); while ($item = $res->fetch()) { if (!isset($relations[$item['ID']]['name'])) { // tmp $relations[$item['ID']]['name'] = $item['LNAME']; } if (!isset($relations[$item['ID']]['total'])) { $relations[$item['ID']]['total'] = 0; } if (!isset($relations[$item['ID']]['selected'])) { $relations[$item['ID']]['selected'] = 0; } /// if ($item['PARENT_ID'] != 0) { if (!isset($relations[$item['PARENT_ID']]['total'])) { $relations[$item['PARENT_ID']]['total'] = 0; } if (!isset($relations[$item['PARENT_ID']]['selected'])) { $relations[$item['PARENT_ID']]['selected'] = 0; } } $relations[$item['PARENT_ID']]['total'] += 1 + $relations[$item['ID']]['total']; if (isset($denormalizedList[$item['ID']])) { $relations[$item['PARENT_ID']]['selected'] += 1 + $relations[$item['ID']]['selected']; $selected[$item['ID']] = $item; } } // now make up list of nodes which we`ll remove $removeItems = array(); $removeChildrenOf = array(); foreach ($relations as $id => $rel) { if ($rel['total'] > 0) { if ($rel['total'] == $rel['selected']) { if (isset($selected[$id])) { // item should be selected itself to remove its children $removeChildrenOf[$id] = true; } } elseif ($rel['selected'] > 0) { // selected M of N of children, where M > 0, so remove item itself $removeItems[$id] = true; } } } $normalized = array(); foreach ($selected as $id => $item) { if (!($item['PARENT_ID'] && $removeChildrenOf[$item['PARENT_ID']]) && !$removeItems[$item['ID']]) { $normalized[] = $item[$useCodes ? 'CODE' : 'ID']; } } return $normalized; }
protected function getRootEntityID($matchHash) { $query = new Main\Entity\Query(Entity\DuplicateIndexTable::getEntity()); $query->addSelect('ROOT_ENTITY_ID'); $query->addFilter('=USER_ID', $this->getUserID()); $query->addFilter('=ENTITY_TYPE_ID', $this->getEntityTypeID()); $query->addFilter('=TYPE_ID', $this->typeID); $query->addFilter('=MATCH_HASH', $matchHash); $fields = $query->exec()->fetch(); return is_array($fields) ? (int) $fields['ROOT_ENTITY_ID'] : 0; }
protected function onAfterDuplicateCreated(Duplicate $dup, $entityTypeID, $userID, $enablePermissionCheck, $enableRanking, array &$rankings) { $name = $this->name; $lastName = $this->lastName; $secondName = $this->secondName; $rootEntityID = $dup->getRootEntityID(); if ($secondName === '' && $name === '') { return; } $permissionSql = ''; if ($enablePermissionCheck) { $permissions = isset($params['PERMISSIONS']) ? $params['PERMISSIONS'] : null; if ($permissions === null) { $permissions = \CCrmPerms::GetUserPermissions($userID); } $permissionSql = \CCrmPerms::BuildSql(\CCrmOwnerType::ResolveName($entityTypeID), '', 'READ', array('RAW_QUERY' => true, 'PERMS' => $permissions)); if ($permissionSql === false) { //Access denied; return; } } if ($secondName !== '') { $query = new Main\Entity\Query(DuplicatePersonMatchCodeTable::getEntity()); $query->addSelect('ENTITY_ID'); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=LAST_NAME', $lastName); $query->addFilter('=NAME', $name); $query->addFilter('=SECOND_NAME', ''); if ($rootEntityID) { $query->addFilter('!ENTITY_ID', $rootEntityID); $query->addFilter('!@ENTITY_ID', DuplicateIndexMismatch::prepareQueryField(self::createFromMatches(array('LAST_NAME' => $lastName, 'NAME' => $name)), $entityTypeID, $rootEntityID, $userID)); } if ($enablePermissionCheck && $permissionSql !== '') { $query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } $dbResult = $query->exec(); while ($fields = $dbResult->fetch()) { $entityID = isset($fields['ENTITY_ID']) ? intval($fields['ENTITY_ID']) : 0; if ($entityID <= 0) { continue; } $entity = new DuplicateEntity($entityTypeID, $entityID); $entity->setCriterion(self::createFromMatches(array('LAST_NAME' => $lastName, 'NAME' => $name))); if ($enableRanking) { $rankings[] = $entity->getRanking(); } $dup->addEntity($entity); } } if ($name !== '') { $query = new Main\Entity\Query(DuplicatePersonMatchCodeTable::getEntity()); $query->addSelect('ENTITY_ID'); $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID); $query->addFilter('=LAST_NAME', $lastName); $query->addFilter('=NAME', ''); $query->addFilter('=SECOND_NAME', ''); if ($rootEntityID) { $query->addFilter('!ENTITY_ID', $rootEntityID); $query->addFilter('!@ENTITY_ID', DuplicateIndexMismatch::prepareQueryField(self::createFromMatches(array('LAST_NAME' => $lastName)), $entityTypeID, $rootEntityID, $userID)); } if ($enablePermissionCheck && $permissionSql !== '') { $query->addFilter('@ENTITY_ID', new Main\DB\SqlExpression($permissionSql)); } $dbResult = $query->exec(); while ($fields = $dbResult->fetch()) { $entityID = isset($fields['ENTITY_ID']) ? intval($fields['ENTITY_ID']) : 0; if ($entityID <= 0) { continue; } $entity = new DuplicateEntity($entityTypeID, $entityID); $entity->setCriterion(self::createFromMatches(array('LAST_NAME' => $lastName))); if ($enableRanking) { $rankings[] = $entity->getRanking(); } $dup->addEntity($entity); } } }
function compatibleNavQuery(Query $query, array $arNavStartParams) { $cnt = $query->exec()->getSelectedRowsCount(); // TODO check groups global $DB; if (isset($arNavStartParams["SubstitutionFunction"])) { $arNavStartParams["SubstitutionFunction"]($this, $query->getLastQuery(), $cnt, $arNavStartParams); return null; } if (isset($arNavStartParams["bDescPageNumbering"])) { $bDescPageNumbering = $arNavStartParams["bDescPageNumbering"]; } else { $bDescPageNumbering = false; } $this->InitNavStartVars($arNavStartParams); $this->NavRecordCount = $cnt; if ($this->NavShowAll) { $this->NavPageSize = $this->NavRecordCount; } //calculate total pages depend on rows count. start with 1 $this->NavPageCount = $this->NavPageSize > 0 ? floor($this->NavRecordCount / $this->NavPageSize) : 0; if ($bDescPageNumbering) { $makeweight = 0; if ($this->NavPageSize > 0) { $makeweight = $this->NavRecordCount % $this->NavPageSize; } if ($this->NavPageCount == 0 && $makeweight > 0) { $this->NavPageCount = 1; } //page number to display $this->NavPageNomer = $this->PAGEN < 1 || $this->PAGEN > $this->NavPageCount ? $_SESSION[$this->SESS_PAGEN] < 1 || $_SESSION[$this->SESS_PAGEN] > $this->NavPageCount ? $this->NavPageCount : $_SESSION[$this->SESS_PAGEN] : $this->PAGEN; //rows to skip $NavFirstRecordShow = 0; if ($this->NavPageNomer != $this->NavPageCount) { $NavFirstRecordShow += $makeweight; } $NavFirstRecordShow += ($this->NavPageCount - $this->NavPageNomer) * $this->NavPageSize; $NavLastRecordShow = $makeweight + ($this->NavPageCount - $this->NavPageNomer + 1) * $this->NavPageSize; } else { if ($this->NavPageSize > 0 && $this->NavRecordCount % $this->NavPageSize > 0) { $this->NavPageCount++; } //calculate total pages depend on rows count. start with 1 if ($this->PAGEN >= 1 && $this->PAGEN <= $this->NavPageCount) { $this->NavPageNomer = $this->PAGEN; } elseif ($_SESSION[$this->SESS_PAGEN] >= 1 && $_SESSION[$this->SESS_PAGEN] <= $this->NavPageCount) { $this->NavPageNomer = $_SESSION[$this->SESS_PAGEN]; } elseif ($arNavStartParams["checkOutOfRange"] !== true) { $this->NavPageNomer = 1; } else { return null; } //rows to skip $NavFirstRecordShow = $this->NavPageSize * ($this->NavPageNomer - 1); $NavLastRecordShow = $this->NavPageSize * $this->NavPageNomer; } $NavAdditionalRecords = 0; if (is_set($arNavStartParams, "iNavAddRecords")) { $NavAdditionalRecords = $arNavStartParams["iNavAddRecords"]; } if (!$this->NavShowAll) { $query->setOffset($NavFirstRecordShow); $query->setLimit($NavLastRecordShow - $NavFirstRecordShow + $NavAdditionalRecords); } $res_tmp = $query->exec(); //, $bIgnoreErrors); // // Return false on sql errors (if $bIgnoreErrors == true) // if ($bIgnoreErrors && ($res_tmp === false)) // return false; // $this->result = $res_tmp->result; $this->DB = DB; if ($this->SqlTraceIndex) { $start_time = microtime(true); } $temp_arrray = array(); $temp_arrray_add = array(); $tmp_cnt = 0; while ($ar = $res_tmp->fetch()) { $tmp_cnt++; if (intval($NavLastRecordShow - $NavFirstRecordShow) > 0 && $tmp_cnt > $NavLastRecordShow - $NavFirstRecordShow) { $temp_arrray_add[] = $ar; } else { $temp_arrray[] = $ar; } } if ($this->SqlTraceIndex) { /** @noinspection PhpUndefinedVariableInspection */ $exec_time = round(microtime(true) - $start_time, 10); $DB->addDebugTime($this->SqlTraceIndex, $exec_time); $DB->timeQuery += $exec_time; } $this->arResult = !empty($temp_arrray) ? $temp_arrray : false; $this->arResultAdd = !empty($temp_arrray_add) ? $temp_arrray_add : false; $this->nSelectedCount = $cnt; $this->bDescPageNumbering = $bDescPageNumbering; $this->bFromLimited = true; return null; }
<?php /* * This file is part of the Studio Fact package. * * (c) Kulichkin Denis (onEXHovia) <*****@*****.**> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ use Bitrix\Main\Localization\Loc; use Bitrix\Main\Entity; use Bitrix\Main\Loader; use Citfact\UserVars\Model; Loc::loadMessages(__FILE__); Loader::includeModule('citfact.uservars'); $queryBuilder = new Entity\Query(Model\VarsGroupTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'CODE'))->setOrder(array('ID' => 'ASC')); $varsGroupResult = $queryBuilder->exec(); $varsGroupList = array(); while ($group = $varsGroupResult->fetch()) { $varsGroupList[] = array('text' => $group['NAME'], 'url' => 'user_vars_list.php?GROUP_ID=' . $group['ID'] . '&lang=' . LANG, 'module_id' => 'user_vars', 'more_url' => array('user_vars_edit.php?GROUP_ID=' . $group['ID'] . '&lang=' . LANG)); } $menuList[] = array('parent_menu' => Loader::includeModule('citfact.core') ? 'global_menu_citfact' : 'global_menu_services', 'section' => 'user_vars', 'sort' => 200, 'text' => Loc::getMessage('USER_VARS_TITLE'), 'url' => 'user_vars.php?lang=' . LANGUAGE_ID, 'icon' => 'user_vars_menu_icon', 'page_icon' => 'user_vars_page_icon', 'more_url' => array('user_vars_group_edit.php'), 'items_id' => 'uservars_menu', 'items' => $varsGroupList); return $menuList;
/** * Set values for fields type iblock_section. */ protected function setSectionValue() { $iblockList = $this->getListByType('iblock_section'); $queryBuilder = new Entity\Query(Iblock\SectionTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'IBLOCK_ID', 'IBLOCK_SECTION_ID', 'XML_ID'))->setFilter(array('IBLOCK_ID' => $iblockList))->setOrder(array()); $sectionResult = $queryBuilder->exec(); while ($section = $sectionResult->fetch()) { foreach ($this->highLoadBlockFields as &$field) { if ($field['USER_TYPE_ID'] != 'iblock_section') { continue; } if ($field['SETTINGS']['IBLOCK_ID'] == $section['IBLOCK_ID']) { $field['VALUE_LIST'][] = $section; } } } }
} use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; global $USER_FIELD_MANAGER; // hlblock info $hlblock_id = $arParams['BLOCK_ID']; if (empty($hlblock_id)) { ShowError(GetMessage('HLBLOCK_VIEW_NO_ID')); return 0; } $hlblock = HL\HighloadBlockTable::getById($hlblock_id)->fetch(); if (empty($hlblock)) { ShowError('404'); return 0; } $entity = HL\HighloadBlockTable::compileEntity($hlblock); // row data $main_query = new Entity\Query($entity); $main_query->setSelect(array('*')); $main_query->setFilter(array('=ID' => $arParams['ROW_ID'])); $result = $main_query->exec(); $result = new CDBResult($result); $row = $result->Fetch(); $fields = $USER_FIELD_MANAGER->getUserFieldsWithReadyData('HLBLOCK_' . $hlblock['ID'], $row, LANGUAGE_ID); if (empty($row)) { ShowError(sprintf(GetMessage('HLBLOCK_VIEW_NO_ROW'), $arParams['ROW_ID'])); return 0; } $arResult['fields'] = $fields; $arResult['row'] = $row; $this->IncludeComponentTemplate();
/** * <p>Метод возвращает набор местоположений, связанных с группами местоположений, удовлетворяющих фильтру arFilter. Метод динамичный.</p> * * * @param array $arrayarFilter = Array() Фильтр представляет собой ассоциативный массив, в котором * ключами являются названия параметров записи, а значениями - * условия на значения<br><br> Допустимые ключи: <ul> <li> <b>LOCATION_ID</b> - код * местоположения;</li> <li> <b>LOCATION_GROUP_ID</b> - код группы * местоположений.</li> </ul> * * @return CDBResult <p>Возвращается объект класса CDBResult, содержащий ассоциативные * массивы с ключами:</p> <table class="tnormal" width="100%"> <tr> <th width="15%">Ключ</th> * <th>Описание</th> </tr> <tr> <td>LOCATION_ID</td> <td>Код местоположения.</td> </tr> <tr> * <td>LOCATION_GROUP_ID</td> <td>Код группы местоположений.</td> </tr> </table> <a * name="examples"></a> * * <h4>Example</h4> * <pre> * <? * // Выберем все местоположения группы 2 * $db_res = CSaleLocationGroup::GetLocationList(array("LOCATION_GROUP_ID"=>2)); * while ($ar_res = $db_res->Fetch()) * { * echo $ar_res["LOCATION_ID"].", "; * } * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalelocationgroup/csalelocationgroup__getlocationlist.56a02620.php * @author Bitrix */ public static function GetLocationList($arFilter = array()) { if (CSaleLocation::isLocationProMigrated()) { try { $query = new Entity\Query(self::CONN_ENTITY_NAME); $fieldMap = array('D_SPIKE' => 'D_SPIKE', 'LLOCATION_ID' => 'C.ID', 'LOCATION_GROUP_ID' => 'LOCATION_GROUP_ID'); $fieldProxy = array('LLOCATION_ID' => 'LOCATION_ID'); $query->registerRuntimeField('D_SPIKE', array('data_type' => 'integer', 'expression' => array('distinct %s', 'LOCATION_GROUP_ID'))); $query->registerRuntimeField('L', array('data_type' => self::LOCATION_ENTITY_NAME, 'reference' => array('=this.LOCATION_ID' => 'ref.ID'), 'join_type' => 'inner')); $query->registerRuntimeField('C', array('data_type' => self::LOCATION_ENTITY_NAME, 'reference' => array('LOGIC' => 'OR', array('>=ref.LEFT_MARGIN' => 'this.L.LEFT_MARGIN', '<=ref.RIGHT_MARGIN' => 'this.L.RIGHT_MARGIN'), array('=ref.ID' => 'this.L.ID')), 'join_type' => 'inner')); // select $selectFields = CSaleLocation::processSelectForGetList(array('*'), $fieldMap); // filter list($filterFields, $filterClean) = CSaleLocation::processFilterForGetList($arFilter, $fieldMap, $fieldProxy); $query->setSelect($selectFields); $query->setFilter($filterFields); $res = $query->exec(); $res->addReplacedAliases(array('LLOCATION_ID' => 'LOCATION_ID')); return $res; } catch (Exception $e) { return new DB\ArrayResult(array()); } } else { global $DB; $arSqlSearch = array(); if (!is_array($arFilter)) { $filter_keys = array(); } else { $filter_keys = array_keys($arFilter); } $countFieldKey = count($filter_keys); for ($i = 0; $i < $countFieldKey; $i++) { $val = $DB->ForSql($arFilter[$filter_keys[$i]]); if (strlen($val) <= 0) { continue; } $key = $filter_keys[$i]; if ($key[0] == "!") { $key = substr($key, 1); $bInvert = true; } else { $bInvert = false; } switch (ToUpper($key)) { case "LOCATION_ID": $arSqlSearch[] = "LOCATION_ID " . ($bInvert ? "<>" : "=") . " " . IntVal($val) . " "; break; case "LOCATION_GROUP_ID": $arSqlSearch[] = "LOCATION_GROUP_ID " . ($bInvert ? "<>" : "=") . " " . IntVal($val) . " "; break; } } $strSqlSearch = ""; $countSqlSearch = count($arSqlSearch); for ($i = 0; $i < $countSqlSearch; $i++) { $strSqlSearch .= " AND "; $strSqlSearch .= " (" . $arSqlSearch[$i] . ") "; } $strSql = "SELECT LOCATION_ID, LOCATION_GROUP_ID " . "FROM b_sale_location2location_group " . "WHERE 1 = 1 " . "\t" . $strSqlSearch . " "; $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); return $res; } }
public static function getCount() { $query = new Query(static::getEntity()); $query->setSelect(array('CNT' => array('expression' => array('COUNT(*)'), 'data_type' => 'integer'))); $result = $query->exec()->fetch(); return $result['CNT']; }
public static function GetRegionsIdsByNames($arRegNames, $countryId = false) { if (self::isLocationProMigrated()) { try { $types = self::getTypes(); $query = new Entity\Query(self::SELF_ENTITY_NAME); $fieldMap = array('RID' => 'REGION_ID', 'RNAME' => 'NAME.NAME', 'RSHORT_NAME' => 'NAME.SHORT_NAME'); $selectFields = $fieldMap; $filterFields = array(array('LOGIC' => 'OR', 'RNAME' => $arRegNames, 'RSHORT_NAME' => $arRegNames), '=TYPE_ID' => $types['REGION'], '!=REGION_ID' => '0'); if ($countryId = intval($countryId)) { $filterFields['=COUNTRY_ID'] = $countryId; } // order $orderFields = array('RNAME' => 'asc', 'RSHORT_NAME' => 'asc'); // group $groupFields = array('RID'); $nameJoinCondition = array('=this.ID' => 'ref.LOCATION_ID'); if (strlen($strLang)) { $nameJoinCondition['=ref.LANGUAGE_ID'] = array('?', $strLang); } $query->registerRuntimeField('NAME', array('data_type' => self::NAME_ENTITY_NAME, 'reference' => $nameJoinCondition, 'join_type' => 'left')); $query->setSelect($selectFields); $query->setFilter($filterFields); $query->setOrder($orderFields); $query->setGroup($groupFields); $result = array(); $res = $query->exec(); while ($item = $res->fetch()) { $result[strlen($item['RNAME']) ? $item['RNAME'] : $item['RSHORT_NAME']] = $item['RID']; } return $result; } catch (Exception $e) { return array(); } } else { global $DB; $arResult = array(); $arWhere = array(); $arQueryFields = array('RL.NAME', 'RL.SHORT_NAME'); if (is_array($arRegNames)) { foreach ($arRegNames as $regName) { $regName = $DB->ForSql($regName); foreach ($arQueryFields as $field) { $arWhere[] = $field . " LIKE '" . $regName . "'"; } } if (count($arWhere) > 0) { $strWhere = implode(' OR ', $arWhere); $query = "\tSELECT RL.REGION_ID, RL.NAME, RL.SHORT_NAME\n\t\t\t\t\t\t\t\tFROM b_sale_location_region_lang RL "; if ($countryId) { $strWhere = 'L.COUNTRY_ID=\'' . intval($countryId) . '\' AND (' . $strWhere . ')'; $query .= "LEFT JOIN b_sale_location L ON L.REGION_ID=RL.REGION_ID "; } $query .= "WHERE " . $strWhere; $query .= " GROUP BY RL.REGION_ID"; $query .= " ORDER BY RL.NAME, RL.SHORT_NAME"; $dbList = $DB->Query($query); $arRegionsLang = array(); while ($arRegion = $dbList->Fetch()) { if (strlen($arRegion["NAME"]) > 0) { $idx = $arRegion["NAME"]; } else { $idx = $arRegion["SHORT_NAME"]; } $arResult[$idx] = $arRegion["REGION_ID"]; } } } return $arResult; } }
/** @return array */ public function getList(array $params) { $group = isset($params['group']) ? strtoupper($params['group']) : ''; if ($group !== '' && $group !== self::GROUP_BY_USER && $group !== self::GROUP_BY_DATE) { $group = ''; } /** @var Filter $filter */ $filter = isset($params['filter']) ? $params['filter'] : null; if (!$filter instanceof Filter) { throw new Main\ObjectNotFoundException("The 'filter' is not found in params."); } $semanticID = $filter->getExtraParam('semanticID', PhaseSemantics::UNDEFINED); $isFinalSemantics = PhaseSemantics::isFinal($semanticID); $group = isset($params['group']) ? strtoupper($params['group']) : ''; if ($group !== '' && $group !== self::GROUP_BY_USER && $group !== self::GROUP_BY_DATE) { $group = ''; } /** @var array $select */ $select = isset($params['select']) && is_array($params['select']) ? $params['select'] : array(); $name = ''; $aggregate = ''; if (!empty($select)) { $selectItem = $select[0]; if (isset($selectItem['name'])) { $name = $selectItem['name']; } if (isset($selectItem['aggregate'])) { $aggregate = strtoupper($selectItem['aggregate']); } } if ($name === '') { $name = 'INVOICE_SUM'; } if ($aggregate !== '' && !in_array($aggregate, array('SUM', 'COUNT', 'MAX', 'MIN'))) { $aggregate = ''; } $permissionSql = ''; if ($this->enablePermissionCheck) { $permissionSql = $this->preparePermissionSql(); if ($permissionSql === false) { //Access denied; return array(); } } $period = $filter->getPeriod(); $periodStartDate = $period['START']; $periodEndDate = $period['END']; $query = new Query(DealInvoiceStatisticsTable::getEntity()); $query->addSelect($name); if ($aggregate !== '') { if ($aggregate === 'COUNT') { $query->registerRuntimeField('', new ExpressionField($name, "COUNT(*)")); } else { $query->registerRuntimeField('', new ExpressionField($name, "{$aggregate}({$name})")); } } $query->setTableAliasPostfix('_s2'); $subQuery = new Query(DealInvoiceStatisticsTable::getEntity()); $subQuery->setTableAliasPostfix('_s1'); $subQuery->addSelect('OWNER_ID'); $subQuery->addFilter('>=END_DATE', $periodStartDate); $subQuery->addFilter('<=START_DATE', $periodEndDate); //$subQuery->addFilter('<=CREATED_DATE', $periodEndDate); if ($semanticID !== PhaseSemantics::UNDEFINED) { $subQuery->addFilter('=STAGE_SEMANTIC_ID', $semanticID); } if ($this->enablePermissionCheck && is_string($permissionSql) && $permissionSql !== '') { $subQuery->addFilter('@OWNER_ID', new SqlExpression($permissionSql)); } $responsibleIDs = $filter->getResponsibleIDs(); if (!empty($responsibleIDs)) { $subQuery->addFilter('@RESPONSIBLE_ID', $responsibleIDs); } $subQuery->addGroup('OWNER_ID'); $subQuery->addSelect('MAX_CREATED_DATE'); $subQuery->registerRuntimeField('', new ExpressionField('MAX_CREATED_DATE', 'MAX(CREATED_DATE)')); $query->registerRuntimeField('', new ReferenceField('M', Base::getInstanceByQuery($subQuery), array('=this.OWNER_ID' => 'ref.OWNER_ID', '=this.CREATED_DATE' => 'ref.MAX_CREATED_DATE'), array('join_type' => 'INNER'))); $sort = isset($params['sort']) && is_array($params['sort']) && !empty($params['sort']) ? $params['sort'] : null; if ($sort) { foreach ($sort as $sortItem) { if (isset($sortItem['name'])) { $query->addOrder($sortItem['name'], isset($sortItem['order']) ? $sortItem['order'] : 'asc'); } } } if ($group !== '') { if ($group === self::GROUP_BY_USER) { $query->addSelect('RESPONSIBLE_ID'); $query->addGroup('RESPONSIBLE_ID'); } else { if ($group === self::GROUP_BY_DATE) { if ($isFinalSemantics) { $query->addSelect('END_DATE', 'D'); $query->addGroup('END_DATE'); if (!$sort) { $query->addOrder('END_DATE', 'ASC'); } } else { $query->addSelect('CREATED_DATE', 'D'); $query->addGroup('CREATED_DATE'); if (!$sort) { $query->addOrder('CREATED_DATE', 'ASC'); } } } } } $dbResult = $query->exec(); //Trace('sql', Query::getLastQuery(), 1); $result = array(); if ($group === self::GROUP_BY_DATE) { while ($ary = $dbResult->fetch()) { $ary['DATE'] = $ary['D']->format('Y-m-d'); unset($ary['D']); if ($ary['DATE'] === '9999-12-31') { //Skip empty dates continue; } $result[] = $ary; } } elseif ($group === self::GROUP_BY_USER) { $userIDs = array(); while ($ary = $dbResult->fetch()) { $userID = $ary['RESPONSIBLE_ID'] = (int) $ary['RESPONSIBLE_ID']; if ($userID > 0 && !isset($userNames[$userID])) { $userIDs[] = $userID; } $result[] = $ary; } $userNames = self::prepareUserNames($userIDs); foreach ($result as &$item) { $userID = $item['RESPONSIBLE_ID']; $item['USER_ID'] = $userID; $item['USER'] = isset($userNames[$userID]) ? $userNames[$userID] : "[{$userID}]"; unset($item['RESPONSIBLE_ID']); } unset($item); } else { while ($ary = $dbResult->fetch()) { $result[] = $ary; } } return $result; }
$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; } $grcData[$resultName][] = $row; } // add empty values to data foreach ($data as $k => $v) { $data[$k][$alias] = null; } // add values to data foreach ($grcData[$resultName] as $grcIndex => &$row) { $grc_primary_string = ''; foreach ($grcSelectPrimaries as $pResultName => $def) { $grc_primary_string .= (string) $row[$pResultName] . '/';