forked from a64f7bb4-7358-4778-9fbe-3b882c34cc1d/v1
186 lines
4.3 KiB
PHP
186 lines
4.3 KiB
PHP
<?php
|
|
namespace Consolidation\SiteAlias;
|
|
|
|
use Consolidation\Config\Config;
|
|
use Consolidation\Config\ConfigInterface;
|
|
use Consolidation\Config\Util\ConfigRuntimeInterface;
|
|
use Consolidation\SiteAlias\SiteAlias;
|
|
use Consolidation\SiteAlias\SiteAliasInterface;
|
|
use Consolidation\SiteAlias\SiteAliasTrait;
|
|
|
|
/**
|
|
* SiteAliasWithConfig delegates to a site alias, and
|
|
* also combines it with two config stores:
|
|
*
|
|
* - Runtime config (set on commandline): Options that override site alias contents
|
|
* - Default config (set from config files): Default options
|
|
*/
|
|
class SiteAliasWithConfig implements SiteAliasInterface, ConfigRuntimeInterface
|
|
{
|
|
use SiteAliasTrait;
|
|
|
|
protected $runtimeConfig;
|
|
protected $siteAlias;
|
|
protected $defaultConfig;
|
|
|
|
public function __construct(SiteAliasInterface $siteAlias, ConfigInterface $defaultConfig, ConfigInterface $runtimeConfig)
|
|
{
|
|
$this->siteAlias = $siteAlias;
|
|
$this->defaultConfig = $defaultConfig;
|
|
$this->runtimeConfig = $runtimeConfig;
|
|
}
|
|
|
|
/**
|
|
* combine the provided site alias with configuration.
|
|
*
|
|
* @return SiteAlias read-only site alias combined with the runtime
|
|
* config (overrides the site alias values) and the default config.
|
|
*/
|
|
public static function create(SiteAliasInterface $siteAlias, ConfigInterface $defaultConfig, ConfigInterface $runtimeConfig = null)
|
|
{
|
|
$runtimeConfig = static::determineCorrectRuntimeConfig($defaultConfig, $runtimeConfig);
|
|
|
|
return new self($siteAlias, $defaultConfig, $runtimeConfig);
|
|
}
|
|
|
|
/**
|
|
* Determine what object to use for the runtime config. If a specific
|
|
* runtime config is given, use that. Otherwise, pull it from the default
|
|
* configuration if available.
|
|
*/
|
|
protected static function determineCorrectRuntimeConfig(ConfigInterface $defaultConfig, ConfigInterface $runtimeConfig)
|
|
{
|
|
if ($runtimeConfig) {
|
|
return $runtimeConfig;
|
|
}
|
|
|
|
if ($defaultConfig instanceof ConfigRuntimeInterface) {
|
|
return $defaultConfig->runtimeConfig();
|
|
}
|
|
|
|
return new Config();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function runtimeConfig()
|
|
{
|
|
return $this->runtimeConfig;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function name()
|
|
{
|
|
return $this->siteAlias->name();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function has($key)
|
|
{
|
|
return
|
|
$this->runtimeConfig->has($key) ||
|
|
$this->siteAlias->has($key) ||
|
|
$this->defaultConfig->has($key);
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function get($key, $defaultFallback = null)
|
|
{
|
|
if ($this->runtimeConfig->has($key)) {
|
|
return $this->runtimeConfig->get($key);
|
|
}
|
|
if ($this->siteAlias->has($key)) {
|
|
return $this->siteAlias->get($key);
|
|
}
|
|
if ($this->defaultConfig->has($key)) {
|
|
return $this->defaultConfig->get($key);
|
|
}
|
|
|
|
return $defaultFallback;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function set($key, $value)
|
|
{
|
|
$this->changesProhibited();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function import($data)
|
|
{
|
|
$this->changesProhibited();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function replace($data)
|
|
{
|
|
$this->changesProhibited();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function combine($data)
|
|
{
|
|
$this->changesProhibited();
|
|
}
|
|
|
|
/**
|
|
* Export all configuration as a nested array.
|
|
*/
|
|
public function export()
|
|
{
|
|
throw new \Exception('SiteAliasWithConfig::export() not supported.');
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function hasDefault($key)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function getDefault($key, $defaultFallback = null)
|
|
{
|
|
return $defaultFallback;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function setDefault($key, $value)
|
|
{
|
|
$this->changesProhibited();
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function exportConfig()
|
|
{
|
|
throw new \Exception('SiteAliasWithConfig::exportConfig() not supported.');
|
|
}
|
|
|
|
protected function changesProhibited()
|
|
{
|
|
throw new \Exception('Changing a SiteAliasWithConfig is not permitted.');
|
|
}
|
|
}
|