Your IP : 3.145.21.89


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/mail.usersignature.list/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/mail.usersignature.list/class.php

<?php

use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

class MailUserSignatureListComponent extends CBitrixComponent
{
	protected $gridId = 'mail-usersignature-grid';
	protected $filterId = 'mail-usersignature-filter';
	protected $navParamName = 'page';

	/**
	 * @param $arParams
	 * @return array
	 */
	public function onPrepareComponentParams($arParams)
	{
		$arParams = parent::onPrepareComponentParams($arParams);
		if(!$arParams['USER_ID'])
		{
			$arParams['USER_ID'] = \Bitrix\Main\Engine\CurrentUser::get()->getId();
		}

		return $arParams;
	}

	/**
	 * @return mixed|void
	 */
	public function executeComponent()
	{
		if(!Loader::includeModule('mail'))
		{
			$this->showError(Loc::getMessage('MAIL_USERSIGNATURE_MODULE_ERROR'));
			return;
		}

		$this->arResult = [];

		$this->arResult['addUrl'] = new \Bitrix\Main\Web\Uri(\CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_MAIL_SIGNATURE'], ['id' => "0"]));
		$this->arResult['IFRAME'] = $this->arParams['IFRAME'] == 'Y' || $this->request->get('IFRAME') == 'Y' ? 'Y' : 'N';
		$this->arResult['FILTER'] = $this->prepareFilter();
		$this->arResult['GRID'] = $this->prepareGrid();
		$this->arResult['TITLE'] = Loc::getMessage('MAIL_USERSIGNATURE_LIST_TITLE');

		global $APPLICATION;
		$APPLICATION->SetTitle($this->arResult['TITLE']);

		$this->includeComponentTemplate();
	}

	protected function showError($error)
	{
		ShowError($error);
		$this->includeComponentTemplate();
	}

	/**
	 * @return array
	 */
	protected function prepareGrid()
	{
		$grid = [];
		$grid['GRID_ID'] = $this->gridId;
		$grid['COLUMNS'] = [
			[
				'id' => 'ID',
				'name' => 'ID',
				'default' => false,
			],
			[
				'id' => 'SENDER',
				'name' => Loc::getMessage('MAIL_USERSIGNATURE_LIST_SENDER'),
				'default' => true,
			],
			[
				'id' => 'SIGNATURE',
				'name' => Loc::getMessage('MAIL_USERSIGNATURE_LIST_SIGNATURE'),
				'default' => true,
			],
		];

		$gridOptions = new Bitrix\Main\Grid\Options($this->gridId);
		$navParams = $gridOptions->getNavParams(['nPageSize' => 10]);
		$pageSize = (int)$navParams['nPageSize'];
		$pageNavigation = new \Bitrix\Main\UI\PageNavigation($this->navParamName);
		$pageNavigation->allowAllRecords(false)->setPageSize($pageSize)->initFromUri();

		$signatureList = \Bitrix\Mail\Internals\UserSignatureTable::getList([
			'order' => ['ID' => 'desc'],
			'filter' => $this->getListFilter(),
			'offset' => $pageNavigation->getOffset(),
			'limit' => $pageNavigation->getLimit(),
			'count_total' => true,
		]);
		$signatures = $signatureList->fetchCollection();
		foreach($signatures as $signature)
		{
			/** @var \Bitrix\Main\Web\Uri $editUrl */
			$editUrl = new \Bitrix\Main\Web\Uri(\CComponentEngine::makePathFromTemplate($this->arParams['PATH_TO_MAIL_SIGNATURE'], ['id' => $signature->getId()]));
			$grid['ROWS'][] = [
				'id' => $signature->getId(),
				'data' => $signature->collectValues(),
				'columns' => [
					'ID' => $signature->getId(),
					'SENDER' => !empty($signature->getSender()) ? htmlspecialcharsbx($signature->getSender()) : Loc::getMessage('MAIL_USERSIGNATURE_LIST_DEFAULT'),
					'SIGNATURE' => htmlspecialcharsbx(strip_tags(mb_substr($signature->getSignature(), 0, 100)), ENT_COMPAT, false),
				],
				'actions' => [
					[
						'ICONCLASS' => 'edit',
						'TEXT' => Loc::getMessage('MAIL_USERSIGNATURE_EDIT_ACTION'),
						'ONCLICK' => 'BX.Mail.UserSignature.List.openUrl(\''.$editUrl->getLocator().'\')',
					],
					[
						'ICONCLASS' => 'delete',
						'TEXT' => Loc::getMessage('MAIL_USERSIGNATURE_DELETE_ACTION'),
						'ONCLICK' => 'BX.Mail.UserSignature.List.delete(\''.$signature->getId().'\')',
					],
				],
			];
		}

		$fullCount = $signatureList->getCount();
		$pageNavigation->setRecordCount($fullCount);
		$grid['TOTAL_ROWS_COUNT'] = $fullCount;
		$grid['NAV_OBJECT'] = $pageNavigation;
		$grid['AJAX_MODE'] = 'Y';
		$grid['ALLOW_ROWS_SORT'] = false;
		$grid['AJAX_OPTION_JUMP'] = "N";
		$grid['AJAX_OPTION_STYLE'] = "N";
		$grid['AJAX_OPTION_HISTORY'] = "N";
		$grid['SHOW_PAGESIZE'] = false;
		$grid['AJAX_ID'] = \CAjax::GetComponentID("bitrix:main.ui.grid", '', '');
		$grid['SHOW_ROW_CHECKBOXES'] = false;
		$grid['SHOW_CHECK_ALL_CHECKBOXES'] = false;
		$grid['SHOW_ACTION_PANEL'] = false;

		return $grid;
	}

	/**
	 * @return array
	 */
	protected function prepareFilter()
	{
		$filter = [
			'FILTER_ID' => $this->filterId,
			'GRID_ID' => $this->gridId,
			'FILTER' => $this->getDefaultFilterFields(),
			'DISABLE_SEARCH' => false,
			'ENABLE_LABEL' => true,
			'RESET_TO_DEFAULT_MODE' => false,
			'ENABLE_LIVE_SEARCH' => true,
		];

		return $filter;
	}

	/**
	 * @return array
	 */
	protected function getDefaultFilterFields()
	{
		return [
			[
				'id' => 'SENDER',
				'name' => Loc::getMessage('MAIL_USERSIGNATURE_LIST_SENDER'),
				'default' => true,
			],
		];
	}

	/**
	 * @return array
	 */
	protected function getListFilter()
	{
		$filter = ['USER_ID' => $this->arParams['USER_ID']];

		$filterOptions = new Bitrix\Main\UI\Filter\Options($this->filterId);
		$requestFilter = $filterOptions->getFilter($this->getDefaultFilterFields());

		if(isset($requestFilter['SENDER']) && !empty($requestFilter['SENDER']))
		{
			$filter['SENDER'] = '%' . $requestFilter['SENDER'] . '%';
		}
		elseif(isset($requestFilter['FIND']) && !empty($requestFilter['FIND']))
		{
			$filter[] = [
				'LOGIC' => 'OR',
				'SENDER' => '%' . $requestFilter['FIND'] . '%',
				'SIGNATURE' => '%' . $requestFilter['FIND'] . '%',
			];
		}

		return $filter;
	}
}