...Человеческий поиск в разработке...
- Модуль: 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; }