• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/log_destination.php
  • Класс: CSocNetLogDestination
  • Вызов: CSocNetLogDestination::SearchCrmEntities
static function SearchCrmEntities($arParams)
{
	$result = array();

	$search = (!empty($arParams['SEARCH']) ? $arParams['SEARCH'] : false);
	if (
		$search
		&& CModule::IncludeModule('crm')
	)
	{
		if (check_email($search, true))
		{
			$result = array();

			if (
				empty($arParams['ENTITIES'])
				|| in_array('CONTACT', $arParams['ENTITIES'])
			)
			{
				$dbRes = CCrmContact::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'@CATEGORY_ID' => 0,
						'FM' => array(
							'EMAIL' => array(
								'VALUE' => $search
							)
						)
					),
					false,
					false,
					array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')
				);
				while($ar = $dbRes->Fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'CONTACT',
						'NAME_TEMPLATE' => $arParams["NAME_TEMPLATE"],
						'EMAIL' => $search
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}

			if (
				empty($arParams['ENTITIES'])
				|| in_array('COMPANY', $arParams['ENTITIES'])
			)
			{
				$dbRes = CCrmCompany::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'@CATEGORY_ID' => 0,
						'FM' => array(
							'EMAIL' => array(
								'VALUE' => $search
							)
						)
					),
					false,
					false,
					array('ID', 'TITLE', 'LOGO')
				);
				while($ar = $dbRes->Fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'COMPANY',
						'EMAIL' => $search
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}

			if (
				empty($arParams['ENTITIES'])
				|| in_array('LEAD', $arParams['ENTITIES'])
			)
			{
				$dbRes = CCrmLead::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'FM' => array(
							'EMAIL' => array(
								'VALUE' => $search
							)
						)
					),
					false,
					false,
					array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME')
				);
				while($ar = $dbRes->Fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'LEAD',
						'EMAIL' => $search
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}
		}
		elseif (
			!isset($arParams['SEARCH_BY_EMAIL_ONLY'])
			|| $arParams['SEARCH_BY_EMAIL_ONLY'] !== 'Y'
		)
		{
			$keysList = array();
			$contacts = CCrmActivity::FindContactCommunications($search, 'EMAIL', 50);
			foreach($contacts as $contact)
			{
				$keysList[] = $contact['ENTITY_ID'].'_'.$contact['ENTITY_TYPE_ID'];
			}

			$contactsByName = CCrmActivity::FindContactCommunications($search, '', 50);
			foreach($contactsByName as $contact)
			{
				if (
					in_array($contact['ENTITY_ID'].'_'.$contact['ENTITY_TYPE_ID'], $keysList)
					|| empty($contact["VALUE"])
				)
				{
					continue;
				}
				$contacts[] = $contact;
			}

			if (!empty($contacts))
			{
				$arId = $arEmail = array();
				foreach($contacts as $contact)
				{
					$arEmail[intval($contact["ENTITY_ID"])] = $contact["VALUE"];
					$arId[] = intval($contact["ENTITY_ID"]);
				}

				$dbRes = CCrmContact::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'ID' => $arId
					),
					false,
					array('nTopCount' => 10),
					array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'PHOTO')
				);
				while($ar = $dbRes->fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'CONTACT',
						'NAME_TEMPLATE' => $arParams["NAME_TEMPLATE"],
						'EMAIL' => $arEmail[$ar['ID']]
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}

			$companies = CCrmActivity::FindCompanyCommunications($search, 'EMAIL', 50);
			foreach($companies as $company)
			{
				$keysList[] = $company['ENTITY_ID'].'_'.$company['ENTITY_TYPE_ID'];
			}

			$companiesByName = CCrmActivity::FindCompanyCommunications($search, '', 50);
			foreach($companiesByName as $company)
			{
				if (
					in_array($company['ENTITY_ID'].'_'.$company['ENTITY_TYPE_ID'], $keysList)
					|| empty($company["VALUE"])
				)
				{
					continue;
				}
				$companies[] = $company;
			}

			if (!empty($companies))
			{
				$arId = $arEmail = array();
				foreach($companies as $company)
				{
					$arEmail[intval($company["ENTITY_ID"])] = $company["VALUE"];
					$arId[] = intval($company["ENTITY_ID"]);
				}
				$dbRes = CCrmCompany::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'ID' => $arId
					),
					false,
					array('nTopCount' => 10),
					array('ID', 'TITLE', 'LOGO')
				);
				while($ar = $dbRes->Fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'COMPANY',
						'EMAIL' => $arEmail[$ar['ID']]
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}

			$leads = CCrmActivity::FindLeadCommunications($search, 'EMAIL', 50);
			foreach($leads as $lead)
			{
				$keysList[] = $lead['ENTITY_ID'].'_'.$lead['ENTITY_TYPE_ID'];
			}

			$leadsByName = CCrmActivity::FindLeadCommunications($search, '', 50);
			foreach($leadsByName as $lead)
			{
				if (
					in_array($lead['ENTITY_ID'].'_'.$lead['ENTITY_TYPE_ID'], $keysList)
					|| empty($lead["VALUE"])
				)
				{
					continue;
				}
				$leads[] = $lead;
			}

			if (!empty($leads))
			{
				$arId = $arEmail = array();
				foreach($leads as $lead)
				{
					$arEmail[intval($lead["ENTITY_ID"])] = $lead["VALUE"];
					$arId[] = intval($lead["ENTITY_ID"]);
				}

				$dbRes = CCrmLead::GetListEx(
					array(),
					array(
						'CHECK_PERMISSIONS' => 'Y',
						'ID' => $arId
					),
					false,
					array('nTopCount' => 10),
					array('ID', 'TITLE', 'NAME', 'SECOND_NAME', 'LAST_NAME')
				);
				while($ar = $dbRes->Fetch())
				{
					$formatted = self::formatCrmEmailEntity($ar, array(
						'TYPE' => 'LEAD',
						'EMAIL' => $arEmail[$ar['ID']]
					));
					if (!empty($formatted))
					{
						$result[$formatted['id']] = $formatted;
					}
				}
			}
		}
	}

	return $result;
}