Your IP : 18.219.25.181


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/documentgenerator/lib/controller/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/modules/documentgenerator/lib/controller/role.php

<?php

namespace Bitrix\DocumentGenerator\Controller;

use Bitrix\DocumentGenerator\Engine\CheckPermissionsFeature;
use Bitrix\DocumentGenerator\Engine\CheckPermissions;
use Bitrix\DocumentGenerator\Model\RoleAccessTable;
use Bitrix\DocumentGenerator\Model\RoleTable;
use Bitrix\DocumentGenerator\UserPermissions;
use Bitrix\Main\Engine\Response\DataType\Page;
use Bitrix\Main\Error;
use Bitrix\Main\UI\PageNavigation;

class Role extends Base
{
	/**
	 * @return array
	 */
	public function getDefaultPreFilters()
	{
		$filters = parent::getDefaultPreFilters();
		$filters[] = new CheckPermissionsFeature();
		$filters[] = new CheckPermissions(UserPermissions::ENTITY_SETTINGS);

		return $filters;
	}

	/**
	 * @param \Bitrix\DocumentGenerator\Model\Role $role
	 * @return array
	 */
	public function getAction(\Bitrix\DocumentGenerator\Model\Role $role)
	{
		$data = $role->collectValues();
		$data['NAME'] = $role->getName();
		$data['PERMISSIONS'] = $role->getPermissions();
		return ['role' => $this->convertKeysToCamelCase($data)];
	}

	/**
	 * @param PageNavigation|null $pageNavigation
	 * @return Page
	 */
	public function listAction(PageNavigation $pageNavigation = null)
	{
		$roles = [];
		$roleList = RoleTable::getList([
	        'offset' => $pageNavigation->getOffset(),
	        'limit' => $pageNavigation->getLimit(),
	    ]);
		while($role = $roleList->fetchObject())
		{
			$data = $role->collectValues();
			$data['NAME'] = $role->getName();
			$roles[] = $this->convertKeysToCamelCase($data);
		}
		return new Page('roles', $roles, function() use ($roles)
		{
			return count($roles);
		});
	}

	/**
	 * @param array $fields
	 * @return array|null
	 */
	public function addAction(array $fields)
	{
		$role = new \Bitrix\DocumentGenerator\Model\Role();
		$role->setName($fields['name'])->setCode($fields['code']);
		$saveResult = $role->save();
		if($saveResult->isSuccess())
		{
			if(array_key_exists('permissions', $fields))
			{
				$role->setPermissions($fields['permissions']);
			}
			return $this->getAction($role);
		}
		else
		{
			$this->errorCollection = $saveResult->getErrorCollection();
			return null;
		}
	}

	/**
	 * @param \Bitrix\DocumentGenerator\Model\Role $role
	 * @param array $fields
	 * @return null
	 */
	public function updateAction(\Bitrix\DocumentGenerator\Model\Role $role, array $fields)
	{
		if(isset($fields['name']) && $fields['name'] != $role->getName())
		{
			$role->setName($fields['name']);
		}
		if(isset($fields['code']))
		{
			$role->setCode($fields['code']);
		}
		$saveResult = $role->save();
		if($saveResult->isSuccess())
		{
			if(array_key_exists('permissions', $fields))
			{
				$role->setPermissions($fields['permissions']);
			}
			return $this->getAction($role);
		}
		else
		{
			$this->errorCollection = $saveResult->getErrorCollection();
			return null;
		}
	}

	/**
	 * @param \Bitrix\DocumentGenerator\Model\Role $role
	 * @return null
	 */
	public function deleteAction(\Bitrix\DocumentGenerator\Model\Role $role)
	{
		$role->delete();

		return null;
	}

	/**
	 * @param array $accesses
	 */
	public function fillAccessesAction(array $accesses = [])
	{
		RoleAccessTable::truncate();

		foreach($accesses as $access)
		{
			$addResult = RoleAccessTable::add([
				'ROLE_ID' => $access['roleId'],
				'ACCESS_CODE' => $access['accessCode'],
			]);
			if(!$addResult->isSuccess())
			{
				$this->errorCollection->add($addResult->getErrors());
			}
		}
	}
}