...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_company.php
- Класс: \CAllCrmCompany
- Вызов: CAllCrmCompany::__AfterPrepareSql
static function __AfterPrepareSql($sender, $arOrder, $arFilter, $arGroupBy, $arSelectFields) { $sqlData = array('FROM' => [], 'WHERE' => array()); if(isset($arFilter['SEARCH_CONTENT']) && $arFilter['SEARCH_CONTENT'] !== '') { $tableAlias = $sender->GetTableAlias(); $queryWhere = new CSQLWhere(); $queryWhere->SetFields( array( 'SEARCH_CONTENT' => array( 'FIELD_NAME' => "{$tableAlias}.SEARCH_CONTENT", 'FIELD_TYPE' => 'string', 'JOIN' => false ) ) ); $options = []; if (isset($arFilter['__ENABLE_SEARCH_CONTENT_PHONE_DETECTION'])) { $options['ENABLE_PHONE_DETECTION'] = $arFilter['__ENABLE_SEARCH_CONTENT_PHONE_DETECTION']; unset($arFilter['__ENABLE_SEARCH_CONTENT_PHONE_DETECTION']); } $query = $queryWhere->GetQuery( Crm\Search\SearchEnvironment::prepareEntityFilter( CCrmOwnerType::Company, array( 'SEARCH_CONTENT' => Crm\Search\SearchEnvironment::prepareSearchContent($arFilter['SEARCH_CONTENT'], $options) ) ) ); if($query !== '') { $sqlData['WHERE'][] = $query; } } if(isset($arFilter['ADDRESSES'])) { foreach($arFilter['ADDRESSES'] as $addressTypeID => $addressFilter) { $sqlData['FROM'][] = EntityAddress::prepareFilterJoinSql( CCrmOwnerType::Company, $addressTypeID, $addressFilter, $sender->GetTableAlias() ); } } if(isset($arFilter['ASSOCIATED_CONTACT_ID'])) { $sqlData['FROM'][] = ContactCompanyTable::prepareFilterJoinSql( CCrmOwnerType::Contact, $arFilter['ASSOCIATED_CONTACT_ID'], $sender->GetTableAlias() ); } Tracking\UI\Filter::buildFilterAfterPrepareSql( $sqlData, $arFilter, CCrmOwnerType::ResolveID(self::$TYPE_NAME), $sender->GetTableAlias() ); $result = []; if(!empty($sqlData['FROM'])) { $result['FROM'] = implode(' ', $sqlData['FROM']); } if(!empty($sqlData['WHERE'])) { $result['WHERE'] = implode(' AND ', $sqlData['WHERE']); } return !empty($result) ? $result : false; }