Your IP : 52.14.31.251


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/recycling/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/crm/lib/recycling/contactrelationmanager.php

<?php
namespace Bitrix\Crm\Recycling;

use Bitrix\Crm;

class ContactRelationManager extends BaseRelationManager
{
	/** @var ContactRelationManager|null */
	protected static $instance = null;

	/**
	 * @return ContactRelationManager
	 */
	public static function getInstance()
	{
		if(self::$instance === null)
		{
			self::$instance = new ContactRelationManager();
		}
		return self::$instance;
	}

	/**
	 * Get Entity Type ID
	 * @return int
	 */
	public function getEntityTypeID()
	{
		return \CCrmOwnerType::Contact;
	}

	public function buildCollection($entityID, array &$recyclingData)
	{
		$companyIDs = isset($recyclingData['COMPANY_IDS']) && is_array($recyclingData['COMPANY_IDS'])
			? $recyclingData['COMPANY_IDS'] : array();
		unset($recyclingData['COMPANY_IDS']);

		$dealIDs = isset($recyclingData['DEAL_IDS']) && is_array($recyclingData['DEAL_IDS'])
			? $recyclingData['DEAL_IDS'] : array();
		unset($recyclingData['DEAL_IDS']);

		$leadIDs = isset($recyclingData['LEAD_IDS']) && is_array($recyclingData['LEAD_IDS'])
			? $recyclingData['LEAD_IDS'] : array();
		unset($recyclingData['LEAD_IDS']);

		$parentLeadID = isset($recyclingData['PARENT_LEAD_ID']) ? $recyclingData['PARENT_LEAD_ID'] : 0;
		unset($recyclingData['PARENT_LEAD_ID']);

		$relations = array();
		$this->prepareActivityRelations(
			\CCrmOwnerType::Contact,
			$entityID,
			$recyclingData,
			$relations
		);

		if(!empty($companyIDs))
		{
			foreach($companyIDs as $companyID)
			{
				$relations[] = new Relation(
					\CCrmOwnerType::Company,
					$companyID,
					\CCrmOwnerType::Contact,
					$entityID
				);
			}
		}

		if(!empty($dealIDs))
		{
			foreach($dealIDs as $dealID)
			{
				$relations[] = new Relation(
					\CCrmOwnerType::Contact,
					$entityID,
					\CCrmOwnerType::Deal,
					$dealID
				);
			}
		}

		if(!empty($leadIDs))
		{
			foreach($leadIDs as $leadID)
			{
				$relations[] = new Relation(
					\CCrmOwnerType::Contact,
					$entityID,
					\CCrmOwnerType::Lead,
					$leadID
				);
			}
		}

		if($parentLeadID > 0)
		{
			$relations[] = new Relation(
				\CCrmOwnerType::Lead,
				$parentLeadID,
				\CCrmOwnerType::Contact,
				$entityID
			);
		}

		return $relations;
	}
	public function prepareRecoveryFields(array &$fields, RelationMap $map)
	{
		if(!$map->isBuilt())
		{
			$map->build();
		}

		$companyIDs = Crm\Entity\Company::selectExisted(
			$map->getSourceEntityIDs(\CCrmOwnerType::Company)
		);
		if(!empty($companyIDs))
		{
			$fields['COMPANY_IDS'] = $companyIDs;
		}

		$parentLeadIDs = Crm\Entity\Lead::selectExisted(
			$map->getSourceEntityIDs(\CCrmOwnerType::Lead)
		);
		if(!empty($parentLeadIDs))
		{
			$fields['LEAD_ID'] = $parentLeadIDs[0];
		}
	}
	public function recoverBindings($entityID, RelationMap $map)
	{
		if(!$map->isBuilt())
		{
			$map->build();
		}

		$dealIDs = Crm\Entity\Deal::selectExisted(
			$map->getDestinationEntityIDs(\CCrmOwnerType::Deal)
		);
		if(!empty($dealIDs))
		{
			DealBinder::getInstance()->bindEntities(
				\CCrmOwnerType::Contact,
				$entityID,
				$dealIDs
			);
		}

		$leadIDs = Crm\Entity\Lead::selectExisted(
			$map->getDestinationEntityIDs(\CCrmOwnerType::Lead)
		);
		if(!empty($leadIDs))
		{
			LeadBinder::getInstance()->bindEntities(
				\CCrmOwnerType::Contact,
				$entityID,
				$leadIDs
			);
		}
	}
}