public static function GetList($arOrder = array(), $arFilter = array(), $arSelectFields = array(), $arNavStartParams = false, $arGroupBy = false) { $arProductFields = self::GetFields(); // Rewrite order // <editor-fold defaultstate="collapsed" desc="Rewrite order ..."> $arOrderRewrited = array(); foreach ($arOrder as $k => $v) { $uk = strtoupper($k); if (isset($arProductFields[$uk]) && $arProductFields[$uk] !== false || preg_match('/^PROPERTY_\\d+$/', $uk)) { $arOrderRewrited[$uk] = $v; } } if (strlen($arOrder['ORIGINATOR_ID'] . $arOrder['ORIGIN_ID']) > 0) { if (strlen($arOrder['ORIGINATOR_ID']) > 0) { $arOrderRewrited['XML_ID'] = $arOrder['ORIGINATOR_ID']; } else { $arOrderRewrited['XML_ID'] = $arOrder['ORIGIN_ID']; } } // </editor-fold> // Rewrite filter // <editor-fold defaultstate="collapsed" desc="Rewrite filter ..."> $arAdditionalFilter = $arFilterRewrited = array(); $arOptions = array(); if (isset($arFilter['~REAL_PRICE'])) { $arOptions['REAL_PRICE'] = true; unset($arFilter['~REAL_PRICE']); } foreach ($arProductFields as $fieldProduct => $fieldIblock) { foreach ($arFilter as $k => $v) { $matches = array(); if (preg_match('/^([!><=%?][><=%]?[<]?|)' . $fieldProduct . '$/', $k, $matches)) { if ($fieldIblock) { if ($fieldIblock === 'IBLOCK_SECTION_ID') { //HACK: IBLOCK_SECTION_ID is not supported in filter $fieldIblock = 'SECTION_ID'; } $arFilterRewrited[$matches[1] . $fieldIblock] = $v; } else { $arAdditionalFilter[$k] = $v; } } else { if (preg_match('/^([!><=%?][><=%]?[<]?|)(PROPERTY_\\d+)$/', $k, $matches)) { $arFilterRewrited[$matches[1] . $matches[2]] = $v; } } } } if (strlen($arFilter['ORIGINATOR_ID'] . $arFilter['ORIGIN_ID']) > 0) { if (strlen($arFilter['ORIGINATOR_ID']) > 0 && strlen($arFilter['ORIGIN_ID']) > 0) { $arFilterRewrited['XML_ID'] = $arFilter['ORIGINATOR_ID'] . '#' . $arFilter['ORIGIN_ID']; } else { if (strlen($arFilter['ORIGINATOR_ID']) > 0) { $arFilterRewrited['%XML_ID'] = $arFilter['ORIGINATOR_ID'] . '#'; } else { $arFilterRewrited['%XML_ID'] = '#' . $arFilter['ORIGIN_ID']; } } } if (!isset($arFilter['ID']) || isset($arFilter['CATALOG_ID'])) { $catalogID = isset($arFilter['CATALOG_ID']) ? intval($arFilter['CATALOG_ID']) : 0; if ($catalogID > 0 && !CCrmCatalog::Exists($catalogID)) { $catalogID = 0; } if ($catalogID <= 0) { $catalogID = CCrmCatalog::EnsureDefaultExists(); } $arFilterRewrited['IBLOCK_ID'] = $catalogID; } // </editor-fold> // Rewrite select // <editor-fold defaultstate="collapsed" desc="Rewrite select ..."> $arSelect = $arSelectFields; if (!is_array($arSelect)) { $arSelect = array(); } if (empty($arSelect)) { $arSelect = array(); foreach (array_keys($arProductFields) as $fieldName) { if (!in_array($fieldName, array('PRICE', 'CURRENCY_ID', 'VAT_ID', 'VAT_INCLUDED', 'MEASURE'), true)) { $arSelect[] = $fieldName; } } } else { if (in_array('*', $arSelect, true)) { $arSelect = array_keys($arProductFields); } } $arAdditionalSelect = $arSelectRewrited = array(); foreach ($arProductFields as $fieldProduct => $fieldIblock) { if (in_array($fieldProduct, $arSelect, true)) { if ($fieldIblock) { $arSelectRewrited[] = $fieldIblock; } else { $arAdditionalSelect[] = $fieldProduct; } } } foreach ($arSelect as $v) { if (isset($arProductFields[$v]) && $arProductFields[$v] !== false || preg_match('/^PROPERTY_\\d+$/', $v)) { $arSelectRewrited[] = $arProductFields[$v]; } else { if (isset($arProductFields[$v])) { $arAdditionalSelect[] = $v; } } } if (!in_array('ID', $arSelectRewrited, true)) { $arSelectRewrited[] = 'ID'; } if (!in_array('XML_ID', $arSelectRewrited, true)) { $bSelectXmlId = false; foreach ($arSelect as $k => $v) { if ($v === 'ORIGINATOR_ID' || $v === 'ORIGIN_ID') { $bSelectXmlId = true; break; } } if ($bSelectXmlId) { $arAdditionalSelect[] = $arSelectRewrited[] = 'XML_ID'; } } // </editor-fold> $arNavStartParamsRewrited = false; if (is_array($arNavStartParams)) { $arNavStartParamsRewrited = $arNavStartParams; } else { if (is_numeric($arNavStartParams)) { $nTopCount = intval($arNavStartParams); if ($nTopCount > 0) { $arNavStartParamsRewrited = array('nTopCount' => $nTopCount); } } } $dbRes = CIBlockElement::GetList($arOrderRewrited, $arFilterRewrited, $arGroupBy === false ? false : array(), $arNavStartParamsRewrited, $arSelectRewrited); if ($arGroupBy === false) { $dbRes = new CCrmProductResult($dbRes, $arProductFields, $arAdditionalFilter, $arAdditionalSelect, $arOptions); } return $dbRes; }
Header('Content-Type: application/x-javascript; charset=' . LANG_CHARSET); if (!empty($result)) { echo CUtil::PhpToJSObject($result); } require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php'; die; } } $curUserPrems = CCrmPerms::GetCurrentUserPermissions(); $action = isset($_REQUEST['ACTION']) ? $_REQUEST['ACTION'] : ''; if ($action === 'GET_SECTIONS') { if (!$curUserPrems->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'READ')) { __CrmMobileCompanyEditEndResonse(array('ERROR' => 'Access denied.')); } $catalogID = isset($_REQUEST['CATALOG_ID']) ? intval($_REQUEST['CATALOG_ID']) : 0; if ($catalogID <= 0 || !CCrmCatalog::Exists($catalogID)) { __CrmMobileCompanyEditEndResonse(array('ERROR' => 'Catalog ID is not found.')); } $filter = array('IBLOCK_ID' => $catalogID, 'GLOBAL_ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N'); CModule::IncludeModule('iblock'); $sectionID = isset($_REQUEST['SECTION_ID']) ? intval($_REQUEST['SECTION_ID']) : 0; $parentSectionID = 0; $sectionName = ''; if ($sectionID > 0) { $dbSections = CIBlockSection::GetList(array(), array('ID' => $sectionID), false, array('ID', 'NAME', 'IBLOCK_SECTION_ID')); $section = $dbSections->Fetch(); if ($section) { $sectionName = $section['NAME']; $parentSectionID = intval($section['IBLOCK_SECTION_ID']); } }
public static function GetList($arOrder = array(), $arFilter = array(), $arSelectFields = array(), $arNavStartParams = false) { if (!CModule::IncludeModule('iblock')) { return false; } if (!is_array($arFilter)) { $arFilter = array(); } $catalogID = isset($arFilter['CATALOG_ID']) ? intval($arFilter['CATALOG_ID']) : 0; if (!($catalogID > 0 && CCrmCatalog::Exists($catalogID))) { $catalogID = CCrmCatalog::EnsureDefaultExists(); } $arFilter['CATALOG_ID'] = $catalogID; $section = new CIBlockSection(); $effectiveFilter = CCrmProductSectionDbResult::MapKeys($arFilter); if (isset($effectiveFilter['IBLOCK_SECTION_ID'])) { $effectiveFilter['SECTION_ID'] = (int) $effectiveFilter['IBLOCK_SECTION_ID']; } return new CCrmProductSectionDbResult($section->GetList(CCrmProductSectionDbResult::MapKeys($arOrder), $effectiveFilter, false, CCrmProductSectionDbResult::MapValues($arSelectFields), $arNavStartParams)); }