CrmContacts::getSearchFilter

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CrmContacts
  4. getSearchFilter
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/main/uiselector/crmcontacts.php
  • Класс: Bitrix\Crm\Integration\Main\UISelector\CrmContacts
  • Вызов: CrmContacts::getSearchFilter
protected function getSearchFilter(string $search, array $options)
{
	$filter = false;

	$searchParts = preg_split ('/[\s]+/', $search, 2, PREG_SPLIT_NO_EMPTY);
	if(count($searchParts) < 2)
	{
		if (check_email($search, true))
		{
			$entityIdList = [];
			$query = FieldMultiTable::query()
				->where('ENTITY_ID', CCrmOwnerType::ContactName)
				->where('TYPE_ID', CCrmFieldMulti::EMAIL)
				->setSelect(['ELEMENT_ID'])
			;
			if (mb_substr($search, -1) === '%')
			{
				$query->whereLike('VALUE', $search);
			}
			else
			{
				$query->where('VALUE', $search);
			}
			$res = $query->exec();

			while($multiFields = $res->fetch())
			{
				$entityIdList[] = $multiFields['ELEMENT_ID'];
			}
			if (!empty($entityIdList))
			{
				$filter = ['@ID' => $entityIdList];
			}
		}
		else
		{
			$filter = [
				'SEARCH_CONTENT' => $search,
				'%FULL_NAME' => $search,
				'@CATEGORY_ID' => 0,
				'__ENABLE_SEARCH_CONTENT_PHONE_DETECTION' => false
			];
		}
	}
	else
	{
		$filter = [
			'SEARCH_CONTENT' => $search,
			'__ENABLE_SEARCH_CONTENT_PHONE_DETECTION' => false,
			'@CATEGORY_ID' => 0,
			'LOGIC' => 'AND'
		];

		for ($i = 0; $i < 2; $i++)
		{
			$filter["__INNER_FILTER_NAME_$i"] = ['%FULL_NAME' => $searchParts[$i]];
		}
	}

	return
		is_array($filter)
			? $this->prepareOptionalFilter($filter, $options)
			: false
	;
}

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