• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/quickanswers/listsdatamanager.php
  • Класс: BitrixImOpenlinesQuickAnswersListsDataManager
  • Вызов: ListsDataManager::updateIblockRights
static function updateIblockRights($iblockId)
{
	$storages = self::getStorageList();
	if(intval($iblockId) <= 0)
	{
		return false;
	}
	if(isset($storages[$iblockId]))
	{
		$users = array();
		$configManager = new Config();
		$configs = $configManager->getList(array(
			'filter' => array(
				'QUICK_ANSWERS_IBLOCK_ID' => $iblockId,
			),
		), array('QUEUE' => 'Y'));

		foreach($configs as $config)
		{
			$users = array_merge($users, $config['QUEUE']);
		}

		$rolePermissions = RolePermissionTable::getList([
			'select' => [
				'ROLE_ID'
			],
			'filter' => [
				'=ENTITY' => Permissions::ENTITY_QUICK_ANSWERS,
				'=ACTION' => Permissions::ACTION_MODIFY,
				'=PERMISSION' => Permissions::PERMISSION_ANY,
			]
		])->fetchAll();

		$roleIds = array_map(function ($item) {
			return $item['ROLE_ID'];
		}, $rolePermissions);

		$roleAccessCodes = RoleAccessTable::getList([
			'select' => [
				'ACCESS_CODE'
			],
			'filter' => [
				'ROLE_ID' => array_unique($roleIds)
			]
		])->fetchAll();

		$accessCodes = array_map(function ($item) {
			return $item['ACCESS_CODE'];
		}, $roleAccessCodes);

		$accessCodes = array_unique($accessCodes);

		$departments = array();
		// get all departments of the users
		$usersData = UserTable::getList(array(
			'select' => array('UF_DEPARTMENT'),
			'filter' => array(
				'=ID' => $users,
			),
		))->fetchAll();
		foreach($usersData as $userData)
		{
			if(!is_array($userData['UF_DEPARTMENT']) && $userData['UF_DEPARTMENT'] > 0)
			{
				$departments[] = $userData['UF_DEPARTMENT'];
			}
			elseif (is_array($userData['UF_DEPARTMENT']))
			{
				$departments = array_merge($departments, $userData['UF_DEPARTMENT']);
			}
		}
		$departments = array_unique($departments);
		foreach($departments as $department)
		{
			$users[] = CIntranetUtils::GetDepartmentManagerID($department);
		}
		$users = array_unique($users);

		$fields = array(
			'RIGHTS_MODE' => 'E',
			'RIGHTS' => self::getRights(self::RIGHTS_IBLOCK_FOR_LINE_QUEUE, $users, 0, $accessCodes)
		);
		$rightsManager = new CIBlockRights($iblockId);
		$currentRights = $rightsManager->GetRights();
		foreach($currentRights as $id => $right)
		{
			if($right['XML_ID'] != self::RIGHTS_XML_ID)
			{
				$fields['RIGHTS'][$id] = $right;
			}
		}
		$iblock = new CIBlock();

		$iblock->Update($iblockId, $fields);

		return true;
	}

	return false;
}