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); } }