- Модуль: 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]);
}
}
}