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; }
/** * 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(); }
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 static function checkFields(Result $result, $primary, array $data) { parent::checkFields($result, $primary, $data); if (!$result->isSuccess()) { return; } $query = new Entity\Query(static::getEntity()); $res = $query->setSelect(array('ID', 'STATUS'))->setFilter(array('=TO_ENTITY' => $data['TO_ENTITY'], '=REAL_OBJECT_ID' => $data['REAL_OBJECT_ID']))->setLimit(2)->exec(); while ($existing = $res->fetch()) { if (!isset($primary) || $primary != $existing['ID']) { if ($existing['STATUS'] == self::STATUS_IS_DECLINED) { static::delete($existing['ID']); } else { $result->addError(new Entity\EntityError(Loc::getMessage("DISK_SHARING_ENTITY_ERROR_NON_UNIQUE"))); } } } }
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; }
/** * Method searches for a custom filter that, needs updating (notifications of new elements). * Custom filters are added to the stack of tasks. * * @param int $limitFilter * @return string */ public static function findUserFilterNotify($limitFilter = 1, $limitFilterUser = 100) { $iblockElement = new \CIBlockElement(); $connection = \Bitrix\Main\Application::getConnection(); $sqlHelper = $connection->getSqlHelper(); $limitFilter = (int) $limitFilter; $limitFilterUser = (int) $limitFilterUser; if ($limitFilterUser <= 0 || $limitFilterUser <= 0) { return; } $queryBuilder = new Entity\Query(Model\SubscribeTable::getEntity()); $filterResult = $queryBuilder->setSelect(array('*'))->setFilter(array('ACTIVE' => 'Y'))->setLimit($limitFilter)->exec(); while ($filterRow = $filterResult->fetch()) { $filter['IBLOCK_ID'] = $filterRow['IBLOCK_ID']; if ($filterRow['SECTION_ID'] > 0) { $filter['SECTION_ID'] = $filterRow['SECTION_ID']; } $filter = array_merge($filter, unserialize($filterRow['FILTER'])); $elementResult = $iblockElement->GetList(false, $filter, array('IBLOCK_ID'))->fetch(); if ($elementResult['CNT'] <= 0) { continue; } // Choose filters which notification less, // than the number of elements with filter $sql = "\n SELECT DISTINCT t1.ID\n FROM b_citfact_filter_subscribe_user as t1\n LEFT OUTER JOIN b_citfact_filter_subscribe_notify as t2 ON (\n t1.ID = t2.FILTER_USER_ID AND\n t1.FILTER_ID = '" . $sqlHelper->forSql($filterRow['ID']) . "'\n )\n WHERE (SELECT count(ID) FROM b_citfact_filter_subscribe_notify as t3 WHERE t3.FILTER_USER_ID = t1.ID) < '" . $sqlHelper->forSql($elementResult['CNT']) . "'\n GROUP BY t1.ID\n LIMIT 0," . $limitFilterUser . "\n "; // Adding custom filters to stack table $notifyList = (array) $connection->query($sql)->fetchAll(); foreach ($notifyList as $key => $notify) { Model\SubscribeStackTable::add(array('FILTER_USER_ID' => $notify['ID'], 'ACTION' => 'UPDATE')); } // If list for stack table is not empty, then deactivate filter if (sizeof($notifyList) > 0) { Model\SubscribeTable::update($filterRow['ID'], array('ACTIVE' => 'N')); } } return "Citfact\\FilterSubscribe\\Agent::findUserFilterNotify({$limitFilter})"; }
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; } }
/** * <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; } }
/** * 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; } } } }
$arResult['FILTER'] = $filterLexer->getFilter(); $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) {
if (!Loader::includeModule('citfact.uservars')) { $applicationOld->authForm(Loc::getMessage('ACCESS_DENIED')); } $request = $application->getContext()->getRequest(); $includePath = array('prolog' => '/bitrix/modules/main/include/prolog_admin_after.php', 'prolog_js' => '/bitrix/modules/main/include/prolog_admin_js.php', 'epilog' => '/bitrix/modules/main/include/epilog_admin.php', 'epilog_js' => '/bitrix/modules/main/include/epilog_admin_js.php'); $contextMenu[] = array('TEXT' => Loc::getMessage('USER_VARS_ADD_GROUP'), 'TITLE' => Loc::getMessage('USER_VARS_ADD_GROUP'), 'LINK' => 'user_vars_group_edit.php?lang=' . LANGUAGE_ID, 'ICON' => 'btn_new'); $headers = array(array('id' => 'ID', 'content' => 'ID', 'sort' => 'ID', 'default' => true), array('id' => 'NAME', 'content' => Loc::getMessage('USER_VARS_TABLE_NAME'), 'sort' => 'NAME', 'default' => true), array('id' => 'CODE', 'content' => Loc::getMessage('USER_VARS_TABLE_CODE'), 'sort' => 'CODE', 'default' => true)); $tableId = 'tbl_user_vars'; $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\VarsGroupTable::getEntity()); $queryBuilder->setSelect(array('ID', 'NAME', 'CODE')); $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' => 'list', 'TEXT' => Loc::getMessage('USER_VARS_ACTION_LIST'), 'ACTION' => $adminList->actionRedirect('user_vars_list.php?lang=' . LANGUAGE_ID . '&GROUP_ID=' . $item['ID'])); $actions[] = array('ICON' => 'edit', 'TEXT' => Loc::GetMessage('USER_VARS_ACTION_EDIT_GROUP'), 'ACTION' => $adminList->actionRedirect('user_vars_group_edit.php?ID=' . $item['ID'])); $actions[] = array('ICON' => 'delete', 'TEXT' => Loc::getMessage('USER_VARS_ACTION_DELETE_GROUP'), 'ACTION' => "if(confirm('" . Loc::getMessage('USER_VARS_DELETE_GROUP_CONFIRM') . "')) " . $adminList->actionRedirect('user_vars_group_edit.php?action=delete&ID=' . $item['ID'] . '&' . bitrix_sessid_get())); $row->addActions($actions); } $prologType = $request->getQuery('mode') == 'list' ? 'prolog_js' : 'prolog';
/** * This method is for internal use only. It may be changed without any notification further, or even mystically disappear. * * @access private */ public static function getSubtreeRangeSqlForNode($primary, $node = array()) { $primary = Assert::expectIntegerPositive($primary, '$primary'); if (empty($node)) { $node = self::getNodeInfo($primary); if (!intval($node['ID'])) { throw new Main\SystemException('Node being checked not found'); } } if (isset($node['LEFT_MARGIN']) && isset($node['RIGHT_MARGIN'])) { $query = new Main\Entity\Query(static::getEntity()); $query->setSelect(array('ID')); $query->setFilter(array('>LEFT_MARGIN' => $node['LEFT_MARGIN'], '<RIGHT_MARGIN' => $node['RIGHT_MARGIN'])); return $query->getQuery(); } else { throw new Main\SystemException('Node not found or incorrect node info passed'); } }
LocalRedirect(sprintf('user_vars.php?lang=%s', LANGUAGE_ID)); } $includePath = array('prolog' => '/bitrix/modules/main/include/prolog_admin_after.php', 'prolog_js' => '/bitrix/modules/main/include/prolog_admin_js.php', 'epilog' => '/bitrix/modules/main/include/epilog_admin.php', 'epilog_js' => '/bitrix/modules/main/include/epilog_admin_js.php'); $contextMenu[] = array('TEXT' => Loc::getMessage('USER_VARS_ADD'), 'TITLE' => Loc::getMessage('USER_VARS_ADD'), 'LINK' => 'user_vars_edit.php?GROUP_ID=' . $dataGroup['ID'] . '&lang=' . LANGUAGE_ID, 'ICON' => 'btn_new'); $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]);
public static function delete($primary) { // get old data $oldData = static::getByPrimary($primary)->fetch(); // get file fields $file_fields = array(); $fields = $GLOBALS['USER_FIELD_MANAGER']->getUserFields('HLBLOCK_' . $oldData['ID']); foreach ($fields as $name => $field) { if ($field['USER_TYPE']['BASE_TYPE'] === 'file') { $file_fields[] = $name; } } // delete files if (!empty($file_fields)) { $oldEntity = static::compileEntity($oldData); $query = new Entity\Query($oldEntity); // select file ids $query->setSelect($file_fields); // if they are not empty $filter = array('LOGIC' => 'OR'); foreach ($file_fields as $file_field) { $filter['!' . $file_field] = false; } $query->setFilter($filter); // go $result = $query->exec(); while ($row = $result->fetch()) { foreach ($file_fields as $file_field) { if (!empty($row[$file_field])) { \CFile::delete($row[$file_field]); } } } } foreach ($fields as $name => $field) { $GLOBALS['DB']->query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = " . $field['ID'], false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); $GLOBALS['DB']->query("DELETE FROM b_user_field WHERE ID = " . $field['ID'], false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); } // clear uf cache global $CACHE_MANAGER; if (CACHED_b_user_field !== false) { $CACHE_MANAGER->CleanDir("b_user_field"); } // remove row $result = parent::delete($primary); // remove table in db $dbtype = strtolower($GLOBALS['DB']->type); $connection = Application::getConnection(); $sqlHelper = $connection->getSqlHelper(); if ($dbtype == 'oracle') { $GLOBALS['DB']->query('DROP TABLE ' . $sqlHelper->quote($oldData['TABLE_NAME']) . ' CASCADE CONSTRAINTS'); $GLOBALS['DB']->query('DROP SEQUENCE sq_' . $oldData['TABLE_NAME']); } else { $GLOBALS['DB']->query('DROP TABLE ' . $sqlHelper->quote($oldData['TABLE_NAME'])); } if (!empty($fields)) { $GLOBALS['DB']->query("DROP SEQUENCE SQ_B_UTM_" . 'HLBLOCK_' . $oldData['ID'], true); $GLOBALS['DB']->query("DROP TABLE b_uts_" . strtolower('HLBLOCK_' . $oldData['ID']), false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); $GLOBALS['DB']->query("DROP TABLE b_utm_" . strtolower('HLBLOCK_' . $oldData['ID']), false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); } return $result; }
<?php if (!CModule::IncludeModule("highloadblock")) { return; } use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; $Set_ID = $_SESSION["WF_IBL_SETTINGS_ID"]; unset($_SESSION["WF_IBL_SETTINGS_ID"]); //Creating default values $hldata = HL\HighloadBlockTable::getById($Set_ID)->fetch(); $hlentity = HL\HighloadBlockTable::compileEntity($hldata); $hlHandler = $hlentity->getDataClass(); $getList = new Entity\Query($hlHandler); $getList->setSelect(array('*')); $getList->setOrder(array("ID" => "ASC")); $getList->setFilter(array("ID" => 1)); $result = $getList->exec(); $result = new CDBResult($result); if ($row = $result->Fetch()) { } else { $arData = array("UF_THEME" => "default", "UF_SHADOWS" => "default", "UF_BUTTONS" => "coral", "UF_BG" => "default"); $hlHandler::add($arData); } $Brand_ID = $_SESSION["WF_IBL_BRANDS_ID"]; unset($_SESSION["WF_IBL_BRANDS_ID"]); $hldata = HL\HighloadBlockTable::getById($Brand_ID)->fetch(); $hlentity = HL\HighloadBlockTable::compileEntity($hldata); $hlHandler = $hlentity->getDataClass(); $sort = 100; $arBrandsUt = array("1 Marka" => "ref_files/7e44ec9828b17ace0d8f75a349b8de43.png", "Apollo" => "ref_files/61441e895fdde98034964c624e295f90.png", "AquaVita" => "ref_files/9d8f6c21dbd87f76b88a8b35e3cd0572.png", "BAS" => "ref_files/7eaea2afe6729ef29a25aeb82aba2513.png", "Cersanit" => "ref_files/9fe61dfbd7454a7ee27e41e0066fd3ba.png", "EAGO" => "ref_files/7d6f158e6fba7b90963c489c218fb8ef.png", "Kolpa-san" => "ref_files/a1906e21f88ebf48c6550117fb77b69f.png", "Loranto" => "ref_files/794eda4bc38c0decfb66455b436919e2.png", "RELISAN" => "ref_files/a3a02d848afdf90036f1def792d5adaf.png", "Roca" => "ref_files/bddd67008a780c90950540be078685a0.png", "Triton" => "ref_files/f75713924bd7964c999de3fbea43c2de.png", "Vayer" => "ref_files/5841ebf40c33bc9858245adfe7336427.png", "IDDIS" => "ref_files/85f24f3d3a9da494f411baa869b9df69.png", "Grohe" => "ref_files/6a2820fa128435a333ca473d06a78895.png", "Hansgrohe" => "ref_files/82499c22bd8a60b4ced944606973a91a.png");
public function getParam($param = '') { if (is_null($this->params)) { $this->params = array(); $query = new Query($this->hblockEntity); $query->setSelect(array('*')); $query->setFilter(array('=ID' => $this->id)); $result = $query->exec(); $result = new \CDBResult($result); $this->params = $result->Fetch(); } if ($param && array_key_exists($param, $this->params)) { return $this->params[$param]; } elseif (!$param) { return $this->params; } throw new \Exception("Param {$param} not found"); }
/** * @param $objectId * @param $userId * @return array * @throws \Bitrix\Main\ArgumentOutOfRangeException */ private function getUserRightsByObject($objectId, $userId) { /** @var Query $query */ $query = new Query(RightTable::getEntity()); $rights = $query->setSelect(array('ACCESS_CODE', 'TASK_ID', 'NEGATIVE', 'NAME' => 'TASK_OPERATION.OPERATION.NAME', 'DEPTH_LEVEL' => 'PATH_PARENT.DEPTH_LEVEL'))->setFilter(array('PATH_PARENT.OBJECT_ID' => $objectId, 'USER_ACCESS.USER_ID' => $userId))->exec()->fetchAll(); /** @var Query $query */ $query = new Query(RightTable::getEntity()); $rights = array_merge($rights, $query->setSelect(array('ACCESS_CODE', 'TASK_ID', 'NEGATIVE', 'NAME' => 'TASK_OPERATION.OPERATION.NAME', 'DEPTH_LEVEL' => 'PATH_PARENT.DEPTH_LEVEL'))->setFilter(array('LOGIC' => 'OR', array('PATH_PARENT.OBJECT_ID' => $objectId, '=ACCESS_CODE' => 'CR', 'OBJECT.CREATED_BY' => $userId), array('PATH_PARENT.OBJECT_ID' => $objectId, '=ACCESS_CODE' => 'AU')))->exec()->fetchAll()); Collection::sortByColumn($rights, array('DEPTH_LEVEL' => SORT_DESC)); return $rights; }
function getLikesList($element, $user = false, $photos = false) { global $USER; $cacheTime = 3600; $cacheId = 'likes_' . $element; $cachePath = '/likes'; $obCache = new CPHPCache(); if ($obCache->InitCache($cacheTime, $cacheId, $cachePath)) { $vars = $obCache->GetVars(); return $vars['data']; } else { global $CACHE_MANAGER; $CACHE_MANAGER->StartTagCache($cachePath); $CACHE_MANAGER->RegisterTag($cacheId); $requiredModules = array('highloadblock'); foreach ($requiredModules as $requiredModule) { if (!CModule::IncludeModule($requiredModule)) { ShowError(GetMessage("F_NO_MODULE")); return 0; } } if ($photos) { foreach ($photos as $key => &$value) { $value = 'photo_' . $value; } } // hlblock info $hlblock_id = IB_LIKE; if (empty($hlblock_id)) { ShowError(GetMessage('HLBLOCK_LIST_NO_ID')); return 0; } $hlblock = HL\HighloadBlockTable::getById($hlblock_id)->fetch(); if (empty($hlblock)) { ShowError('404'); return 0; } $entity = HL\HighloadBlockTable::compileEntity($hlblock); // uf info $fields = $GLOBALS['USER_FIELD_MANAGER']->GetUserFields('HLBLOCK_' . $hlblock['ID'], 0, LANGUAGE_ID); // pagination $limit = array('nPageSize' => $arParams['ROWS_PER_PAGE'], 'iNumPage' => is_set($_GET['PAGEN_1']) ? $_GET['PAGEN_1'] : 1, 'bShowAll' => true); // sort $sort_id = 'ID'; $sort_type = 'DESC'; // execute query $main_query = new Entity\Query($entity); $main_query->setSelect(array('*')); if ($user) { $main_query->setFilter(array('UF_ELEMENT_ID' => $element, 'UF_USER_ID' => $user)); } else { if ($photos) { $main_query->setFilter(array('UF_ELEMENT_ID' => $photos)); } else { $main_query->setFilter(array('UF_ELEMENT_ID' => $element)); } } $main_query->setOrder(array($sort_id => $sort_type)); //$main_query->setSelect($select) // ->setFilter($filter) // ->setGroup($group) // ->setOrder($order) // ->setOptions($options); //$main_query->setLimit($limit['nPageSize']); //$main_query->setOffset(($limit['iNumPage']-1) * $limit['nPageSize']); $result = $main_query->exec(); $result = new CDBResult($result); // build results $rows = array(); $tableColumns = array(); $liked = false; $userLike = false; while ($row = $result->Fetch()) { foreach ($row as $k => $v) { if ($k === 'UF_USER_ID' && $USER->IsAuthorized() && $v == $USER->GetID()) { $liked = true; $userLike = $row; } if ($k == 'ID') { $tableColumns['ID'] = true; continue; } $arUserField = $fields[$k]; if ($arUserField["SHOW_IN_LIST"] != "Y") { continue; } $html = call_user_func_array(array($arUserField["USER_TYPE"]["CLASS_NAME"], "getadminlistviewhtml"), array($arUserField, array("NAME" => "FIELDS[" . $row['ID'] . "][" . $arUserField["FIELD_NAME"] . "]", "VALUE" => htmlspecialcharsbx($v)))); if ($html == '') { $html = ' '; } $tableColumns[$k] = true; $row[$k] = $html; } $rows[] = $row; } $data = array('rows' => $rows, 'fields' => $fields, 'colums' => $tableColumns, 'liked' => $liked, 'userLike' => $userLike); $CACHE_MANAGER->EndTagCache(); if ($obCache->StartDataCache()) { $obCache->EndDataCache(array("data" => $data)); } return $data; } }
/** * This method is for internal use only. It may be changed without any notification further, or even mystically disappear. * * @access private */ public static function getSubtreeRangeSqlForNode($primary, $node = array()) { $primary = Assert::expectIntegerPositive($primary, '$primary'); if (empty($node)) { $node = self::getNodeInfo($primary); if (!intval($node['ID'])) { throw new Tree\NodeNotFoundException(false, array('INFO' => array('ID' => $primary))); } } static::checkNodeThrowException($node); $query = new Main\Entity\Query(static::getEntity()); $query->setSelect(array('ID')); $query->setFilter(array('>LEFT_MARGIN' => $node['LEFT_MARGIN'], '<RIGHT_MARGIN' => $node['RIGHT_MARGIN'])); return $query->getQuery(); }
<?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;
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; } $grcData[$resultName][] = $row; } // add empty values to data foreach ($data as $k => $v) { $data[$k][$alias] = null; }
$arResult["SEL"][] = $arR; } // VIEWED $arResult["VIEWED"] = array(); if (!Loader::includeModule("catalog")) { return; } $arFilter[">=DATE_VISIT"] = $arFilter[">=DATE_INSERT"]; unset($arFilter[">=DATE_INSERT"]); if (isset($arFilter['LID'])) { $arFilter['SITE_ID'] = $arFilter['LID']; unset($arFilter['LID']); } unset($arFilter['PAYED']); $viewedQuery = new Query(ViewedProducts::getEntity()); $viewedQuery->setSelect(array("PRODUCT_ID", "NAME" => "ELEMENT.NAME", "PRICE" => "PRODUCT.PRICE", "CURRENCY" => "PRODUCT.CURRENCY", "RATE" => "PRODUCT.CURRENT_CURRENCY_RATE", "CURRENCY_RATE" => "PRODUCT.CURRENT_CURRENCY_RATE_CNT"))->setfilter($arFilter); $viewedIterator = $viewedQuery->exec(); $viewedProducts = array(); while ($row = $viewedIterator->fetch()) { $row['VIEW_COUNT'] = 1; if ((int) $row['CURRENCY_RATE'] > 0) { $row['SORT_PRICE'] = $row['PRICE'] * $row['RATE'] / (int) $row['CURRENCY_RATE']; } else { $row['SORT_PRICE'] = $row['PRICE'] * $row['RATE']; } if (!isset($viewedProducts[$row['PRODUCT_ID']])) { $viewedProducts[$row['PRODUCT_ID']] = $row; } else { $viewedProducts[$row['PRODUCT_ID']]['VIEW_COUNT']++; if ($viewedProducts[$row['PRODUCT_ID']]['SORT_PRICE'] > $row['SORT_PRICE']) { $viewedProducts[$row['PRODUCT_ID']]['SORT_PRICE'] = $row['SORT_PRICE'];
/** * 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; } } } }
/** * @param mixed $primary * * @return Main\DB\Result|Entity\DeleteResult */ public static function delete($primary) { global $USER_FIELD_MANAGER; // get old data $hlblock = static::getByPrimary($primary)->fetch(); // get file fields $file_fields = array(); $fields = $USER_FIELD_MANAGER->getUserFields('HLBLOCK_' . $hlblock['ID']); foreach ($fields as $name => $field) { if ($field['USER_TYPE']['BASE_TYPE'] === 'file') { $file_fields[] = $name; } } // delete files if (!empty($file_fields)) { $oldEntity = static::compileEntity($hlblock); $query = new Entity\Query($oldEntity); // select file ids $query->setSelect($file_fields); // if they are not empty $filter = array('LOGIC' => 'OR'); foreach ($file_fields as $file_field) { $filter['!' . $file_field] = false; } $query->setFilter($filter); // go $result = $query->exec(); while ($row = $result->fetch()) { foreach ($file_fields as $file_field) { if (!empty($row[$file_field])) { if (is_array($row[$file_field])) { foreach ($row[$file_field] as $value) { \CFile::delete($value); } } else { \CFile::delete($row[$file_field]); } } } } } $connection = Application::getConnection(); foreach ($fields as $field) { // delete from uf registry if ($field['USER_TYPE']['BASE_TYPE'] === 'enum') { $enumField = new \CUserFieldEnum(); $enumField->DeleteFieldEnum($field['ID']); } $connection->query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = " . $field['ID']); $connection->query("DELETE FROM b_user_field WHERE ID = " . $field['ID']); // if multiple - drop utm table if ($field['MULTIPLE'] == 'Y') { $utmTableName = static::getMultipleValueTableName($hlblock, $field); $connection->dropTable($utmTableName); } } // clear uf cache global $CACHE_MANAGER; if (CACHED_b_user_field !== false) { $CACHE_MANAGER->cleanDir("b_user_field"); } // remove row $result = parent::delete($primary); // drop hl table $connection->dropTable($hlblock['TABLE_NAME']); return $result; }
public static function getUsersTop($userId, $departmentId, Type\DateTime $dateFrom, Type\DateTime $dateTo, $interval, $section = null, $nonInvolvedOnly = false, $from = 0, $limit = 100) { if (!in_array($interval, array('hour', 'day', 'month'), true)) { throw new Main\ArgumentException('Interval should be the "hour", or "day", or "month".'); } $data = array(); // rating for TOTAL activity or for an instrument $sumField = $section === null ? 'TOTAL' : $section; if ($interval === 'hour') { $query = new Entity\Query(UserHourTable::getEntity()); $query->setSelect(array('USER_ID', new Entity\ExpressionField('SUM_' . $sumField, 'SUM(%s)', $sumField))); $query->setFilter(array('><HOUR' => array(ConvertTimeStamp($dateFrom->getTimestamp(), 'FULL'), ConvertTimeStamp($dateTo->getTimestamp(), 'FULL')))); } else { $query = new Entity\Query(UserDayTable::getEntity()); $query->setSelect(array('USER_ID', new Entity\ExpressionField('SUM_' . $sumField, 'SUM(%s)', $sumField))); $query->setFilter(array('><DAY' => array(ConvertTimeStamp($dateFrom->getTimestamp()), ConvertTimeStamp($dateTo->getTimestamp())))); } if ($sumField == 'TOTAL') { // count number of used services $names = UserHourTable::getSectionNames(); $fieldExpressions = array_fill(0, count($names), 'CASE WHEN SUM(%s) > 0 THEN 1 ELSE 0 END'); $serviceCountExpression = join(' + ', $fieldExpressions); $query->addSelect(new Entity\ExpressionField('SERVICES_COUNT', $serviceCountExpression, $names)); if ($nonInvolvedOnly) { // who didn't use 4 or more instruments $query->addFilter('<SERVICES_COUNT', static::INVOLVEMENT_SERVICE_COUNT); } } else { if ($nonInvolvedOnly) { // who didn't use instrument $query->addFilter('=SUM_' . $sumField, 0); } else { // who used it $query->addFilter('>SUM_' . $sumField, 0); } } $query->addOrder('SUM_' . $sumField, 'DESC'); if (!$nonInvolvedOnly) { // we don't need this for non-involved users $query->registerRuntimeField('MYSELF', array('data_type' => 'integer', 'expression' => array('CASE WHEN %s = ' . (int) $userId . ' THEN 1 ELSE 0 END', 'USER_ID'))); $query->addOrder('MYSELF', 'DESC'); } $query->setOffset($from); $query->setLimit($limit); $result = $query->exec(); while ($row = $result->fetch()) { $_data = array('USER_ID' => $row['USER_ID'], 'ACTIVITY' => $row['SUM_' . $sumField]); if ($sumField == 'TOTAL') { $_data['SERVICES_COUNT'] = $row['SERVICES_COUNT']; $_data['IS_INVOLVED'] = $row['SERVICES_COUNT'] >= static::INVOLVEMENT_SERVICE_COUNT; } else { $_data['SERVICES_COUNT'] = null; $_data['IS_INVOLVED'] = $row['SUM_' . $sumField] > 0; } $data[] = $_data; } return $data; }
/** * Remove filter user and relationships * * @param int $id * @return \Bitrix\Main\Entity\DeleteResult * @throws \InvalidArgumentException */ public function removeFilterUser($id) { $filterUser = Model\SubscribeUserTable::getById($id)->fetch(); if ($this->isEmptyResult($filterUser)) { throw new \InvalidArgumentException('Invalid filter user id'); } $queryBuilder = new Entity\Query(Model\SubscribeStackTable::getEntity()); $subscribeStack = $queryBuilder->setSelect(array('ID'))->setFilter(array('FILTER_USER_ID' => $filterUser['ID']))->exec(); while ($row = $subscribeStack->fetch()) { Model\SubscribeStackTable::delete(array('ID' => $row['ID'])); } $result = Model\SubscribeUserTable::delete(array('ID' => $filterUser['ID'])); $queryBuilder = new Entity\Query(Model\SubscribeUserTable::getEntity()); $filterUserResult = $queryBuilder->registerRuntimeField('cnt', array('data_type' => 'integer', 'expression' => array('count(%s)', 'ID')))->setSelect(array('ID', 'cnt'))->setFilter(array('FILTER_ID' => $filterUser['FILTER_ID']))->exec()->fetch(); if ($filterUserResult['cnt'] <= 0) { Model\SubscribeTable::delete(array('ID' => $filterUser['FILTER_ID'])); } return $result; }
} 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();
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; }
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']; }
/** * Gets the value of enum * * @param array $id * @return array */ protected function getValueEnum($id) { if (sizeof($id) <= 0) { return array(); } $result = array(); $queryBuilder = new Entity\Query(Iblock\PropertyEnumerationTable::getEntity()); $queryBuilder->setSelect(array('*'))->setFilter(array('ID' => $id)); $enumListResult = $queryBuilder->exec(); while ($enum = $enumListResult->fetch()) { $result[$enum['ID']] = $enum; } return $result; }