• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_entity_selector_helper.php
  • Класс: \CCrmEntitySelectorHelper
  • Вызов: CCrmEntitySelectorHelper::PreparePopupItems
static function PreparePopupItems($entityTypeNames, $addPrefix = true, $nameFormat = '', $count = 50, $options = array())
{
	if(!is_array($entityTypeNames))
	{
		$entityTypeNames = array(strval($entityTypeNames));

	}

	$addPrefix =  (bool)$addPrefix;
	$count = intval($count);
	if($count <= 0)
	{
		$count = 50;
	}

	// options
	$requireRequisiteData = (
		is_array($options) && isset($options['REQUIRE_REQUISITE_DATA'])
		&& ($options['REQUIRE_REQUISITE_DATA'] === true || $options['REQUIRE_REQUISITE_DATA'] === 'Y')
	);
	$companiesFilter = array();
	if (is_array($options['SEARCH_OPTIONS']))
	{
		if (isset($options['SEARCH_OPTIONS']['ONLY_MY_COMPANIES'])
			&& $options['SEARCH_OPTIONS']['ONLY_MY_COMPANIES'] === 'Y')
		{
			$companiesFilter['=IS_MY_COMPANY'] = 'Y';
		}
		else if (isset($options['SEARCH_OPTIONS']['NOT_MY_COMPANIES'])
			&& $options['SEARCH_OPTIONS']['NOT_MY_COMPANIES'] === 'Y')
		{
			$companiesFilter['=IS_MY_COMPANY'] = 'N';
		}
	}

	$userPermissions = CCrmPerms::GetCurrentUserPermissions();
	$arItems = array();
	$i = 0;
	foreach($entityTypeNames as $typeName)
	{
		$typeName = mb_strtoupper(strval($typeName));

		if($typeName === 'CONTACT')
		{
			$entityIDs = CCrmContact::GetTopIDsInCategory(0, $count, 'DESC', $userPermissions);
			if(!empty($entityIDs))
			{
				$contactTypes = CCrmStatus::GetStatusList('CONTACT_TYPE');
				$contactIndex = array();

				$dbResult = CCrmContact::GetListEx(
					array('ID' => 'DESC'),
					array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'HONORIFIC', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'COMPANY_TITLE', 'PHOTO', 'TYPE_ID')
				);

				while ($arRes = $dbResult->Fetch())
				{
					$arImg = array();
					if (!empty($arRes['PHOTO']) && !isset($arFiles[$arRes['PHOTO']]))
					{
						if(intval($arRes['PHOTO']) > 0)
						{
							$arImg = CFile::ResizeImageGet($arRes['PHOTO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);
						}
					}

					$arRes['SID'] = $addPrefix ? 'C_'.$arRes['ID']: $arRes['ID'];

					// advanced info
					$advancedInfo = array();
					if (isset($arRes['TYPE_ID']) && $arRes['TYPE_ID'] != '' && isset($contactTypes[$arRes['TYPE_ID']]))
					{
						$advancedInfo['contactType'] = array(
							'id' => $arRes['TYPE_ID'],
							'name' => $contactTypes[$arRes['TYPE_ID']]
						);
					}

					$arItems[$i] = array(
						'title' => CCrmContact::PrepareFormattedName(
							array(
								'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
								'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
								'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
								'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
							),
							$nameFormat
						),
						'desc'  => empty($arRes['COMPANY_TITLE'])? "": $arRes['COMPANY_TITLE'],
						'id' => $arRes['SID'],
						'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_contact_show'),
							array(
								'contact_id' => $arRes['ID']
							)
						),
						'image' => $arImg['src'],
						'type'  => 'contact',
						'selected' => 'N'
					);
					if (!empty($advancedInfo))
						$arItems[$i]['advancedInfo'] = $advancedInfo;
					unset($advancedInfo);

					// requisites
					if ($requireRequisiteData)
						$arItems[$i]['advancedInfo']['requisiteData'] = self::PrepareRequisiteData(
							CCrmOwnerType::Contact, $arRes['ID'], array('VIEW_DATA_ONLY' => true)
						);

					$contactIndex[$arRes['ID']] = &$arItems[$i];
					$i++;
				}

				// advanced info - phone number, e-mail
				$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'CONTACT', 'ELEMENT_ID' => array_keys($contactIndex)));
				while($arRes = $obRes->Fetch())
				{
					if (isset($contactIndex[$arRes['ELEMENT_ID']])
						&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
					{
						$item = &$contactIndex[$arRes['ELEMENT_ID']];
						if (!is_array($item['advancedInfo']))
							$item['advancedInfo'] = array();
						if (!is_array($item['advancedInfo']['multiFields']))
							$item['advancedInfo']['multiFields'] = array();
						$item['advancedInfo']['multiFields'][] = array(
							'ID' => $arRes['ID'],
							'TYPE_ID' => $arRes['TYPE_ID'],
							'VALUE_TYPE' => $arRes['VALUE_TYPE'],
							'VALUE' => $arRes['VALUE']
						);
						unset($item);
					}
				}
				unset($contactIndex);
			}
		}
		elseif($typeName === 'COMPANY')
		{
			if(empty($companiesFilter))
			{
				$entityIDs = CCrmCompany::GetTopIDsInCategory(0, $count, 'DESC', $userPermissions);
			}
			else
			{
				$dbResult = CCrmCompany::GetListEx(
					array('ID' => 'DESC'),
					array_merge($companiesFilter, ['@CATEGORY_ID' => 0,]),
					false,
					array('nTopCount' => $count),
					array('ID')
				);
				$entityIDs = array();
				while ($arRes = $dbResult->Fetch())
				{
					$entityIDs[] = (int)$arRes['ID'];
				}
			}

			if(!empty($entityIDs))
			{
				$companyIndex = array();
				$arCompanyTypeList = CCrmStatus::GetStatusListEx('COMPANY_TYPE');
				$arCompanyIndustryList = CCrmStatus::GetStatusListEx('INDUSTRY');

				$dbResult = CCrmCompany::GetListEx(
					array('ID' => 'DESC'),
					array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY',  'LOGO')
				);

				$arFiles = array();
				while ($arRes = $dbResult->Fetch())
				{
					$arImg = array();
					if (!empty($arRes['LOGO']) && !isset($arFiles[$arRes['LOGO']]))
					{
						if(intval($arRes['LOGO']) > 0)
							$arImg = CFile::ResizeImageGet($arRes['LOGO'], array('width' => 25, 'height' => 25), BX_RESIZE_IMAGE_EXACT);

						$arFiles[$arRes['LOGO']] = $arImg['src'];
					}

					$arRes['SID'] = $addPrefix ? 'CO_'.$arRes['ID']: $arRes['ID'];

					$arDesc = Array();
					if (isset($arCompanyTypeList[$arRes['COMPANY_TYPE']]))
						$arDesc[] = $arCompanyTypeList[$arRes['COMPANY_TYPE']];
					if (isset($arCompanyIndustryList[$arRes['INDUSTRY']]))
						$arDesc[] = $arCompanyIndustryList[$arRes['INDUSTRY']];


					$arItems[$i] = array(
						'title' => (str_replace(array(';', ','), ' ', $arRes['TITLE'])),
						'desc' => implode(', ', $arDesc),
						'id' => $arRes['SID'],
						'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_company_show'),
							array(
								'company_id' => $arRes['ID']
							)
						),
						'image' => $arImg['src'],
						'type'  => 'company',
						'selected' => 'N'
					);

					// requisites
					if ($requireRequisiteData)
						$arItems[$i]['advancedInfo']['requisiteData'] = self::PrepareRequisiteData(
							CCrmOwnerType::Company, $arRes['ID'], array('VIEW_DATA_ONLY' => true)
						);

					$companyIndex[$arRes['ID']] = &$arItems[$i];
					$i++;
				}

				// advanced info - phone number, e-mail
				$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'COMPANY', 'ELEMENT_ID' => array_keys($companyIndex)));
				while($arRes = $obRes->Fetch())
				{
					if (isset($companyIndex[$arRes['ELEMENT_ID']])
						&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
					{
						$item = &$companyIndex[$arRes['ELEMENT_ID']];
						if (!is_array($item['advancedInfo']))
							$item['advancedInfo'] = array();
						if (!is_array($item['advancedInfo']['multiFields']))
							$item['advancedInfo']['multiFields'] = array();
						$item['advancedInfo']['multiFields'][] = array(
							'ID' => $arRes['ID'],
							'TYPE_ID' => $arRes['TYPE_ID'],
							'VALUE_TYPE' => $arRes['VALUE_TYPE'],
							'VALUE' => $arRes['VALUE']
						);
						unset($item);
					}
				}
				unset($companyIndex);
			}
		}
		elseif($typeName === 'LEAD')
		{
			$entityIDs = CCrmLead::GetTopIDs($count, 'DESC', $userPermissions);
			if(!empty($entityIDs))
			{
				$leadIndex = array();
				$dbResult = CCrmLead::GetListEx(
					array('ID' => 'DESC'),
					array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'STATUS_ID')
				);

				while ($arRes = $dbResult->Fetch())
				{
					$arRes['SID'] = $addPrefix ? 'L_'.$arRes['ID']: $arRes['ID'];

					$arItems[$i] = array(
						'title' => isset($arRes['TITLE']) ? $arRes['TITLE'] : '',
						'desc' => CCrmLead::PrepareFormattedName(
							array(
								'HONORIFIC' => isset($arRes['HONORIFIC']) ? $arRes['HONORIFIC'] : '',
								'NAME' => isset($arRes['NAME']) ? $arRes['NAME'] : '',
								'SECOND_NAME' => isset($arRes['SECOND_NAME']) ? $arRes['SECOND_NAME'] : '',
								'LAST_NAME' => isset($arRes['LAST_NAME']) ? $arRes['LAST_NAME'] : ''
							),
							$nameFormat
						),
						'id' => $arRes['SID'],
						'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_lead_show'),
							array(
								'lead_id' => $arRes['ID']
							)
						),
						'type'  => 'lead',
						'selected' => 'N'
					);
					$leadIndex[$arRes['ID']] = &$arItems[$i];
					$i++;
				}

				// advanced info - phone number, e-mail
				$obRes = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => 'LEAD', 'ELEMENT_ID' => array_keys($leadIndex)));
				while($arRes = $obRes->Fetch())
				{
					if (isset($leadIndex[$arRes['ELEMENT_ID']])
						&& ($arRes['TYPE_ID'] === 'PHONE' || $arRes['TYPE_ID'] === 'EMAIL'))
					{
						$item = &$leadIndex[$arRes['ELEMENT_ID']];
						if (!is_array($item['advancedInfo']))
							$item['advancedInfo'] = array();
						if (!is_array($item['advancedInfo']['multiFields']))
							$item['advancedInfo']['multiFields'] = array();
						$item['advancedInfo']['multiFields'][] = array(
							'ID' => $arRes['ID'],
							'TYPE_ID' => $arRes['TYPE_ID'],
							'VALUE_TYPE' => $arRes['VALUE_TYPE'],
							'VALUE' => $arRes['VALUE']
						);
						unset($item);
					}
				}
				unset($leadIndex);
			}
		}
		elseif($typeName === 'DEAL')
		{
			$entityIDs = CCrmDeal::GetTopIDs($count, 'DESC', $userPermissions);
			if(!empty($entityIDs))
			{
				$dbResult = CCrmDeal::GetListEx(
					array('ID' => 'DESC'),
					array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
				);

				while ($arRes = $dbResult->Fetch())
				{
					$arRes['SID'] = $addPrefix ? 'D_'.$arRes['ID']: $arRes['ID'];

					$clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
					$clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];

					$arItems[] = array(
						'title' => isset($arRes['TITLE']) ? str_replace(array(';', ','), ' ', $arRes['TITLE']) : '',
						'desc' => $clientTitle,
						'id' => $arRes['SID'],
						'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_deal_show'),
							array(
								'deal_id' => $arRes['ID']
							)
						),
						'type'  => 'deal',
						'selected' => 'N'
					);
				}
			}
		}
		elseif($typeName === 'QUOTE')
		{
			$entityIDs = CCrmQuote::GetTopIDs($count, 'DESC', $userPermissions);
			if(!empty($entityIDs))
			{
				$dbResult = CCrmQuote::GetList(
					array('ID' => 'DESC'),
					array('@ID' => $entityIDs, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'QUOTE_NUMBER', 'TITLE', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')
				);

				while ($arRes = $dbResult->Fetch())
				{
					$arRes['SID'] = $addPrefix ? CCrmQuote::OWNER_TYPE.'_'.$arRes['ID']: $arRes['ID'];

					$clientTitle = (!empty($arRes['COMPANY_TITLE'])) ? $arRes['COMPANY_TITLE'] : '';
					$clientTitle .= (($clientTitle !== '' && !empty($arRes['CONTACT_FULL_NAME'])) ? ', ' : '').$arRes['CONTACT_FULL_NAME'];

					$quoteTitle = empty($arRes['TITLE']) ? $arRes['QUOTE_NUMBER'] : $arRes['QUOTE_NUMBER'].' - '.$arRes['TITLE'];

					$arItems[] = array(
						'title' => empty($quoteTitle) ? '' : str_replace(array(';', ','), ' ', $quoteTitle),
						'desc' => $clientTitle,
						'id' => $arRes['SID'],
						'url' => CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_quote_show'),
							array(
								'quote_id' => $arRes['ID']
							)
						),
						'type'  => 'quote',
						'selected' => 'N'
					);
				}
			}
		}
	}
	unset($typeName);

	return $arItems;
}