Your IP : 18.188.211.4


Current Path : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/components/bitrix/ui.form.config/
Upload File :
Current File : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/components/bitrix/ui.form.config/ajax.php

<?php

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

use Bitrix\Main\Engine\Response\AjaxJson;
use Bitrix\Main\Event;
use Bitrix\Ui\EntityForm\Scope;
use Bitrix\Ui\EntityForm\ScopeAccess;
use Bitrix\UI\Form\EntityEditorConfigScope;

class UiFormConfigAjaxController extends \Bitrix\Main\Engine\Controller
{
	/**
	 * @param string $moduleId
	 * @param string $entityTypeId
	 * @param array $config
	 * @param string $name
	 * @param array $accessCodes
	 * @param array $params
	 * @return int|AjaxJson
	 */
	public function saveAction(
		string $moduleId,
		string $entityTypeId,
		array $config,
		string $name = '',
		array $accessCodes = [],
		array $params = []
	)
	{
		if (
			($scopeAccess = ScopeAccess::getInstance($moduleId))
			&& $scopeAccess->canAdd()
		)
		{
			$result = Scope::getInstance()
				->setScopeConfig($moduleId, $entityTypeId, $name, $accessCodes, $config, $params);

			return (is_int($result) ? $result : AjaxJson::createError(null, $result));
		}

		return $this->getAccessDenied();
	}

	/**
	 * @param string $moduleId
	 * @param string $guid
	 * @param string $scope
	 * @param int $userScopeId
	 * @return void|AjaxJson
	 */
	protected function emitOnUIFormSetScope(string $guid, string $scope, string $categoryName = '')
	{
		$event = new Event(
			'ui',
			'onUIFormSetScope',
			[
				'GUID' => $guid,
				'SCOPE' => $scope,
				'CATEGORY_NAME' => $categoryName
			]
		);
		$event->send();
	}

	public function setScopeAction(string $moduleId, string $categoryName, string $guid, string $scope, int $userScopeId = 0)
	{
		if (
			$scope !== EntityEditorConfigScope::CUSTOM
			|| (
				($scopeAccess = ScopeAccess::getInstance($moduleId))
				&& $scopeAccess->canRead($userScopeId)
			)
		)
		{
			Scope::getInstance()->setScope($categoryName, $guid, $scope, $userScopeId);

			$this->emitOnUIFormSetScope($guid, $scope, $categoryName);

			return null;
		}

		return $this->getAccessDenied();
	}

	/**
	 * @param string $moduleId
	 * @param int $scopeId
	 * @param array $accessCodes
	 * @return array|AjaxJson
	 */
	public function updateScopeAccessCodesAction(string $moduleId, int $scopeId, array $accessCodes = [])
	{
		if (
			($scopeAccess = ScopeAccess::getInstance($moduleId))
			&& $scopeAccess->canUpdate($scopeId)
		)
		{
			return Scope::getInstance()->updateScopeAccessCodes($scopeId, $accessCodes);
		}

		return $this->getAccessDenied();
	}

	/**
	 * @return AjaxJson
	 */
	private function getAccessDenied(): AjaxJson
	{
		$result = [new \Bitrix\Main\Error('Access denied')];
		return AjaxJson::createError(null, $result);
	}
}