diff --git a/libraries/src/Application/AdministratorApplication.php b/libraries/src/Application/AdministratorApplication.php index dc55973faf264..45a9d5ecc6ffa 100644 --- a/libraries/src/Application/AdministratorApplication.php +++ b/libraries/src/Application/AdministratorApplication.php @@ -11,6 +11,7 @@ use Joomla\Application\Web\WebClient; use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Event\Application\AfterInitialiseDocumentEvent; use Joomla\CMS\Factory; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Input\Input; @@ -137,11 +138,17 @@ public function dispatch($component = null) $document->setDescription($this->get('MetaDesc')); $document->setGenerator('Joomla! - Open Source Content Management'); + // Trigger the onAfterInitialiseDocument event. + PluginHelper::importPlugin('system', null, true, $this->getDispatcher()); + $this->dispatchEvent( + 'onAfterInitialiseDocument', + new AfterInitialiseDocumentEvent('onAfterInitialiseDocument', ['subject' => $this, 'document' => $document]) + ); + $contents = ComponentHelper::renderComponent($component); $document->setBuffer($contents, ['type' => 'component']); // Trigger the onAfterDispatch event. - PluginHelper::importPlugin('system'); $this->triggerEvent('onAfterDispatch'); } diff --git a/libraries/src/Application/ApiApplication.php b/libraries/src/Application/ApiApplication.php index 6f49d90d8b769..83f2dab317fa3 100644 --- a/libraries/src/Application/ApiApplication.php +++ b/libraries/src/Application/ApiApplication.php @@ -12,6 +12,7 @@ use Joomla\Application\Web\WebClient; use Joomla\CMS\Access\Exception\AuthenticationFailed; use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Event\Application\AfterInitialiseDocumentEvent; use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Router\ApiRouter; @@ -412,11 +413,16 @@ public function dispatch($component = null) // Set up the params $document = Factory::getDocument(); + // Trigger the onAfterInitialiseDocument event. + $this->dispatchEvent( + 'onAfterInitialiseDocument', + new AfterInitialiseDocumentEvent('onAfterInitialiseDocument', ['subject' => $this, 'document' => $document]) + ); + $contents = ComponentHelper::renderComponent($component); $document->setBuffer($contents, ['type' => 'component']); // Trigger the onAfterDispatch event. - PluginHelper::importPlugin('system'); $this->triggerEvent('onAfterDispatch'); } } diff --git a/libraries/src/Application/SiteApplication.php b/libraries/src/Application/SiteApplication.php index c4898a0f1a858..fec7e795894eb 100644 --- a/libraries/src/Application/SiteApplication.php +++ b/libraries/src/Application/SiteApplication.php @@ -13,6 +13,7 @@ use Joomla\CMS\Cache\CacheControllerFactoryAwareTrait; use Joomla\CMS\Cache\Controller\OutputController; use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Event\Application\AfterInitialiseDocumentEvent; use Joomla\CMS\Factory; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Input\Input; @@ -205,11 +206,17 @@ public function dispatch($component = null) $document->setGenerator('Joomla! - Open Source Content Management'); } + // Trigger the onAfterInitialiseDocument event. + PluginHelper::importPlugin('system', null, true, $this->getDispatcher()); + $this->dispatchEvent( + 'onAfterInitialiseDocument', + new AfterInitialiseDocumentEvent('onAfterInitialiseDocument', ['subject' => $this, 'document' => $document]) + ); + $contents = ComponentHelper::renderComponent($component); $document->setBuffer($contents, ['type' => 'component']); // Trigger the onAfterDispatch event. - PluginHelper::importPlugin('system'); $this->triggerEvent('onAfterDispatch'); } diff --git a/libraries/src/Event/Application/AfterInitialiseDocumentEvent.php b/libraries/src/Event/Application/AfterInitialiseDocumentEvent.php new file mode 100644 index 0000000000000..44da371c708e8 --- /dev/null +++ b/libraries/src/Event/Application/AfterInitialiseDocumentEvent.php @@ -0,0 +1,23 @@ + + * @license GNU General Public License version 2 or later; see LICENSE + */ + +namespace Joomla\CMS\Event\Application; + +// phpcs:disable PSR1.Files.SideEffects +\defined('JPATH_PLATFORM') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Event class for AfterInitialiseDocument event + * + * @since __DEPLOY_VERSION__ + */ +class AfterInitialiseDocumentEvent extends ApplicationDocumentEvent +{ +} diff --git a/libraries/src/Exception/ExceptionHandler.php b/libraries/src/Exception/ExceptionHandler.php index bcc4003716e52..d9a4c9a12a5bf 100644 --- a/libraries/src/Exception/ExceptionHandler.php +++ b/libraries/src/Exception/ExceptionHandler.php @@ -11,6 +11,7 @@ use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Error\AbstractRenderer; +use Joomla\CMS\Event\Application\AfterInitialiseDocumentEvent; use Joomla\CMS\Factory; use Joomla\CMS\Log\Log; @@ -118,6 +119,15 @@ public static function render(\Throwable $error) Factory::$document = $renderer->getDocument(); Factory::getApplication()->loadDocument(Factory::$document); + // Trigger the onAfterInitialiseDocument event. + $app->getDispatcher()->dispatch( + 'onAfterInitialiseDocument', + new AfterInitialiseDocumentEvent('onAfterInitialiseDocument', [ + 'subject' => $app, + 'document' => $renderer->getDocument(), + ]) + ); + $data = $renderer->render($error); // If nothing was rendered, just use the message from the Exception