Your IP : 18.224.212.19


Current Path : /var/www/axolotl/data/www/krym.axolotls.ru/bitrix/components/bitrix/sender.start/
Upload File :
Current File : /var/www/axolotl/data/www/krym.axolotls.ru/bitrix/components/bitrix/sender.start/class.php

<?

use Bitrix\Main\Error;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Web\Uri;
use Bitrix\Sender\Access\ActionDictionary;
use Bitrix\Sender\Access\Map\AdsAction;
use Bitrix\Sender\Access\Map\MailingAction;
use Bitrix\Sender\Access\Map\RcAction;
use Bitrix\Sender\Integration;
use Bitrix\Sender\Message;

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
	die();
}

if (!Bitrix\Main\Loader::includeModule('sender'))
{
	ShowError('Module `sender` not installed');
	die();
}

Loc::loadMessages(__FILE__);

class SenderStartComponent extends Bitrix\Sender\Internals\CommonSenderComponent
{
	/** @var ErrorCollection $errors Errors. */
	protected $errors;

	protected function checkRequiredParams()
	{
		if (!Bitrix\Main\Loader::includeModule('sender'))
		{
			$this->errors->setError(new Error('Module `sender` is not installed.'));
			return false;
		}

		return true;
	}

	protected function initParams()
	{
		$this->arParams['SET_TITLE'] = isset($this->arParams['SET_TITLE']) ? $this->arParams['SET_TITLE'] == 'Y' : true;
		$this->arParams['PATH_TO_ADS_ADD'] = isset($this->arParams['PATH_TO_ADS_ADD'])
			?
			$this->arParams['PATH_TO_ADS_ADD']
			:
			str_replace('letter', 'ads', $this->arParams['PATH_TO_LETTER_ADD']);
		$this->arParams['PATH_TO_RC_ADD'] = isset($this->arParams['PATH_TO_RC_ADD'])
			?
			$this->arParams['PATH_TO_RC_ADD']
			:
			str_replace('letter', 'rc', $this->arParams['PATH_TO_LETTER_ADD']);

		$this->arParams['PATH_TO_TOLOKA_ADD'] = $this->arParams['PATH_TO_TOLOKA_ADD']??
			str_replace('letter', 'toloka', $this->arParams['PATH_TO_LETTER_ADD']);
	}

	protected function getSenderMessageIcon(Message\Adapter $message)
	{
		$code = $message->getCode();
		$map = [
			Message\iBase::CODE_MAIL => 'ui-icon-service-campaign',
			Message\iBase::CODE_SMS => 'ui-icon-service-sms',
			Message\iBase::CODE_IM => 'ui-icon-service-messenger',
			Message\iBase::CODE_CALL => 'ui-icon-service-infocall',
			Message\iBase::CODE_AUDIO_CALL => 'ui-icon-service-audio-infocall',
			Message\iBase::CODE_WEB_HOOK => '',
			Integration\Seo\Ads\MessageBase::CODE_ADS_FB => 'ui-icon-service-fb',
			Integration\Seo\Ads\MessageBase::CODE_ADS_YA => 'ui-icon-service-ya-direct',
			Integration\Seo\Ads\MessageBase::CODE_ADS_GA => 'ui-icon-service-google-ads',
			Integration\Seo\Ads\MessageBase::CODE_ADS_VK => 'ui-icon-service-vk',
			Integration\Seo\Ads\MessageBase::CODE_ADS_LOOKALIKE_FB => 'ui-icon-service-fb',
			Integration\Seo\Ads\MessageBase::CODE_ADS_LOOKALIKE_VK => 'ui-icon-service-vk',
			Integration\Crm\ReturnCustomer\MessageBase::CODE_RC_DEAL => 'ui-icon-service-deal',
			Integration\Crm\ReturnCustomer\MessageBase::CODE_RC_LEAD => 'ui-icon-service-lead',
			Message\iBase::CODE_TOLOKA => 'ui-icon-service-ya-toloka',
		];

		return 'ui-icon ' . $map[$code];
	}

