- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_search.php
- Класс: \CCrmSearch
- Вызов: CCrmSearch::UpdateSearch
static function UpdateSearch($arFilter, $ENTITY_TYPE, $bOverWrite = false)
{
if (!self::isUpdateSearchIndexEnabled())
{
return false;
}
$limit = 1000;
switch ($ENTITY_TYPE)
{
case 'CONTACT':
$obRes = CCrmContact::GetListEx(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit));
$sTitleID = 'FULL_NAME';
break;
case 'DEAL':
$obRes = CCrmDeal::GetListEx(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit));
$sTitleID = 'TITLE';
break;
case 'INVOICE':
$obRes = CCrmInvoice::GetList(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit), array('*'));
$sTitleID = 'ORDER_TOPIC';
break;
case 'QUOTE':
$obRes = CCrmQuote::GetList(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit), array());
$sTitleID = 'TITLE';
break;
case 'COMPANY':
$obRes = CCrmCompany::GetListEx(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit));
$sTitleID = 'TITLE';
break;
default:
case 'LEAD':
$obRes = CCrmLead::GetListEx(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => $limit));
$sTitleID = 'TITLE';
$ENTITY_TYPE = 'LEAD';
break;
}
if (!isset(self::$arMess[$ENTITY_TYPE]))
{
self::$arMess[$ENTITY_TYPE] = \Bitrix\Main\Localization\Loc::loadLanguageFile(
$_SERVER['DOCUMENT_ROOT'].BX_ROOT.'/components/bitrix/crm.'.mb_strtolower($ENTITY_TYPE).'.show/component.php'
);
}
$arAllResult = array();
$qty = 0;
$lastItemID = '';
if(is_object($obRes))
{
while (($arRow = $obRes->Fetch()) !== false)
{
$elementID = $arRow['ID'];
$lastItemID = $ENTITY_TYPE.'.'.$elementID;
if ($ENTITY_TYPE === 'INVOICE')
$arResult = CCrmInvoice::BuildSearchCard($arRow, self::$bReIndex);
elseif ($ENTITY_TYPE === 'QUOTE')
$arResult = CCrmQuote::BuildSearchCard($arRow, self::$bReIndex);
else
{
$multiFields = array();
if($ENTITY_TYPE === 'CONTACT' || $ENTITY_TYPE === 'COMPANY' || $ENTITY_TYPE === 'LEAD')
{
$obMultiFieldRes = CCrmFieldMulti::GetList(
array('ID' => 'asc'),
array('ENTITY_ID' => $ENTITY_TYPE, 'ELEMENT_ID' => $elementID)
);
while($multiField = $obMultiFieldRes->Fetch())
{
$fieldValue = $multiField['VALUE'];
$fieldTypeID = $multiField['TYPE_ID'];
if($fieldValue === '' || ($fieldTypeID !== 'PHONE' && $fieldTypeID !== 'EMAIL'))
{
continue;
}
if(!isset($multiFields[$fieldTypeID]))
{
$multiFields[$fieldTypeID] = array();
}
$multiFields[$fieldTypeID][] = $fieldValue;
}
}
$arResult = self::_buildEntityCard($arRow, $sTitleID, $ENTITY_TYPE, array('FM' => $multiFields));
}
if (self::$bReIndex)
{
if (self::$oCallback)
{
$res = call_user_func(array(self::$oCallback, self::$callback_method), $arResult);
if(!$res)
{
return $lastItemID;
}
}
}
else
{
CSearch::Index(
'crm',
$ENTITY_TYPE.'.'.$arRow['ID'],
$arResult,
$bOverWrite
);
}
$arAllResult[] = $arResult;
$qty++;
}
}
if (!self::$bReIndex && !empty($arFilter['ID']) && $qty === 0)
{
CSearch::DeleteIndex('crm', (int)$arFilter['ID']);
}
if (self::$bReIndex && $qty === $limit && $lastItemID !== '')
{
return $lastItemID;
}
return $arAllResult;
}