示例#1
0
 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;
 }
示例#2
0
        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));
 }