	protected function getSenderMessages(array $messages)
	{
		$pathToLetterAdd = $this->arParams['PATH_TO_LETTER_ADD'];
		$uri = new Uri($pathToLetterAdd);
		$uri->addParams(array('code' => '#code#'));
		$pathToLetterAdd = $uri->getLocator();

		$pathToAdsAdd = $this->arParams['PATH_TO_ADS_ADD'];
		$uri = new Uri($pathToAdsAdd);
		$uri->addParams(array('code' => '#code#'));
		$pathToAdsAdd = $uri->getLocator();

		$pathToRcAdd = $this->arParams['PATH_TO_RC_ADD'];
		$uri = new Uri($pathToRcAdd);
		$uri->addParams(array('code' => '#code#'));
		$pathToRcAdd = $uri->getLocator();

		$pathToTolokaAdd = $this->arParams['PATH_TO_TOLOKA_ADD'];
		$uri = new Uri($pathToTolokaAdd);
		$uri->addParams(array('code' => '#code#'));
		$pathToTolokaAdd = $uri->getLocator();

		$list = [];
		foreach ($messages as $message)
		{
			$message = new Message\Adapter($message);

			if ($message->isHidden())
			{
				continue;
			}

			if ($message->isAds())
			{
				$pathToAdd = $pathToAdsAdd;
			}
			elseif ($message->isReturnCustomer())
			{
				$pathToAdd = $pathToRcAdd;
			}
			elseif($message->isMailing())
			{
				$pathToAdd = $pathToLetterAdd;
			}
			else
			{
				$pathToAdd = $pathToTolokaAdd;
			}

			$list[] = array(
				'CODE' => $message->getCode(),
				'NAME' => $message->getName(),
				'IS_AVAILABLE' => $message->isAvailable(),
				'ICON_CLASS' => $this->getSenderMessageIcon($message),
				'URL' => str_replace(
					array('#code#', urlencode('#code#')),
					$message->getCode(),
					$pathToAdd
				)
			);
		}

		$featured = array(
			Message\iBase::CODE_MAIL,
			Message\iBase::CODE_SMS,
			Message\iBase::CODE_IM,
			Message\iBase::CODE_CALL,
			Message\iBase::CODE_AUDIO_CALL,
			Message\iBase::CODE_WEB_HOOK
		);

		$featuredList = array();
		$otherList = array();

		foreach ($list as $message)
		{
			$code = $message['CODE'];
			if (in_array($code, $featured))
			{
				$featuredList[$code] = $message;
			}
			else
			{
				$otherList[$code] = $message;
			}
		}

		$diffCount = count($featured) - count($featuredList);
		$otherCount = count($otherList);
		if ($diffCount > 0 && $otherCount > 0)
		{
			for ($i = 0; ($i < $diffCount && $i < $otherCount); $i++)
			{
				$message = array_shift($otherList);
				if (!$message)
				{
					break;
				}

				$featuredList[] = $message;
			}
		}

		return array(
			'LIST' => $list,
			'FEATURED_LIST' => $featuredList,
			'OTHER_LIST' => $otherList,
		);
	}

	private function filterMessages($messages, $map): array
	{
		$result = [];
		foreach ($messages as $message)
		{
			if(!$this->getAccessController()->check(
				$map[$message::CODE]
			))
			{
				continue;
			}
			$result[] = $message;
		}

		return $result;
	}

	protected function prepareResult()
	{
		/* Set title */
		if ($this->arParams['SET_TITLE'])
		{
			/**@var CMain*/
			$GLOBALS['APPLICATION']->SetTitle(Loc::getMessage('SENDER_START_TITLE'));
		}

		$mailingMessages = $this->filterMessages(Message\Factory::getMailingMessages(), MailingAction::getMap());
		$adsMessages = $this->filterMessages(Message\Factory::getAdsMessages(), AdsAction::getMap());
		$rcMessages = $this->filterMessages(Message\Factory::getReturnCustomerMessages(), RcAction::getMap());
		$tolokaMessages = $this->filterMessages(Message\Factory::getTolokaMessages(), RcAction::getMap());

		$this->arResult['MESSAGES'] = array(
			'MAILING' =>  $this->getSenderMessages(
				$this->getAccessController()->check(ActionDictionary::ACTION_MAILING_VIEW)
				?
					$mailingMessages
				:
				[]
			),
			'ADS' =>  $this->getSenderMessages(
				$this->getAccessController()->check(ActionDictionary::ACTION_ADS_VIEW)
				?
					$adsMessages
				:
				[]
			),
			'RC' =>  $this->getSenderMessages(
				$this->getAccessController()->check(ActionDictionary::ACTION_RC_VIEW)
					?
					$rcMessages
					:
					[]
			),
			'TOLOKA' =>  $this->getSenderMessages(
				$this->getAccessController()->check(ActionDictionary::ACTION_RC_VIEW)
					?
					$tolokaMessages
					:
					[]
			),
		);

		foreach ($this->arResult['MESSAGES'] as $section => $data)
		{
			$data['TILES'] = array_map(
				function ($item)
				{
					return [
						'id' => $item['CODE'],
						'name' => $item['NAME'],
						'selected' => $item['IS_AVAILABLE'],
						'iconClass' => $item['ICON_CLASS'],
						'data' => [
							'url' => $item['URL']
						],
					];
				},
				$data['LIST']
			);

			$this->arResult['MESSAGES'][$section] = $data;
		}
		Integration\Bitrix24\Service::initLicensePopup();

		return true;
	}

	protected function printErrors()
	{
		foreach ($this->errors as $error)
		{
			ShowError($error);
		}
	}

	public function executeComponent()
	{
		parent::executeComponent();
		parent::prepareResultAndTemplate();
	}

	public function getEditAction()
	{
		return ActionDictionary::ACTION_START_VIEW;
	}

	public function getViewAction()
	{
		return ActionDictionary::ACTION_START_VIEW;
	}
}