- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_contact.php
- Класс: \CAllCrmContact
- Вызов: CAllCrmContact::__AfterPrepareSql
static function __AfterPrepareSql($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::Contact,
array(
'SEARCH_CONTENT' => Crm\Search\SearchEnvironment::prepareSearchContent($arFilter['SEARCH_CONTENT'], $options)
)
)
);
if($query !== '')
{
$sqlData['WHERE'][] = $query;
}
}
if(isset($arFilter['ASSOCIATED_COMPANY_TITLE']))
{
$sql = ContactCompanyTable::prepareFilterJoinSqlByTitle(
CCrmOwnerType::Company,
$arFilter['ASSOCIATED_COMPANY_TITLE'],
$sender->GetTableAlias()
);
if($sql !== '')
{
$sqlData['FROM'][] = $sql;
}
unset($arFilter['ASSOCIATED_COMPANY_TITLE']);
}
if(isset($arFilter['ASSOCIATED_COMPANY_ID']) && $arFilter['ASSOCIATED_COMPANY_ID'] > 0)
{
$sqlData['FROM'][] = ContactCompanyTable::prepareFilterJoinSql(
CCrmOwnerType::Company,
$arFilter['ASSOCIATED_COMPANY_ID'],
$sender->GetTableAlias()
);
}
if(isset($arFilter['ASSOCIATED_DEAL_ID']) && $arFilter['ASSOCIATED_DEAL_ID'] > 0)
{
$sqlData['FROM'][] = Crm\Binding\DealContactTable::prepareFilterJoinSql(
CCrmOwnerType::Deal,
$arFilter['ASSOCIATED_DEAL_ID'],
$sender->GetTableAlias()
);
}
if(isset($arFilter['ADDRESSES']))
{
foreach($arFilter['ADDRESSES'] as $addressTypeID => $addressFilter)
{
$sqlData['FROM'][] = EntityAddress::prepareFilterJoinSql(
CCrmOwnerType::Contact,
$addressTypeID,
$addressFilter,
$sender->GetTableAlias()
);
}
}
Tracking\UI\Filter::buildFilterAfterPrepareSql(
$sqlData,
$arFilter,
\CCrmOwnerType::ResolveID(self::$TYPE_NAME),
$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;
}