• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/ads/adsaudience.php
  • Класс: Bitrix\Crm\Ads\AdsAudience
  • Вызов: AdsAudience::getAddresses
static function getAddresses($entityTypeId, $entityId)
{
	$result = array();

	$multiFieldTypeToAudienceContactTypeMap = array(
		\CCrmFieldMulti::EMAIL => Audience::ENUM_CONTACT_TYPE_EMAIL,
		\CCrmFieldMulti::PHONE => Audience::ENUM_CONTACT_TYPE_PHONE,
	);

	$entityFilterList = array();
	if (in_array($entityTypeId, array(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, \CCrmOwnerType::Invoice)))
	{
		$companyFieldCode = 'COMPANY_ID';
		$contactFieldCode = 'CONTACT_ID';
		$subFilter = array('=ID' => $entityId, 'CHECK_PERMISSIONS' => 'N');
		switch ($entityTypeId)
		{
			case \CCrmOwnerType::Deal:
				$entityDb = \CCrmDeal::getListEx(array(), $subFilter);
				break;

			case \CCrmOwnerType::Quote:
				$entityDb = \CCrmQuote::getList(array(), $subFilter);
				break;

			case \CCrmOwnerType::Invoice:
				$companyFieldCode = 'UF_COMPANY_ID';
				$contactFieldCode = 'UF_CONTACT_ID';
				$entityDb = \CCrmInvoice::getList(array(), $subFilter);
				break;

			default:
				return $result;
		}

		$entityData = $entityDb->fetch();
		if (isset($entityData[$contactFieldCode]) && $entityData[$contactFieldCode])
		{
			$entityFilterList[\CCrmOwnerType::Contact] = $entityData[$contactFieldCode];
		}
		if (isset($entityData[$companyFieldCode]) && $entityData[$companyFieldCode])
		{
			$entityFilterList[\CCrmOwnerType::Company] = $entityData[$companyFieldCode];
		}
	}
	else
	{
		$entityFilterList[$entityTypeId] = $entityId;
	}

	foreach ($entityFilterList as $entityTypeId => $entityId)
	{
		$entityTypeName = \CCrmOwnerType::ResolveName($entityTypeId);
		if (!$entityTypeName)
		{
			continue;
		}
		if (!$entityId)
		{
			continue;
		}

		$multiFieldDb = \CCrmFieldMulti::GetListEx(
			null,
			array(
				'ENTITY_ID' => $entityTypeName,
				'ELEMENT_ID' => $entityId,
				'TYPE_ID' => array(
					\CCrmFieldMulti::EMAIL,
					\CCrmFieldMulti::PHONE
				)
			)
		);
		while($multiField = $multiFieldDb->Fetch())
		{
			if (!isset($multiFieldTypeToAudienceContactTypeMap[$multiField['TYPE_ID']]))
			{
				continue;
			}

			$contactType = $multiFieldTypeToAudienceContactTypeMap[$multiField['TYPE_ID']];
			if (!is_array($result[$contactType]))
			{
				$result[$contactType] = array();
			}

			$result[$contactType][] = $multiField['VALUE'];
		}
	}
	return $result;
}