diff options
Diffstat (limited to 'phpBB/phpbb/routing/resources_locator')
4 files changed, 257 insertions, 0 deletions
| diff --git a/phpBB/phpbb/routing/resources_locator/chained_resources_locator.php b/phpBB/phpbb/routing/resources_locator/chained_resources_locator.php new file mode 100644 index 0000000000..db9abf2095 --- /dev/null +++ b/phpBB/phpbb/routing/resources_locator/chained_resources_locator.php @@ -0,0 +1,47 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license       GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb\routing\resources_locator; + +class chained_resources_locator implements resources_locator_interface +{ +	/** +	 * @var resources_locator_interface[] +	 */ +	protected $locators; + +	/** +	 * Construct method +	 * +	 * @param resources_locator_interface[]	$locators	Locators +	 */ +	public function __construct($locators) +	{ +		$this->locators		= $locators; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function locate_resources() +	{ +		$resources = []; + +		foreach ($this->locators as $locator) +		{ +			$resources = array_merge($resources, $locator->locate_resources()); +		} + +		return $resources; +	} +} diff --git a/phpBB/phpbb/routing/resources_locator/default_resources_locator.php b/phpBB/phpbb/routing/resources_locator/default_resources_locator.php new file mode 100644 index 0000000000..90c3877007 --- /dev/null +++ b/phpBB/phpbb/routing/resources_locator/default_resources_locator.php @@ -0,0 +1,105 @@ +<?php +/** +* +* This file is part of the phpBB Forum Software package. +* +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license       GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +namespace phpbb\routing\resources_locator; + +use phpbb\extension\manager; + +/** + * Locates the yaml routing resources located in the default locations + */ +class default_resources_locator implements resources_locator_interface +{ +	/** +	 * phpBB root path +	 * +	 * @var string +	 */ +	protected $phpbb_root_path; + +	/** +	 * Name of the current environment +	 * +	 * @var string +	 */ +	protected $environment; + +	/** +	 * Extension manager +	 * +	 * @var manager +	 */ +	protected $extension_manager; + +	/** +	 * Construct method +	 * +	 * @param string	$phpbb_root_path	phpBB root path +	 * @param string	$environment		Name of the current environment +	 * @param manager	$extension_manager	Extension manager +	 */ +	public function __construct($phpbb_root_path, $environment, manager $extension_manager = null) +	{ +		$this->phpbb_root_path		= $phpbb_root_path; +		$this->environment			= $environment; +		$this->extension_manager	= $extension_manager; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function locate_resources() +	{ +		$resources = [['config/' . $this->environment . '/routing/environment.yml', 'yaml']]; + +		$resources = $this->append_ext_resources($resources); + +		return $resources; +	} + +	/** +	 * Append extension resources to an array of resouces +	 * +	 * @see resources_locator_interface::locate_resources() +	 * +	 * @param mixed[] $resources List of resources +	 * +	 * @return mixed[] List of resources +	 */ +	protected function append_ext_resources(array $resources) +	{ +		if ($this->extension_manager !== null) +		{ +			foreach ($this->extension_manager->all_enabled(false) as $path) +			{ +				if (file_exists($this->phpbb_root_path . $path . 'config/' . $this->environment . '/routing/environment.yml')) +				{ +					$resources[] = [$path . 'config/' . $this->environment . '/routing/environment.yml', 'yaml']; +				} +				else if (!is_dir($this->phpbb_root_path . $path . 'config/' . $this->environment)) +				{ +					if (file_exists($this->phpbb_root_path . $path . 'config/default/routing/environment.yml')) +					{ +						$resources[] = [$path . 'config/default/routing/environment.yml', 'yaml']; +					} +					else if (!is_dir($this->phpbb_root_path . $path . 'config/default/routing') && file_exists($this->phpbb_root_path . $path . 'config/routing.yml')) +					{ +						$resources[] = [$path . 'config/routing.yml', 'yaml']; +					} +				} +			} +		} + +		return $resources; +	} +} diff --git a/phpBB/phpbb/routing/resources_locator/installer_resources_locator.php b/phpBB/phpbb/routing/resources_locator/installer_resources_locator.php new file mode 100644 index 0000000000..42cd0f11af --- /dev/null +++ b/phpBB/phpbb/routing/resources_locator/installer_resources_locator.php @@ -0,0 +1,78 @@ +<?php +/** + * + * This file is part of the phpBB Forum Software package. + * + * @copyright (c) phpBB Limited <https://www.phpbb.com> + * @license       GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\routing\resources_locator; + +use phpbb\filesystem\filesystem_interface; + +/** + * Locates the yaml routing resources taking update directories into consideration + */ +class installer_resources_locator implements resources_locator_interface +{ +	/** +	 * phpBB's filesystem handler +	 * +	 * @var filesystem_interface +	 */ +	protected $filesystem; + +	/** +	 * phpBB root path +	 * +	 * @var string +	 */ +	protected $phpbb_root_path; + +	/** +	 * Name of the current environment +	 * +	 * @var string +	 */ +	protected $environment; + +	/** +	 * Construct method +	 * +	 * @param filesystem_interface	$filesystem			phpBB's filesystem handler +	 * @param string				$phpbb_root_path	phpBB root path +	 * @param string				$environment		Name of the current environment +	 */ +	public function __construct(filesystem_interface $filesystem, $phpbb_root_path, $environment) +	{ +		$this->filesystem			= $filesystem; +		$this->phpbb_root_path		= $phpbb_root_path; +		$this->environment			= $environment; +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function locate_resources() +	{ +		if ($this->filesystem->exists($this->phpbb_root_path . 'install/update/new/config')) +		{ +			$resources = array( +				array('install/update/new/config/' . $this->environment . '/routing/environment.yml', 'yaml') +			); +		} +		else +		{ +			$resources = array( +				array('config/' . $this->environment . '/routing/environment.yml', 'yaml') +			); +		} + +		return $resources; +	} +} diff --git a/phpBB/phpbb/routing/resources_locator/resources_locator_interface.php b/phpBB/phpbb/routing/resources_locator/resources_locator_interface.php new file mode 100644 index 0000000000..46335cb288 --- /dev/null +++ b/phpBB/phpbb/routing/resources_locator/resources_locator_interface.php @@ -0,0 +1,27 @@ +<?php +/** + * + * This file is part of the phpBB Forum Software package. + * + * @copyright (c) phpBB Limited <https://www.phpbb.com> + * @license GNU General Public License, version 2 (GPL-2.0) + * + * For full copyright and license information, please see + * the docs/CREDITS.txt file. + * + */ + +namespace phpbb\routing\resources_locator; + +interface resources_locator_interface +{ +	/** +	 * Locates a list of resources used to load the routes +	 * +	 * Each entry of the list can be either the resource or an array composed of 2 elements: +	 * the resource and its type. +	 * +	 * @return mixed[] List of resources +	 */ +	public function locate_resources(); +} | 
