CCrmSearch::UpdateSearch

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CCrmSearch
  4. UpdateSearch
  • Модуль: 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;
}

Добавить комментарий