diff --git a/libraries/src/Application/Autoconfigurable.php b/libraries/src/Application/Autoconfigurable.php deleted file mode 100644 index 83ac8afa5146a..0000000000000 --- a/libraries/src/Application/Autoconfigurable.php +++ /dev/null @@ -1,100 +0,0 @@ -config; - } - - /** - * Load an object or array into the application configuration object. - * - * @param mixed $data Either an array or object to be loaded into the configuration object. - * - * @return $this - * - * @since 4.0 - */ - public function loadConfiguration($data) - { - // Load the data into the configuration object. - if (is_array($data)) - { - $this->getConfig()->loadArray($data); - } - elseif (is_object($data)) - { - $this->getConfig()->loadObject($data); - } - - return $this; - } -} diff --git a/libraries/src/Application/CliApplication.php b/libraries/src/Application/CliApplication.php index 2a7f490c5a205..1a0be334170c3 100644 --- a/libraries/src/Application/CliApplication.php +++ b/libraries/src/Application/CliApplication.php @@ -32,7 +32,7 @@ */ abstract class CliApplication extends AbstractApplication implements DispatcherAwareInterface, CMSApplicationInterface { - use Autoconfigurable, DispatcherAwareTrait, EventAware, IdentityAware, ContainerAwareTrait; + use DispatcherAwareTrait, EventAware, IdentityAware, ContainerAwareTrait; /** * Output object @@ -102,9 +102,6 @@ public function __construct(Input $input = null, Registry $config = null, CliOut // Set the current directory. $this->set('cwd', getcwd()); - // Load the configuration object. - $this->loadConfiguration($this->fetchConfigurationData()); - // Set up the environment $this->input->set('format', 'cli'); } diff --git a/libraries/src/Application/ConsoleApplication.php b/libraries/src/Application/ConsoleApplication.php index cbd93fa6b66b4..5e446b1c16d4d 100644 --- a/libraries/src/Application/ConsoleApplication.php +++ b/libraries/src/Application/ConsoleApplication.php @@ -30,7 +30,7 @@ */ class ConsoleApplication extends Application implements DispatcherAwareInterface, CMSApplicationInterface { - use Autoconfigurable, DispatcherAwareTrait, EventAware, IdentityAware, ContainerAwareTrait; + use DispatcherAwareTrait, EventAware, IdentityAware, ContainerAwareTrait; /** * The application message queue. @@ -80,9 +80,6 @@ public function __construct(Cli $input = null, Registry $config = null, Dispatch $this->setDispatcher($dispatcher); } - // Load the configuration object. - $this->loadConfiguration($this->fetchConfigurationData()); - // Set the execution datetime and timestamp; $this->set('execution.datetime', gmdate('Y-m-d H:i:s')); $this->set('execution.timestamp', time()); diff --git a/libraries/src/Application/WebApplication.php b/libraries/src/Application/WebApplication.php index fad733fdd667a..939d675bc3ba9 100644 --- a/libraries/src/Application/WebApplication.php +++ b/libraries/src/Application/WebApplication.php @@ -29,7 +29,7 @@ */ abstract class WebApplication extends AbstractWebApplication implements DispatcherAwareInterface { - use Autoconfigurable, DispatcherAwareTrait, EventAware, IdentityAware; + use DispatcherAwareTrait, EventAware, IdentityAware; /** * The application document object. @@ -81,9 +81,6 @@ public function __construct(Input $input = null, Registry $config = null, WebCli parent::__construct($input, $config, $client, $response); - // Load the configuration object. - $this->loadConfiguration($this->fetchConfigurationData()); - // Set the execution datetime and timestamp; $this->set('execution.datetime', gmdate('Y-m-d H:i:s')); $this->set('execution.timestamp', time()); @@ -422,4 +419,16 @@ protected function loadSystemUris($requestUri = null) $this->set('uri.media.path', $this->get('uri.base.path') . 'media/'); } } + + /** + * Retrieve the application configuration object. + * + * @return Registry + * + * @since __DEPLOY_VERSION__ + */ + public function getConfig() + { + return $this->config; + } } diff --git a/libraries/src/Factory.php b/libraries/src/Factory.php index 658c71109b11b..10d865bb000bb 100644 --- a/libraries/src/Factory.php +++ b/libraries/src/Factory.php @@ -500,6 +500,7 @@ protected static function createContainer(): Container $container = (new Container) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Application) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Authentication) + ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Config) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Console) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Database) ->registerServiceProvider(new \Joomla\CMS\Service\Provider\Dispatcher) diff --git a/libraries/src/Service/Provider/Application.php b/libraries/src/Service/Provider/Application.php index 99d87bed4a01b..1bb543c3ec08d 100644 --- a/libraries/src/Service/Provider/Application.php +++ b/libraries/src/Service/Provider/Application.php @@ -49,7 +49,7 @@ public function register(Container $container) 'JApplicationAdministrator', function (Container $container) { - $app = new AdministratorApplication(null, null, null, $container); + $app = new AdministratorApplication(null, $container->get('config'), null, $container); // The session service provider needs Factory::$application, set it if still null if (Factory::$application === null) @@ -71,7 +71,7 @@ function (Container $container) 'JApplicationSite', function (Container $container) { - $app = new SiteApplication(null, null, null, $container); + $app = new SiteApplication(null, $container->get('config'), null, $container); // The session service provider needs Factory::$application, set it if still null if (Factory::$application === null) @@ -93,7 +93,7 @@ function (Container $container) BaseConsoleApplication::class, function (Container $container) { - $app = new ConsoleApplication; + $app = new ConsoleApplication(null, $container->get('config')); $dispatcher = $container->get('Joomla\Event\DispatcherInterface'); diff --git a/libraries/src/Service/Provider/Config.php b/libraries/src/Service/Provider/Config.php new file mode 100644 index 0000000000000..e8e51050cb999 --- /dev/null +++ b/libraries/src/Service/Provider/Config.php @@ -0,0 +1,57 @@ +alias('config', 'JConfig') + ->share( + 'JConfig', + function (Container $container) + { + if (!file_exists(JPATH_CONFIGURATION . '/configuration.php')) + { + return []; + } + + \JLoader::register('JConfig', JPATH_CONFIGURATION . '/configuration.php'); + + if (!class_exists('JConfig')) + { + throw new \RuntimeException('Configuration class does not exist.'); + } + + return new Registry(new \JConfig); + }, + true + ); + } +} diff --git a/libraries/src/Service/Provider/Database.php b/libraries/src/Service/Provider/Database.php index 57bf95d404f63..6ca84a06185de 100644 --- a/libraries/src/Service/Provider/Database.php +++ b/libraries/src/Service/Provider/Database.php @@ -43,7 +43,7 @@ public function register(Container $container) DatabaseInterface::class, function (Container $container) { - $conf = \JFactory::getConfig(); + $conf = $container->get('config'); $dbtype = $conf->get('dbtype'); diff --git a/libraries/src/Service/Provider/Session.php b/libraries/src/Service/Provider/Session.php index 8af613211c4f8..fa1b7925b1a37 100644 --- a/libraries/src/Service/Provider/Session.php +++ b/libraries/src/Service/Provider/Session.php @@ -51,7 +51,7 @@ public function register(Container $container) 'Joomla\Session\SessionInterface', function (Container $container) { - $config = Factory::getConfig(); + $config = $container->get('config'); $app = Factory::getApplication(); // Generate a session name.