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

	$type = SiteType::getCurrentScopeId();

	if ($roles !== null)
	{
		return $roles;
	}

	$roles = [];
	$codes = [];
	$access = new CAccess;

	// gets from db
	$res = self::getList([
		'filter' => [
			'=TYPE' => $type
		],
		'order' => [
			'ID' => 'asc'
		]
	]);
	while ($row = $res->fetch())
	{
		if (!trim($row['TITLE']))
		{
			$row['TITLE'] = Loc::getMessage('LANDING_ROLE_DEF_' . $row['XML_ID']);
		}
		$row['ACCESS_CODES'] = !$row['ACCESS_CODES'] ? [] : (array)$row['ACCESS_CODES'];
		$roles[$row['ID']] = $row;
		$codes = array_merge($codes, $row['ACCESS_CODES']);
	}

	// get titles for access codes
	if ($roles)
	{
		$codesNames  = $access->getNames($codes);
		foreach ($roles as &$role)
		{
			foreach ($role['ACCESS_CODES'] as &$code)
			{
				$provider = (
					isset($codesNames[$code]['provider']) &&
					$codesNames[$code]['provider']
				)
					? $codesNames[$code]['provider']
					: '';
				$name = isset($codesNames[$code]['name'])
					? $codesNames[$code]['name']
					: $code;
				$code = [
					'CODE' => $code,
					'PROVIDER' => $provider,
					'NAME' => $name
				];
			}
			unset($code);
		}
		unset($role);
	}

	// install demo data if need
	$keyDemoInstalled = 'role_demo_installed';
	if ($type)
	{
		$keyDemoInstalled .= '_'.mb_strtolower($type);
	}
	if (
		empty($roles) &&
		Manager::getOption($keyDemoInstalled, 'N') == 'N'
	)
	{
		$roles = null;
		self::installDemo($type);
		Manager::setOption($keyDemoInstalled, 'Y');
		return self::fetchAll();
	}

	return $roles;
}