Your IP : 3.149.244.228


Current Path : /home/bitrix/ext_www/dev.shuft.com.ua/bitrix/components/bitrix/main.userconsent.edit/
Upload File :
Current File : /home/bitrix/ext_www/dev.shuft.com.ua/bitrix/components/bitrix/main.userconsent.edit/class.php

<?

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\ErrorCollection;
use Bitrix\Main\UserConsent\Agreement;
use Bitrix\Main\UserConsent\Intl;
use Bitrix\Main\UserConsent\Internals\FieldTable;
use Bitrix\Main\UserConsent\Text;

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

Loc::loadMessages(__FILE__);

class MainUserConsentEditComponent extends CBitrixComponent
{
	/** @var ErrorCollection $errors */
	protected $errors;

	/** @var  Agreement $agreement */
	protected $agreement;

	protected function checkRequiredParams()
	{
		return true;
	}

	protected function initParams()
	{
		$this->arParams['ID'] = isset($this->arParams['ID']) ? intval($this->arParams['ID']) : null;

		$this->arParams['PATH_TO_ADD'] = isset($this->arParams['PATH_TO_ADD']) ? $this->arParams['PATH_TO_ADD'] : '';
		$this->arParams['PATH_TO_EDIT'] = isset($this->arParams['PATH_TO_EDIT']) ? $this->arParams['PATH_TO_EDIT'] : '';
		$this->arParams['PATH_TO_LIST'] = isset($this->arParams['PATH_TO_LIST']) ? $this->arParams['PATH_TO_LIST'] : '';

		$this->arParams['IFRAME'] = isset($this->arParams['IFRAME']) ? $this->arParams['IFRAME'] == 'Y' : $this->request->get('IFRAME') == 'Y';
		$this->arParams['SET_TITLE'] = isset($this->arParams['SET_TITLE']) ? $this->arParams['SET_TITLE'] == 'Y' : true;
		$this->arParams['CAN_EDIT'] = isset($this->arParams['CAN_EDIT']) ? $this->arParams['CAN_EDIT'] : false;
	}

	protected function processPost()
	{
		$languageId = $this->request->getPost('LANGUAGE_ID');

		$fieldList = array();
		$fields = $this->request->getPost('FIELDS');
		if (isset($fields[$languageId]) && is_array($fields[$languageId]))
		{
			$fieldList = $fields[$languageId];
		}

		$data = array(
			'NAME' => $this->request->getPost('NAME'),
			'TYPE' => $this->request->getPost('TYPE'),
			'LANGUAGE_ID' => $languageId,
			'DATA_PROVIDER' => $this->request->getPost('DATA_PROVIDER'),
			'AGREEMENT_TEXT' => $this->request->getPost('AGREEMENT_TEXT'),
			'LABEL_TEXT' => $this->request->getPost('LABEL_TEXT'),
			'FIELDS' => $fieldList,
		);
		$this->agreement->mergeData($data);
		$this->agreement->save();
		if ($this->agreement->hasErrors())
		{
			$this->arResult['ERRORS'] = $this->agreement->getErrors();
		}
		elseif ($this->request->get('save'))
		{
			if ($this->arParams['IFRAME'])
			{
				$this->arResult['IS_SAVED'] = true;
			}
			else
			{
				LocalRedirect($this->arParams['PATH_TO_LIST']);
			}
		}
		else
		{
			$pathTo = str_replace('#id#', $this->agreement->getId(), $this->arParams['PATH_TO_EDIT']);
			if ($this->arParams['IFRAME'])
			{
				$pathTo .= strpos($pathTo, '?') === false ? '?' : '&';
				$pathTo .= 'IFRAME=Y';
			}

			LocalRedirect($pathTo);
		}
	}

	protected function prepareResult()
	{
		$this->arResult['IS_SAVED'] = false;
		$this->arResult['ERRORS'] = array();
		$this->agreement = new Agreement($this->arParams['ID']);

		if($this->request->isPost() && check_bitrix_sessid() && $this->arParams['CAN_EDIT'])
		{
			$this->processPost();
		}

		/* Set data */
		$this->arResult['DATA'] = $this->agreement->getData();

		/* Set data providers */
		$this->prepareResultDataProviders();

		/* Set types */
		$this->prepareResultTypes();

		/* Set title */
		if ($this->arParams['SET_TITLE'])
		{
			/**@var CMain*/
			$GLOBALS['APPLICATION']->SetTitle(
				$this->agreement->getId()
				?
				Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_TITLE_EDIT')
				:
				Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_TITLE_ADD')
			);
		}

		return true;
	}

