...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_company.php
- Класс: \CAllCrmCompany
- Вызов: CAllCrmCompany::PrepareFilter
static function PrepareFilter(&$arFilter, $arFilter2Logic = null) { if(!is_array($arFilter2Logic)) { $arFilter2Logic = array('TITLE', 'ADDRESS_LEGAL', 'BANKING_DETAILS', 'ADDRESS', 'COMMENTS'); } // converts data from filter if (isset($arFilter['FIND_list']) && !empty($arFilter['FIND'])) { $arFilter[mb_strtoupper($arFilter['FIND_list'])] = $arFilter['FIND']; unset($arFilter['FIND_list'], $arFilter['FIND']); } static $arImmutableFilters = array( 'FM', 'ID', 'CURRENCY_ID', 'ASSOCIATED_CONTACT_ID', 'ASSIGNED_BY_ID', 'CREATED_BY_ID', 'MODIFY_BY_ID', 'COMPANY_TYPE', 'INDUSTRY', 'EMPLOYEES', 'WEBFORM_ID', 'HAS_PHONE', 'HAS_EMAIL', 'HAS_IMOL', 'IS_MY_COMPANY', 'RQ', 'SEARCH_CONTENT', 'FILTER_ID', 'FILTER_APPLIED', 'PRESET_ID' ); foreach ($arFilter as $k => $v) { if(in_array($k, $arImmutableFilters, true)) { continue; } $arMatch = []; if($k === 'ORIGINATOR_ID') { // HACK: build filter by internal entities $arFilter['=ORIGINATOR_ID'] = $v !== '__INTERNAL' ? $v : null; unset($arFilter[$k]); } elseif($k === 'ADDRESS' || $k === 'ADDRESS_2' || $k === 'ADDRESS_CITY' || $k === 'ADDRESS_REGION' || $k === 'ADDRESS_PROVINCE' || $k === 'ADDRESS_POSTAL_CODE' || $k === 'ADDRESS_COUNTRY' || $k === 'ADDRESS_LEGAL' || $k === 'REG_ADDRESS_2' || $k === 'REG_ADDRESS_CITY' || $k === 'REG_ADDRESS_REGION' || $k === 'REG_ADDRESS_PROVINCE' || $k === 'REG_ADDRESS_POSTAL_CODE' || $k === 'REG_ADDRESS_COUNTRY') { if(!isset($arFilter['ADDRESSES'])) { $arFilter['ADDRESSES'] = []; } $addressAliases = array('ADDRESS_LEGAL' => 'REG_ADDRESS'); $addressTypeID = CompanyAddress::resolveEntityFieldTypeID($k, $addressAliases); if(!isset($arFilter['ADDRESSES'][$addressTypeID])) { $arFilter['ADDRESSES'][$addressTypeID] = []; } $n = CompanyAddress::mapEntityField($k, $addressTypeID, $addressAliases); $arFilter['ADDRESSES'][$addressTypeID][$n] = "{$v}%"; unset($arFilter[$k]); } elseif (preg_match('/(.*)_from$/i'.BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if($v <> '') { $arFilter['>='.$arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (preg_match('/(.*)_to$/i'.BX_UTF_PCRE_MODIFIER, $k, $arMatch)) { if($v <> '') { if (($arMatch[1] == 'DATE_CREATE' || $arMatch[1] == 'DATE_MODIFY') && !preg_match('/\d{1,2}:\d{1,2}(:\d{1,2})?$/'.BX_UTF_PCRE_MODIFIER, $v)) { $v = CCrmDateTimeHelper::SetMaxDayTime($v); } $arFilter['<='.$arMatch[1]] = $v; } unset($arFilter[$k]); } elseif (in_array($k, $arFilter2Logic)) { // Bugfix #26956 - skip empty values in logical filter $v = trim($v); if($v !== '') { $arFilter['?'.$k] = $v; } unset($arFilter[$k]); } elseif ($k != 'ID' && $k != 'LOGIC' && $k != '__INNER_FILTER' && mb_strpos($k, 'UF_') !== 0 && preg_match('/^[^=%?><]{1}/', $k) === 1) { $arFilter['%'.$k] = $v; unset($arFilter[$k]); } } }