• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/role.php
  • Класс: BitrixLandingRole
  • Вызов: Role::installDemo
static function installDemo($type = null)
{
	Manager::enableFeatureTmp(
		Manager::FEATURE_PERMISSIONS_AVAILABLE
	);

	$defGroup = 'G1';
	// for B24 gets employees group
	if (Manager::isB24())
	{
		$res = BitrixMainGroupTable::getList([
			'select' => [
				'ID'
			],
			'filter' => [
				'=STRING_ID' => 'EMPLOYEES_' . SITE_ID
			]
		]);
		if ($row = $res->fetch())
		{
			$defGroup = 'G' . $row['ID'];
		}
		unset($row, $res);
	}

	$addRights = [];
	foreach (Rights::ADDITIONAL_RIGHTS as $accessCode)
	{
		if (mb_strpos($accessCode, '_') > 0)
		{
			[$prefix, ] = explode('_', $accessCode);
			$prefix = mb_strtoupper($prefix);
			if ($prefix == $type)
			{
				$addRights[] = $accessCode;
			}
		}
		else if ($type === null)
		{
			$addRights[] = $accessCode;
		}
	}

	$addRightsManager = $addRights;
	foreach (self::$forbiddenManagerRights as $rightCode)
	{
		$key = array_search($rightCode, $addRightsManager, true);
		if ($key)
		{
			array_splice($addRightsManager, $key, 1);
		}
	}
	$addRightsAdmin = $addRights;
	foreach (self::$forbiddenAdminRights as $rightCode)
	{
		$key = array_search($rightCode, $addRightsAdmin, true);
		if ($key)
		{
			array_splice($addRightsAdmin, $key, 1);
		}
	}

	$demoData = [
		'admin' => [
			'rights' => [
				'read',
				'edit',
				'sett',
				'public',
				'delete'
			],
			'additional_rights' => $addRightsAdmin,
			'access' => [
				$defGroup
			]
		],
		'manager' => [
			'rights' => [
				'read',
				'edit',
				'public'
			],
			'additional_rights' => $addRightsManager,
			'access' => []
		]
	];
	$type = (string)$type;
	foreach ($demoData as $code => $rights)
	{
		$code = mb_strtoupper($code);
		$check = false;
		/*$check = self::getList([
			'filter' => [
				'=XML_ID' => $code
			]
   			])->fetch();*/
		if (!$check)
		{
			$res = self::add([
				'TYPE' => $type,
				'XML_ID' => $code,
				'ADDITIONAL_RIGHTS' => $rights['additional_rights']
			]);
			if ($res->isSuccess())
			{
				self::setRights(
					$res->getId(),
					[0 => $rights['rights']]
				);
				if ($rights['access'])
				{
					self::setAccessCodes(
						$res->getId(),
						$rights['access']
					);
				}
			}
			unset($res);
		}
		unset($check);
	}
	unset($demoData, $defGroup, $code, $rights);

	Manager::disableFeatureTmp(
		Manager::FEATURE_PERMISSIONS_AVAILABLE
	);
}