Example #1
0
 function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
 {
     if (!is_array($arOrder) && !is_array($arFilter)) {
         $arOrder = strval($arOrder);
         $arFilter = strval($arFilter);
         if (strlen($arOrder) > 0 && strlen($arFilter) > 0) {
             $arOrder = array($arOrder => $arFilter);
         } else {
             $arOrder = array();
         }
         if (is_array($arGroupBy)) {
             $arFilter = $arGroupBy;
         } else {
             $arFilter = array();
         }
         $arGroupBy = false;
         $arSelectFields = array();
     }
     if (!$arSelectFields) {
         $arSelectFields = array("ID", "PERSON_TYPE_ID", "NAME", "TYPE", "REQUIED", "DEFAULT_VALUE", "DEFAULT_VALUE_ORIG", "SORT", "USER_PROPS", "IS_LOCATION", "PROPS_GROUP_ID", "SIZE1", "SIZE2", "DESCRIPTION", "IS_EMAIL", "IS_PROFILE_NAME", "IS_PAYER", "IS_LOCATION4TAX", "IS_ZIP", "CODE", "IS_FILTERED", "ACTIVE", "UTIL", "INPUT_FIELD_LOCATION", "MULTIPLE", "PAYSYSTEM_ID", "DELIVERY_ID");
     }
     // add aliases
     $query = new \Bitrix\Sale\Compatible\OrderQueryLocation(OrderPropsTable::getEntity());
     $query->addLocationRuntimeField('DEFAULT_VALUE');
     $query->addAliases(array('REQUIED' => 'REQUIRED', 'GROUP_ID' => 'GROUP.ID', 'GROUP_PERSON_TYPE_ID' => 'GROUP.PERSON_TYPE_ID', 'GROUP_NAME' => 'GROUP.NAME', 'GROUP_SORT' => 'GROUP.SORT', 'PERSON_TYPE_LID' => 'PERSON_TYPE.LID', 'PERSON_TYPE_NAME' => 'PERSON_TYPE.NAME', 'PERSON_TYPE_SORT' => 'PERSON_TYPE.SORT', 'PERSON_TYPE_ACTIVE' => 'PERSON_TYPE.ACTIVE', 'PAYSYSTEM_ID' => 'Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.PROPERTY_ID', 'DELIVERY_ID' => 'Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.PROPERTY_ID'));
     // relations
     if (isset($arFilter['RELATED'])) {
         // 1. filter related to something
         if (is_array($arFilter['RELATED'])) {
             $relationFilter = array();
             if ($arFilter['RELATED']['PAYSYSTEM_ID']) {
                 $relationFilter[] = array('=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'P', '=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['RELATED']['PAYSYSTEM_ID']);
             }
             if ($arFilter['RELATED']['DELIVERY_ID']) {
                 if ($relationFilter) {
                     $relationFilter['LOGIC'] = $arFilter['RELATED']['LOGIC'] == 'AND' ? 'AND' : 'OR';
                 }
                 $relationFilter[] = array('=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_TYPE' => 'D', '=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.ENTITY_ID' => $arFilter['RELATED']['DELIVERY_ID']);
             }
             // all other
             if ($arFilter['RELATED']['TYPE'] == 'WITH_NOT_RELATED' && $relationFilter) {
                 $relationFilter = array('LOGIC' => 'OR', $relationFilter, array('=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.PROPERTY_ID' => null));
             }
             if ($relationFilter) {
                 $query->addFilter(null, $relationFilter);
             }
         } else {
             $query->addFilter('=Bitrix\\Sale\\Internals\\OrderPropsRelationTable:lPROPERTY.PROPERTY_ID', null);
             if (($key = array_search('PAYSYSTEM_ID', $arSelectFields)) !== false) {
                 unset($arSelectFields[$key]);
             }
             if (($key = array_search('DELIVERY_ID', $arSelectFields)) !== false) {
                 unset($arSelectFields[$key]);
             }
         }
         unset($arFilter['RELATED']);
     }
     if (isset($arFilter['PERSON_TYPE_ID']) && is_array($arFilter['PERSON_TYPE_ID'])) {
         foreach ($arFilter['PERSON_TYPE_ID'] as $personTypeKey => $personTypeValue) {
             if (!is_array($personTypeValue) && !empty($personTypeValue) && intval($personTypeValue) > 0) {
                 unset($arFilter['PERSON_TYPE_ID'][$personTypeKey]);
                 $arFilter['PERSON_TYPE_ID'][] = $personTypeValue;
             }
         }
     }
     // execute
     $query->prepare($arOrder, $arFilter, $arGroupBy, $arSelectFields);
     if ($query->counted()) {
         return $query->exec()->getSelectedRowsCount();
     } else {
         $result = new \Bitrix\Sale\Compatible\CDBResult();
         $adapter = new CSaleOrderPropsAdapter($query, $arSelectFields);
         $adapter->addFieldProxy('DEFAULT_VALUE');
         $result->addFetchAdapter($adapter);
         return $query->compatibleExec($result, $arNavStartParams);
     }
 }