Your IP : 18.218.131.11


Current Path : /home/bitrix/ext_www/www.piano.royal-thermo.com.ua/bitrix/modules/sender/lib/
Upload File :
Current File : /home/bitrix/ext_www/www.piano.royal-thermo.com.ua/bitrix/modules/sender/lib/triggerconnector.php

<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage sender
 * @copyright 2001-2012 Bitrix
 */
namespace Bitrix\Sender;


abstract class TriggerConnector extends Trigger
{
	/** @var \Bitrix\Sender\Connector $connector */
	public $connector;

	/** @return string */
	final protected function getConnectorForm()
	{
		$endpoint = $this->getConnector();
		if(is_array($endpoint) && !empty($endpoint['CODE']))
		{
			$this->connector = ConnectorManager::getConnector($endpoint);
		}
		elseif(is_object($endpoint) && $endpoint instanceof Connector)
		{
			$this->connector = $endpoint;
		}

		if($this->connector)
		{
			$this->connector->setFieldPrefixExtended($this->getFieldPrefix());
			$this->connector->setFieldFormName($this->getFieldFormName());
			$this->connector->setFieldValues($this->getFields());

			return $this->connector->getForm();
		}
		else
			return '';
	}

	/** @return bool */
	final protected function filterConnectorData()
	{
		$result = true;

		$endpoint = $this->getConnector();
		if(is_array($endpoint) && !empty($endpoint['CODE']))
		{
			// do not send mails if connector will not found
			$result = false;

			// try to find connector
			$connector = ConnectorManager::getConnector($endpoint);
			$this->connector = $connector;
		}
		elseif(is_object($endpoint) && $endpoint instanceof Connector)
		{
			$this->connector = $endpoint;
		}


		if($this->connector)
		{
			// merge connector filter and proxy fields. proxy fields have priority
			$connectorFields = $this->getProxyFieldsFromEventToConnector();
			if(!empty($connectorFields))
			{
				$connectorFields = $connectorFields + $this->getFields();
			}
			// set fields to connector
			$this->connector->setFieldValues($connectorFields);


			$result = false;
			// add recipient from data if connector get it
			$recipientDb = $this->connector->getData();
			if($recipient = $recipientDb->Fetch())
			{
				$this->recipient = $recipient;
				$result = true;
			}
		}

		return $result;
	}


	/** @return string */
	public function getForm()
	{
		$connectorForm = $this->getConnectorForm();
		if($connectorForm)
			return $connectorForm;
		else
			return '';
	}

	/** @return bool */
	public function filter()
	{
		return $this->filterConnectorData();
	}

	/** @return mixed */
	public function getRecipient()
	{
		return $this->recipient;
	}

	/** @return array */
	public function getProxyFieldsFromEventToConnector()
	{
		$eventData = $this->getParam('EVENT');
		return array('ID' => $eventData['ID']);
	}

	/**
	 * @return \Bitrix\Sender\ConnectorResult
	 */
	public function getRecipientResult()
	{
		$result = parent::getRecipientResult();
		if(!$this->connector)
		{
			return $result;
		}

		$personalizeList = array();
		$connectorPersonalizeList = $this->connector->getPersonalizeList();
		foreach($connectorPersonalizeList as $tag)
		{
			if(strlen($tag['CODE']) > 0)
			{
				$personalizeList[] = $tag['CODE'];
			}
		}
		$result->setFilterFields(array_merge($result->getFilterFields(),  $personalizeList));

		return $result;
	}

	/**
	 * return filled array('MODULE_ID' => '', 'CODE' => '') that describes connector
	 * or return object \Bitrix\Sender\Connector
	 *
	 * @return array|\Bitrix\Sender\Connector
	 */
	public function getConnector()
	{
		return array(
			'MODULE_ID' => '',
			'CODE' => ''
		);
	}
}