CAllCrmCompany::PrepareFilter

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CAllCrmCompany
  4. PrepareFilter
  • Модуль: 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]);
		}
	}
}

Добавить комментарий