public static function UpdateSearch($arFilter, $ENTITY_TYPE, $bOverWrite = false) { if (!CModule::IncludeModule('search')) { return false; } $limit = 1000; switch ($ENTITY_TYPE) { case 'CONTACT': $obRes = CCrmContact::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'FULL_NAME'; break; case 'DEAL': $obRes = CCrmDeal::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; break; case 'INVOICE': $obRes = CCrmInvoice::GetList(array('ID' => 'DESC'), $arFilter, false, array('nTopCount' => $limit), array('*')); $sTitleID = 'ORDER_TOPIC'; break; case 'QUOTE': $obRes = CCrmQuote::GetList(array('ID' => 'ASC'), $arFilter, false, array('nTopCount' => intval($limit)), array()); $sTitleID = 'TITLE'; break; case 'COMPANY': $obRes = CCrmCompany::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; break; default: case 'LEAD': $obRes = CCrmLead::GetList(array('ID' => 'ASC'), $arFilter, array(), $limit); $sTitleID = 'TITLE'; $ENTITY_TYPE = 'LEAD'; break; } if (!isset(self::$arMess[$ENTITY_TYPE])) { self::$arMess[$ENTITY_TYPE] = __IncludeLang($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/components/bitrix/crm.' . strtolower($ENTITY_TYPE) . '.show/lang/' . LANGUAGE_ID . '/component.php', true); } $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; }