...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_quote.php
- Класс: \CAllCrmQuote
- Вызов: CAllCrmQuote::__AfterPrepareSql
static function __AfterPrepareSql(/*CCrmEntityListBuilder*/ $sender, $arOrder, $arFilter, $arGroupBy, $arSelectFields) { $sqlData = array('FROM' => array(), '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::Quote, array( 'SEARCH_CONTENT' => Crm\Search\SearchEnvironment::prepareSearchContent($arFilter['SEARCH_CONTENT'], $options) ) ) ); if($query !== '') { $sqlData['WHERE'][] = $query; } } // Applying filter by PRODUCT_ID // Applying filter by PRODUCT_ID $operationInfo = Crm\UI\Filter\EntityHandler::findFieldOperation('PRODUCT_ROW_PRODUCT_ID', $arFilter); if(is_array($operationInfo)) { $prodID = (int)$operationInfo['CONDITION']; if($prodID > 0 && $operationInfo['OPERATION'] === '=') { $tableAlias = $sender->GetTableAlias(); $sqlData['WHERE'][] = "{$tableAlias}.ID IN (SELECT DP.OWNER_ID from b_crm_product_row DP where DP.OWNER_TYPE = 'Q' and DP.OWNER_ID = {$tableAlias}.ID and DP.PRODUCT_ID = {$prodID})"; } } $operationInfo = Crm\UI\Filter\EntityHandler::findFieldOperation('ASSOCIATED_CONTACT_ID', $arFilter); if(is_array($operationInfo)) { if($operationInfo['OPERATION'] === '=') { $sqlData['FROM'][] = QuoteContactTable::prepareFilterJoinSql( CCrmOwnerType::Contact, $operationInfo['CONDITION'], $sender->GetTableAlias() ); } } Tracking\UI\Filter::buildFilterAfterPrepareSql( $sqlData, $arFilter, \CCrmOwnerType::Quote, $sender->GetTableAlias() ); $result = array(); if(!empty($sqlData['FROM'])) { $result['FROM'] = implode(' ', $sqlData['FROM']); } if(!empty($sqlData['WHERE'])) { $result['WHERE'] = implode(' AND ', $sqlData['WHERE']); } return !empty($result) ? $result : false; }