	protected function prepareResultTypes()
	{
		$this->arResult['TYPE_LIST'] = array();
		$data = $this->arResult['DATA'];
		$postFields = (isset($data['FIELDS']) && is_array($data['FIELDS'])) ? $data['FIELDS'] : array();

		$typeNames = Agreement::getTypeNames();
		$this->arResult['TYPE_LIST'][] = array(
			'TYPE' => Agreement::TYPE_CUSTOM,
			'LANGUAGE_ID' => '',
			'NAME' => $typeNames[Agreement::TYPE_CUSTOM],
			'AGREEMENT_TEXT' => '',
			'AVAILABLE' => true,
			'SELECTED' => (Agreement::TYPE_CUSTOM == $data['TYPE'] && !$data['LANGUAGE_ID']),
			'FIELDS' => array(
				array(
					'INPUT_NAME' => 'AGREEMENT_TEXT',
					'CODE' => 'AGREEMENT_TEXT',
					'TYPE' => 'text',
					'CAPTION' => Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_AGREEMENT_TEXT'),
					'PLACEHOLDER' => Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_AGREEMENT_TEXT_HINT'),
					'VALUE' => $data['AGREEMENT_TEXT'],
				),
				array(
					'INPUT_NAME' => 'LABEL_TEXT',
					'CODE' => 'LABEL_TEXT',
					'TYPE' => 'string',
					'CAPTION' => Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_LABEL_TEXT'),
					'PLACEHOLDER' => Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_LABEL_TEXT_HINT'),
					'VALUE' => $data['LABEL_TEXT'] ? $data['LABEL_TEXT'] : Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_LABEL_TEXT_DEFAULT_VALUE'),
				)
			),
			'IS_SUPPORT_DATA_PROVIDERS' => false
		);

		$fieldValues = FieldTable::getConsentFields($this->agreement->getId());
		$intlList = Intl::getList();
		foreach ($intlList as $intl)
		{
			$demoTextFields = array('FIELDS' => Loc::getMessage('MAIN_USER_CONSENT_EDIT_COMP_FIELD_FORM_FIELD_NAMES'));
			$fields = array();
			foreach ($intl['FIELDS'] as $field)
			{
				$fieldCode = $field['CODE'];
				if (isset($postFields[$fieldCode]))
				{
					$field['VALUE'] = $postFields[$fieldCode];
				}
				elseif (isset($fieldValues[$fieldCode]))
				{
					$field['VALUE'] = $fieldValues[$fieldCode];
				}
				else
				{
					$field['VALUE'] = '';
				}
				$fields[] = $field;

				$demoTextFields[$fieldCode] = '<' . str_replace(' ', '_', strtoupper($field['CAPTION'])) . '>';
			}

			$this->arResult['TYPE_LIST'][] = array(
				'TYPE' => Agreement::TYPE_STANDARD,
				'LANGUAGE_ID' => $intl['LANGUAGE_ID'],
				'NAME' => $intl['NAME'],
				'AGREEMENT_TEXT' => Text::replace($intl['AGREEMENT_TEXT'], $demoTextFields, true),
				'SELECTED' => (
					Agreement::TYPE_STANDARD == $data['TYPE']
					&&
					$intl['LANGUAGE_ID'] == $data['LANGUAGE_ID']
				),
				'AVAILABLE' => $intl['BASE_LANGUAGE_ID'] == $this->getLanguageId(),
				'FIELDS' => $fields,
				'IS_SUPPORT_DATA_PROVIDERS' => true
			);
		}

		$this->arResult['TYPE_LIST_AVAILABLE_COUNT'] = 0;
		foreach ($this->arResult['TYPE_LIST'] as $type)
		{
			$this->arResult['TYPE_LIST_AVAILABLE_COUNT'] += ($type['SELECTED'] || $type['AVAILABLE']) ? 1 : 0;
		}
	}

	protected function prepareResultDataProviders()
	{
		$this->arResult['DATA_PROVIDER_LIST'] = array();
		$data = $this->arResult['DATA'];

		$dataProviders = \Bitrix\Main\UserConsent\DataProvider::getList();
		foreach ($dataProviders as $provider)
		{
			$provider = $provider->toArray();
			$valuesData = $provider['DATA'];
			$provider['DATA'] = array();
			foreach ($valuesData as $key => $value)
			{
				$provider['DATA'][] = array(
					'CODE' => $key,
					'VALUE' => $value,
				);
			}
			$provider['SELECTED'] = $provider['CODE'] == $data['DATA_PROVIDER'];
			$this->arResult['DATA_PROVIDER_LIST'][] = $provider;
		}
	}

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

	public function executeComponent()
	{
		$this->errors = new \Bitrix\Main\ErrorCollection();
		$this->initParams();
		if (!$this->checkRequiredParams())
		{
			$this->printErrors();
			return;
		}

		if (!$this->prepareResult())
		{
			$this->printErrors();
			return;
		}

		$this->includeComponentTemplate();
	}
}