AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 18.217.133.91
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/components/bitrix/sender.connector.result.list/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/components/bitrix/sender.connector.result.list/class.php
<?

use Bitrix\Main\Error;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\Grid\Options as GridOptions;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\UI\Filter\Options as FilterOptions;
use Bitrix\Sender\Access\ActionDictionary;
use Bitrix\Sender\Connector;
use Bitrix\Sender\Posting\SegmentDataBuilder;
use Bitrix\Sender\Recipient;
use Bitrix\Sender\UI\PageNavigation;

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 SenderConnectorResultListComponent extends Bitrix\Sender\Internals\CommonSenderComponent
{
	/** @var ErrorCollection $errors */
	protected $errors;

	protected function checkRequiredParams()
	{
		if (empty($this->arParams['ENDPOINT']['CODE']))
		{
			$this->errors->setError(new Error('Empty connector endpoint.'));
			return false;
		}
		return true;
	}

	protected function initParams()
	{
		$this->arParams['GRID_ID'] = isset($this->arParams['GRID_ID']) ? $this->arParams['GRID_ID'] : 'SENDER_CONTACT_LIST_GRID';
		$this->arParams['FILTER_ID'] = isset($this->arParams['FILTER_ID']) ? $this->arParams['FILTER_ID'] : $this->arParams['GRID_ID'] . '_FILTER';
		$this->arParams['SET_TITLE'] = isset($this->arParams['SET_TITLE']) ? $this->arParams['SET_TITLE'] === 'Y' : true;

		if (!isset($this->arParams['ENDPOINT']))
		{
			$endpoint = [];
			$code = $this->request->get('code');
			$fields = $this->request->get('fields');
			if ($code)
			{
				$code = explode('_', $code);
				if (!empty($code[0]))
				{
					$endpoint['MODULE_ID'] = $code[0];
				}
				array_shift($code);
				$endpoint['CODE'] = implode('_', $code);
			}
			if ($fields)
			{
				$endpoint['FIELDS'] = \Bitrix\Main\Web\Json::decode($fields);
			}
			$this->arParams['ENDPOINT'] = $endpoint;
		}
	}

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

		$this->arResult['ERRORS'] = array();
		$this->arResult['ROWS'] = array();

		/*
		$endpoint = [
			'MODULE_ID' => 'sender',
			'CODE' => 'crm_client',
			'FIELDS' => [
				'SENDER_SELECT_ALL' => 'Y',
				'BX_PRESET_ID' => 'Y',
				'STATUS_SEMANTIC_ID' => 'P'
			],
		];
		*/
		$endpoint = $this->arParams['ENDPOINT'];
		$connector = Connector\Manager::getConnector($this->arParams['ENDPOINT']);
		if (!$connector || !$connector->isResultViewable())
		{
			$this->errors->setError(new Error('Unsupportable connector.'));
			return false;
		}

		// set ui filter
		$this->setUiFilter();

		// set ui grid columns
		$this->setUiGridColumns();

		// create nav
		$nav = new PageNavigation("page-sender-connector-result-list");
		$nav->allowAllRecords(false)->setPageSize(10)->initFromUri();

		/** @var Connector\Base $connector */
		$connector->getResultView()->modifyColumns($this->arResult['COLUMNS']);
		$connector->getResultView()->modifyFilter($this->arResult['FILTERS']);
		$connector->getResultView()->setNav($nav);
		$title = $connector->getResultView()->getTitle();
		if ($title)
		{
			$GLOBALS['APPLICATION']->SetTitle($title);
		}


		// get rows
		if (is_array($endpoint['FIELDS']))
		{
			$connector->setFieldValues($endpoint['FIELDS'] + $this->getDataFilter());
			$connector->setDataTypeId($this->getDataTypeId());

			$segmentBuilder = null;
			$groupId = $this->request->get('groupId');
			$filterId = $this->request->get('filterId');
			$isIncrementally = $connector instanceof Connector\IncrementallyConnector && $groupId && $filterId;

			if ($isIncrementally)
			{
				$segmentBuilder = new SegmentDataBuilder(
					$this->request->get('groupId'),
					$this->request->get('filterId'),
					$endpoint
				);
				$this->arResult['BUILDING_COMPLETED'] = $segmentBuilder->isBuildingCompleted();
			}

			$result = !$segmentBuilder
				? $connector->getResult()
				: new Connector\Result(
					$segmentBuilder
						->setDataFilter($this->getDataFilter())
						->getData($nav)
				)
			;

			$result->setDataTypeId($connector->getDataTypeId());
			$fetchedCount = 0;
			while ($item = $result->fetchPlain())
			{
				$connector->getResultView()->onDraw($item);
				$this->arResult['ROWS'][] = $item;
				$fetchedCount++;
				if ($fetchedCount >= $nav->getLimit())
				{
					break;
				}
			}
			$connector->getResultView()->setNav(null);
			$this->arResult['TOTAL_ROWS_COUNT'] = !$segmentBuilder
				? $connector->getDataCount()
				: $segmentBuilder->getDataCount();
		}
		else
		{
			$this->arResult['TOTAL_ROWS_COUNT'] = 0;
		}

		// set rec count to nav
		$nav->setRecordCount($this->arResult['TOTAL_ROWS_COUNT']);
		$this->arResult['NAV_OBJECT'] = $nav;

		return true;
	}

	protected function getDataTypeId()
	{
		$filterOptions = new FilterOptions($this->arParams['FILTER_ID']);
		$requestFilter = $filterOptions->getFilter($this->arResult['FILTERS']);
		if (empty($requestFilter['SENDER_RECIPIENT_TYPE_ID']))
		{
			return null;
		}

		$typeId = (int) $requestFilter['SENDER_RECIPIENT_TYPE_ID'];
		if (!in_array($typeId, Recipient\Type::getList()))
		{
			return null;
		}

		return $typeId ?: null;
	}

	protected function getDataFilter()
	{
		$filterOptions = new FilterOptions($this->arParams['FILTER_ID']);
		$requestFilter = $filterOptions->getFilter($this->arResult['FILTERS']);

		$filter = [];
		foreach ($this->arResult['FILTERS'] as $item)
		{
			if (empty($requestFilter[$item['id']]))
			{
				continue;
			}

			$filter[$item['id']] = $requestFilter[$item['id']];
		}

		return $filter;
	}

	protected function getGridOrder()
	{
		$defaultSort = array('ID' => 'DESC');

		$gridOptions = new GridOptions($this->arParams['GRID_ID']);
		$sorting = $gridOptions->getSorting(array('sort' => $defaultSort));

		$by = key($sorting['sort']);
		$order = mb_strtoupper(current($sorting['sort'])) === 'ASC' ? 'ASC' : 'DESC';

		$list = array();
		foreach ($this->getUiGridColumns() as $column)
		{
			if (!isset($column['sort']) || !$column['sort'])
			{
				continue;
			}

			$list[] = $column['sort'];
		}

		if (!in_array($by, $list))
		{
			return $defaultSort;
		}

		return array($by => $order);
	}

	protected function setUiGridColumns()
	{
		$this->arResult['COLUMNS'] = $this->getUiGridColumns();
	}

	protected function getUiGridColumns()
	{
		return array(
			array(
				"id" => "NAME",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_NAME'),
				"default" => true
			),
			array(
				"id" => "EMAIL",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_EMAIL'),
				"default" => true
			),
			array(
				"id" => "PHONE",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_PHONE'),
				"default" => true
			),
		);
	}

	protected function setUiFilter()
	{
		$this->arResult['FILTERS'] = array(
			array(
				"id" => "NAME",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_NAME'),
				"default" => true,
			),
			array(
				"id" => "EMAIL",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_EMAIL'),
				"default" => true,
			),
			array(
				"id" => "PHONE",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_PHONE'),
				"default" => true,
			),
			array(
				"id" => "SENDER_RECIPIENT_TYPE_ID",
				"name" => Loc::getMessage('SENDER_CONTACT_LIST_UI_COLUMN_RECIPIENT_TYPE_ID'),
				"default" => true,
				"type" => "list",
				"items" => Recipient\Type::getNamedList()
			),
		);
	}

	protected function printErrors()
	{
		foreach ($this->errors as $error)
		{
			ShowError($error);
		}
	}
	
	public function executeComponent()
	{
		parent::executeComponent();
		parent::prepareResultAndTemplate();
	}
	
	public function getEditAction()
	{
		return ActionDictionary::ACTION_SEGMENT_CLIENT_VIEW;
	}
	
	public function getViewAction()
	{
		return ActionDictionary::ACTION_SEGMENT_CLIENT_VIEW;
	}
}

Anon7 - 2022
AnonSec Team