wiki.techinc.nl/includes/Settings/LocalSettingsLoader.php
Doğu Abaris 6dbefa012e Use typed properties in Settings classes
This patch updates several Settings classes within the includes/Settings
directory to use typed properties, thus simplifying the codebase by
removing explicit docblock annotations for class properties.

- DynamicDefaultValues.php: Convert $configSchema property to use
  typed property syntax.
- LocalSettingsLoader.php: Apply typed property syntax to
  $settingsBuilder and $baseDir.
- WikiFarmSettingsLoader.php: Switch $settingsBuilder to typed property.

Change-Id: Iec8ee9c91362d13f49dea65f314d5c1113a19306
2024-01-31 16:47:54 +00:00

82 lines
2.5 KiB
PHP

<?php
namespace MediaWiki\Settings;
use MediaWiki\Settings\Source\SettingsFileUtils;
/**
* Utility for loading LocalSettings files.
*
* @since 1.38
*/
class LocalSettingsLoader {
private SettingsBuilder $settingsBuilder;
private string $baseDir;
/**
* @param SettingsBuilder $settingsBuilder
* @param string $baseDir
*/
public function __construct( SettingsBuilder $settingsBuilder, string $baseDir ) {
$this->settingsBuilder = $settingsBuilder;
$this->baseDir = $baseDir;
}
/**
* Loads a settings file into the SettingsBuilder provided to the constructor.
*
* This supports JSON and YAML files, PHP files that return a settings array, as well as
* traditional LocalSettings.php files that set variables, for backwards compatibility.
*
* @warning This does not support setting configuration variables that use a prefix other
* than "wg"!
*
* @param string $file
*/
public function loadLocalSettingsFile( string $file ) {
// If $file is not a PHP file, just load it as a data file.
if ( !str_ends_with( $file, '.php' ) ) {
$this->settingsBuilder->loadFile( $file );
return;
}
// Make config settings available in local scope.
$config = $this->settingsBuilder->getConfig();
foreach ( $this->settingsBuilder->getDefinedConfigKeys() as $key ) {
$var = "wg$key"; // NOTE: broken for extensions that use prefixes other than "wg"!
$$var = $config->get( $key ); // XXX: slow?! Can we get the entire array in one go?
}
// make available some non-config globals available
// phpcs:ignore MediaWiki.VariableAnalysis.UnusedGlobalVariables.UnusedGlobal$wgCommandLineMode, MediaWiki.Usage.DeprecatedGlobalVariables
global $wgCommandLineMode;
// make additional variables available
// phpcs:ignore MediaWiki.VariableAnalysis.MisleadingGlobalNames.Misleading$wgSettings
$wgSettings = $this->settingsBuilder;
$IP = $this->baseDir;
// pull in the actual settings file
$file = SettingsFileUtils::resolveRelativeLocation( $file, $this->baseDir );
$settings = require $file;
// Capture config variables.
$overrides = [];
foreach ( get_defined_vars() as $name => $value ) {
if ( str_starts_with( $name, 'wg' ) ) {
$key = substr( $name, 2 );
$overrides[$key] = $value;
}
}
$this->settingsBuilder->overrideConfigValues( $overrides );
// If the file returned a settings array, use it.
// This is especially useful for generated PHP files.
if ( is_array( $settings ) ) {
$this->settingsBuilder->loadArray( $settings );
}
}
}