• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/integration/main/uiselector/mailcontacts.php
  • Класс: BitrixMailIntegrationMainUISelectorMailContacts
  • Вызов: MailContacts::search
public function search($params = array())
{
	$result = array(
		'ITEMS' => array(),
		'ADDITIONAL_INFO' => array()
	);

	$entityOptions = (!empty($params['options']) ? $params['options'] : array());
	$requestFields = (!empty($params['requestFields']) ? $params['requestFields'] : array());
	$search = $requestFields['searchString'];

	if ($search <> '')
	{
		$currentUser = BitrixMainEngineCurrentUser::get();
		if (!is_null($currentUser->getId()))
		{
			$searchWords = preg_split('/s+/', trim($search), ($wordsLimit = 10) + 1);
			$searchWords = array_splice($searchWords, 0, $wordsLimit);
			$sortExpr = '0';
			$sqlHelper = BitrixMainApplication::getConnection()->getSqlHelper();
			foreach ($searchWords as $word)
			{
				$word = str_replace('%', '%%', $word);
				$word = $sqlHelper->forSql($word);
				$sortExpr .= sprintf(
					'+(CASE WHEN %s THEN 2 WHEN %s THEN 1 ELSE 0 END)',
					"(%1$s LIKE '%%" . $word . "%%')",
					"(%2$s LIKE '%%" . $word . "%%')"
				);
			}
			$sortWeight = new BitrixMainEntityExpressionField('SORT_WEIGHT', $sortExpr, ['NAME', 'EMAIL']);
			$queryFilter = [
				[
					'LOGIC' => 'OR',
					'%NAME' => $searchWords,
					'%EMAIL' => $searchWords,
				],
			];
			$queryFilter[] = ['=USER_ID' => $currentUser->getId()];
			$mailContacts = BitrixMailInternalsMailContactTable::getList([
				'order' => [
					'SORT_WEIGHT' => 'DESC',
					'NAME' => 'ASC',
				],
				'filter' => $queryFilter,
				'select' => ['ID', 'NAME', 'EMAIL', 'ICON', $sortWeight],
				'limit' => 10,
			])->fetchAll();

			foreach ($mailContacts as $mailContact)
			{
				$result["ITEMS"][self::PREFIX.$mailContact['ID']] = self::prepareEntity($mailContact, $entityOptions);
			}
		}
	}

	return $result;
}