Your IP : 18.217.118.104


Current Path : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sender/lib/connector/
Upload File :
Current File : /home/bitrix/ext_www/klimatlend.ua/bitrix/modules/sender/lib/connector/base.php

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

use Bitrix\Sender\Recipient;


abstract class Base
{
	protected $fieldPrefix;
	protected $fieldPrefixExtended;
	protected $fieldValues;
	protected $fieldFormName;
	protected $moduleId;

	/** @var  ResultView $resultView View of result. */
	protected $resultView;

	/** @var  integer $dataTypeId Data type ID. */
	protected $dataTypeId = Recipient\Type::EMAIL;

	/**
	 * @param string $moduleId
	 * @return void
	 */
	public function setModuleId($moduleId)
	{
		$this->moduleId = $moduleId;
	}

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

	/**
	 * Get data type ID.
	 *
	 * @return integer
	 */
	public function getDataTypeId()
	{
		return $this->dataTypeId;
	}

	/**
	 * Set data type ID.
	 *
	 * @param integer $dataTypeId Data type ID.
	 * @return void
	 */
	public function setDataTypeId($dataTypeId)
	{
		$this->dataTypeId = $dataTypeId;
	}

	/**
	 * @param string $fieldFormName
	 * @return void
	 */
	public function setFieldFormName($fieldFormName)
	{
		$this->fieldFormName = $fieldFormName;
	}

	/** @return string */
	public function getFieldFormName()
	{
		return $this->fieldFormName;
	}

	/**
	 * @param string $fieldPrefix
	 * @return void
	 */
	public function setFieldPrefix($fieldPrefix)
	{
		$this->fieldPrefix = $fieldPrefix;
	}
	/** @return string */
	public function getFieldPrefix()
	{
		return $this->fieldPrefix;
	}

	/**
	 * @param string $fieldPrefixExtended
	 * @return void
	 */
	public function setFieldPrefixExtended($fieldPrefixExtended)
	{
		$this->fieldPrefixExtended = $fieldPrefixExtended;
	}
	/** @return string */
	public function getFieldPrefixExtended()
	{
		return $this->fieldPrefixExtended;
	}

	/**
	 * Set field values.
	 *
	 * @param array $fieldValues Values.
	 * @return void
	 */
	public function setFieldValues(array $fieldValues = null)
	{
		$this->fieldValues = $fieldValues;
	}

	/**
	 * Get field values.
	 *
	 * @return array
	 */
	public function getFieldValues()
	{
		return is_array($this->fieldValues) ? $this->fieldValues : array();
	}

	/**
	 * Return true if it has field values.
	 *
	 * @return bool
	 */
	public function hasFieldValues()
	{
		return count($this->getFieldValues()) > 0;
	}

	/**
	 * @param $id
	 * @return string
	 */
	public function getFieldId($id)
	{
		$fieldPrefix = $this->getFieldPrefix();
		$fieldPrefixExtended = $this->getFieldPrefixExtended();
		if($fieldPrefix)
		{
			$moduleId = str_replace('.', '_', $this->getModuleId());
			return $fieldPrefix . '_' . $moduleId . '_' . $this->getCode() . '_%CONNECTOR_NUM%_' . $id;
		}
		elseif($fieldPrefixExtended)
		{
			return str_replace(array('][', '[', ']'), array('_', '', ''), $fieldPrefixExtended) .'_'. $id;
		}
		else
			return $id;
	}

	/**
	 * @param $name
	 * @return string
	 */
	public function getFieldName($name)
	{
		$fieldPrefix = $this->getFieldPrefix();
		$fieldPrefixExtended = $this->getFieldPrefixExtended();
		if($fieldPrefix || $fieldPrefixExtended)
		{
			$arReturnName = array();
			if($fieldPrefix)
				$arReturnName[] = $fieldPrefix.'['.$this->getModuleId().']['.$this->getCode().'][%CONNECTOR_NUM%]';
			else
				$arReturnName[] = $fieldPrefixExtended;

			$arName = explode('[', $name);
			$arReturnName[] = '['.$arName[0].']';
			if(count($arName)>1)
			{
				unset($arName[0]);
				$arReturnName[] = '['.implode('[', $arName);
			}

			return implode('', $arReturnName);
		}
		else
			return $name;
	}

	/**
	 * @param $name
	 * @param mixed $defaultValue
	 * @return null
	 */
	public function getFieldValue($name, $defaultValue = null)
	{
		if($this->fieldValues && array_key_exists($name, $this->fieldValues))
			return $this->fieldValues[$name];
		else
			return $defaultValue;
	}

	/**
	 * @return string
	 */
	public function getId()
	{
		return $this->getModuleId().'_'.$this->getCode();
	}

	/**
	 * Get data count.
	 *
	 * @return integer
	 */
	public function getDataCount()
	{
		return $this->getResult()->getSelectedRowsCount();
	}

	/**
	 * Get data count by type.
	 *
	 * @return null|array|DataCounter
	 */
	protected function getDataCountByType()
	{
		return null;
	}

	/**
	 * Get data counter.
	 *
	 * @return DataCounter
	 */
	final function getDataCounter()
	{
		$dataCounts = $this->getDataCountByType();
		if (is_object($dataCounts) && $dataCounts instanceof DataCounter)
		{
			return $dataCounts;
		}
		else if (!is_array($dataCounts))
		{
			$dataCounts = array($this->getDataTypeId() => $this->getDataCount());
		}

		return new DataCounter($dataCounts);
	}

	/**
	 * Get result.
	 *
	 * @return Result
	 */
	final function getResult()
	{
		$personalizeList = array();
		$personalizeListTmp = $this->getPersonalizeList();
		foreach($personalizeListTmp as $tag)
		{
			if(strlen($tag['CODE']) > 0)
			{
				$personalizeList[] = $tag['CODE'];
			}
		}

		$result = new Result($this->getData());
		$result->setFilterFields($personalizeList);
		$result->setDataTypeId($this->getDataTypeId());

		return $result;
	}

	/**
	 * Return true if support view of result.
	 *
	 * @return bool
	 */
	public function isResultViewable()
	{
		return false;
	}

	/**
	 * Get result view.
	 *
	 * @return ResultView
	 * @return void
	 */
	public function getResultView()
	{
		if (!$this->resultView)
		{
			$this->resultView = new ResultView($this);
			$this->onInitResultView();
		}

		return $this->resultView;
	}

	/**
	 * Set result view.
	 *
	 * @param ResultView $resultView Result view.
	 * @return void
	 */
	public function setResultView($resultView)
	{
		$this->resultView = $resultView;
	}

	protected function onInitResultView()
	{

	}

	/**
	 * @return bool
	 */
	public function requireConfigure()
	{
		return false;
	}

	/**
	 * @return array
	 */
	public static function getPersonalizeList()
	{
		return array();
	}

	/**
	 * @return string
	 */
	public abstract function getName();

	/**
	 * @return string
	 */
	public abstract function getCode();

	/**
	 * @return array|\Bitrix\Main\DB\Result|\CAllDBResult
	 */
	public abstract function getData();

	/**
	 * @return string
	 */
	public abstract function getForm();
}