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