• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/controller/action/searchaction.php
  • Класс: Bitrix\Crm\Controller\Action\SearchAction
  • Вызов: SearchAction::prepareSearchResults
static function prepareSearchResults(array $items)
{
	/** @var int[] $map */
	$map = array();
	/** @var Search\ResultItem[] $results */
	$results = array();

	foreach($items as $item)
	{
		$entityTypeID = isset($item['ENTITY_TYPE_ID']) ? (int)$item['ENTITY_TYPE_ID'] : 0;
		$entityID = isset($item['ENTITY_ID']) ? (int)$item['ENTITY_ID'] : 0;

		if(!\CCrmOwnerType::IsDefined($entityTypeID) || $entityID <= 0)
		{
			continue;
		}

		$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID);
		if(!isset($map[$entityTypeName]))
		{
			$map[$entityTypeName] = array();
		}
		$map[$entityTypeName][] = $entityID;
	}

	foreach($map as $entityTypeName => $entityIDs)
	{
		if($entityTypeName === \CCrmOwnerType::LeadName)
		{
			$dbResult = \CCrmLead::GetListEx(
				array(),
				array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
				false,
				false,
				array('ID', 'TITLE', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME')
			);

			if(is_object($dbResult))
			{

				while($fields = $dbResult->Fetch())
				{
					$entityID = (int)$fields['ID'];

					$resultItem = new Search\ResultItem(
						$fields['TITLE'],
						new Uri(
							\CCrmOwnerType::GetEntityShowPath(
								\CCrmOwnerType::Lead,
								$entityID,
								false
							)
						)
					);

					$resultItem->setModule('crm');
					$resultItem->setType($entityTypeName);
					$resultItem->setId($entityID);
					$resultItem->setSubTitle(\CCrmLead::PrepareFormattedName($fields));

					$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
				}
			}
		}
		elseif($entityTypeName === \CCrmOwnerType::ContactName)
		{
			$dbResult = \CCrmContact::GetListEx(
				array(),
				array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
				false,
				false,
				array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO')
			);
			if(is_object($dbResult))
			{
				while($fields = $dbResult->Fetch())
				{
					$entityID = (int)$fields['ID'];

					$resultItem = new Search\ResultItem(
						\CCrmContact::PrepareFormattedName($fields),
						new Uri(
							\CCrmOwnerType::GetEntityShowPath(
								\CCrmOwnerType::Contact,
								$entityID,
								false
							)
						)
					);

					$resultItem->setModule('crm');
					$resultItem->setType($entityTypeName);
					$resultItem->setId($entityID);

					if(isset($fields['COMPANY_TITLE']))
					{
						$resultItem->setSubTitle($fields['COMPANY_TITLE']);
					}

					$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;

					/*
					if(isset($fields['PHOTO']) && $fields['PHOTO'] > 0)
					{
						$fileInfo = \CFile::ResizeImageGet(
							$fields['PHOTO'],
							array('width' => 100, 'height' => 100),
							BX_RESIZE_IMAGE_EXACT
						);
						if(is_array($fileInfo))
						{
							$item['imageUrl'] = $fileInfo['src'];
						}
					}
					*/
				}
			}
		}
		elseif($entityTypeName === \CCrmOwnerType::CompanyName)
		{
			$dbResult = \CCrmCompany::GetListEx(
				array(),
				array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
				false,
				false,
				array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY',  'LOGO')
			);
			if(is_object($dbResult))
			{
				$typeList = \CCrmStatus::GetStatusList('COMPANY_TYPE');
				$industryList = \CCrmStatus::GetStatusList('INDUSTRY');

				while($fields = $dbResult->Fetch())
				{
					$descriptions = array();
					if(isset($typeList[$fields['COMPANY_TYPE']]))
					{
						$descriptions[] = $typeList[$fields['COMPANY_TYPE']];
					}
					if(isset($industryList[$fields['INDUSTRY']]))
					{
						$descriptions[] = $industryList[$fields['INDUSTRY']];
					}

					$entityID = (int)$fields['ID'];

					$resultItem = new Search\ResultItem(
						$fields['TITLE'],
						new Uri(
							\CCrmOwnerType::GetEntityShowPath(
								\CCrmOwnerType::Company,
								$entityID,
								false
							)
						)
					);

					$resultItem->setModule('crm');
					$resultItem->setType($entityTypeName);
					$resultItem->setId($entityID);

					if(!empty($descriptions))
					{
						$resultItem->setSubTitle(implode(', ', $descriptions));
					}

					$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;

					/*
					if(isset($fields['LOGO']) && $fields['LOGO'] > 0)
					{
						$fileInfo = \CFile::ResizeImageGet(
							$fields['LOGO'],
							array('width' => 100, 'height' => 100),
							BX_RESIZE_IMAGE_EXACT
						);
						if(is_array($fileInfo))
						{
							$item['imageUrl'] = $fileInfo['src'];
						}
					}
					*/
				}
			}
		}
		elseif($entityTypeName === \CCrmOwnerType::DealName)
		{
			$dbResult = \CCrmDeal::GetListEx(
				array(),
				array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
				false,
				false,
				array('ID', 'TITLE', 'COMPANY_TITLE', 'CONTACT_HONORIFIC', 'CONTACT_NAME', 'CONTACT_SECOND_NAME', 'CONTACT_LAST_NAME')
			);
			if(is_object($dbResult))
			{
				while($fields = $dbResult->Fetch())
				{
					$descriptions = array();
					if(isset($fields['COMPANY_TITLE']) && $fields['COMPANY_TITLE'] != '')
					{
						$descriptions[] = $fields['COMPANY_TITLE'];
					}

					$descriptions[] =\CCrmContact::PrepareFormattedName(
						array(
							'LOGIN' => '',
							'HONORIFIC' => isset($fields['CONTACT_HONORIFIC']) ? $fields['CONTACT_HONORIFIC'] : '',
							'NAME' => isset($fields['CONTACT_NAME']) ? $fields['CONTACT_NAME'] : '',
							'SECOND_NAME' => isset($fields['CONTACT_SECOND_NAME']) ? $fields['CONTACT_SECOND_NAME'] : '',
							'LAST_NAME' => isset($fields['CONTACT_LAST_NAME']) ? $fields['CONTACT_LAST_NAME'] : ''
						)
					);

					$entityID = (int)$fields['ID'];

					$resultItem = new Search\ResultItem(
						$fields['TITLE'],
						new Uri(
							\CCrmOwnerType::GetEntityShowPath(
								\CCrmOwnerType::Deal,
								$entityID,
								false
							)
						)
					);

					$resultItem->setModule('crm');
					$resultItem->setType($entityTypeName);
					$resultItem->setId($entityID);

					if(!empty($descriptions))
					{
						$resultItem->setSubTitle(implode(', ', $descriptions));
					}

					$results["{$entityTypeName}:{$fields['ID']}"] = $resultItem;
				}
			}
		}
	}

	foreach($map as $entityTypeName => $entityIDs)
	{
		if($entityTypeName === \CCrmOwnerType::DealName)
		{
			continue;
		}

		$dbResult = \CCrmFieldMulti::GetListEx(
			array(),
			array(
				'=ENTITY_ID' => $entityTypeName,
				'@ELEMENT_ID' => $entityIDs,
				'@TYPE_ID' => array('PHONE' , 'EMAIL')
			)
		);

		$attributes = array();
		while($fields = $dbResult->Fetch())
		{
			$entityKey = "{$fields['ENTITY_ID']}:{$fields['ELEMENT_ID']}";
			if(!isset($results[$entityKey]))
			{
				continue;
			}

			if(!isset($attributes[$entityKey]))
			{
				$attributes[$entityKey] = array();
			}

			$key = strtolower($fields['TYPE_ID']);
			if(!isset($attributes[$entityKey][$key]))
			{
				$attributes[$entityKey][$key] = array();
			}

			$attributes[$entityKey][$key][] = array(
				'type' => $fields['VALUE_TYPE'],
				'value' => $fields['VALUE']
			);
		}

		foreach($attributes as $entityKey => $data)
		{
			if(!isset($results[$entityKey]))
			{
				continue;
			}

			foreach($data as $key => $items)
			{
				$results[$entityKey]->setAttribute($key, $items);
			}
		}
	}

	$results = array_values($results);
	if(count($results) > 1)
	{
		Main\Type\Collection::sortByColumn($results, array('title' => SORT_ASC));
	}
	return $results;
}