RuntimeException
Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php RuntimeException thrown with message "Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php" Stacktrace: #23 RuntimeException in /home/pmc/public_html/libraries/gantry5/vendor/rockettheme/toolbox/File/src/AbstractFile.php:348 #22 RocketTheme\Toolbox\File\AbstractFile:save in /home/pmc/public_html/libraries/gantry5/vendor/rockettheme/toolbox/File/src/PhpFile.php:46 #21 RocketTheme\Toolbox\File\PhpFile:save in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:253 #20 Gantry\Component\Config\CompiledBase:saveCompiledFile in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:98 #19 Gantry\Component\Config\CompiledBase:load in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:98 #18 Gantry\Framework\Services\ConfigServiceProvider:blueprints in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:44 #17 Gantry\Framework\Services\ConfigServiceProvider:Gantry\Framework\Services\{closure} in /home/pmc/public_html/libraries/gantry5/vendor/pimple/pimple/src/Pimple/Container.php:118 #16 Pimple\Container:offsetGet in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:134 #15 Gantry\Framework\Services\ConfigServiceProvider:Gantry\Framework\Services\{closure} in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledConfig.php:84 #14 Gantry\Component\Config\CompiledConfig:createObject in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:156 #13 Gantry\Component\Config\CompiledBase:loadFiles in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:97 #12 Gantry\Component\Config\CompiledBase:load in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledConfig.php:72 #11 Gantry\Component\Config\CompiledConfig:load in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:137 #10 Gantry\Framework\Services\ConfigServiceProvider:load in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:168 #9 Gantry\Framework\Theme:setLayout in /home/pmc/public_html/plugins/system/gantry5/gantry5.php:315 #8 plgSystemGantry5:onAfterRouteSite in /home/pmc/public_html/plugins/system/gantry5/gantry5.php:108 #7 plgSystemGantry5:onAfterRoute in /home/pmc/public_html/libraries/joomla/event/event.php:70 #6 JEvent:update in /home/pmc/public_html/libraries/joomla/event/dispatcher.php:160 #5 JEventDispatcher:trigger in /home/pmc/public_html/libraries/src/Application/BaseApplication.php:108 #4 Joomla\CMS\Application\BaseApplication:triggerEvent in /home/pmc/public_html/libraries/src/Application/CMSApplication.php:1190 #3 Joomla\CMS\Application\CMSApplication:route in /home/pmc/public_html/libraries/src/Application/SiteApplication.php:796 #2 Joomla\CMS\Application\SiteApplication:route in /home/pmc/public_html/libraries/src/Application/SiteApplication.php:218 #1 Joomla\CMS\Application\SiteApplication:doExecute in /home/pmc/public_html/libraries/src/Application/CMSApplication.php:225 #0 Joomla\CMS\Application\CMSApplication:execute in /home/pmc/public_html/index.php:49
Stack frames (24)
23
RuntimeException
/vendor/rockettheme/toolbox/File/src/AbstractFile.php348
22
RocketTheme\Toolbox\File\AbstractFile save
/vendor/rockettheme/toolbox/File/src/PhpFile.php46
21
RocketTheme\Toolbox\File\PhpFile save
/src/classes/Gantry/Component/Config/CompiledBase.php253
20
Gantry\Component\Config\CompiledBase saveCompiledFile
/src/classes/Gantry/Component/Config/CompiledBase.php98
19
Gantry\Component\Config\CompiledBase load
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php98
18
Gantry\Framework\Services\ConfigServiceProvider blueprints
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php44
17
Gantry\Framework\Services\ConfigServiceProvider Gantry\Framework\Services\{closure}
/vendor/pimple/pimple/src/Pimple/Container.php118
16
Pimple\Container offsetGet
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php134
15
Gantry\Framework\Services\ConfigServiceProvider Gantry\Framework\Services\{closure}
/src/classes/Gantry/Component/Config/CompiledConfig.php84
14
Gantry\Component\Config\CompiledConfig createObject
/src/classes/Gantry/Component/Config/CompiledBase.php156
13
Gantry\Component\Config\CompiledBase loadFiles
/src/classes/Gantry/Component/Config/CompiledBase.php97
12
Gantry\Component\Config\CompiledBase load
/src/classes/Gantry/Component/Config/CompiledConfig.php72
11
Gantry\Component\Config\CompiledConfig load
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php137
10
Gantry\Framework\Services\ConfigServiceProvider load
/src/classes/Gantry/Component/Theme/ThemeTrait.php168
9
Gantry\Framework\Theme setLayout
/home/pmc/public_html/plugins/system/gantry5/gantry5.php315
8
plgSystemGantry5 onAfterRouteSite
/home/pmc/public_html/plugins/system/gantry5/gantry5.php108
7
plgSystemGantry5 onAfterRoute
/home/pmc/public_html/libraries/joomla/event/event.php70
6
JEvent update
/home/pmc/public_html/libraries/joomla/event/dispatcher.php160
5
JEventDispatcher trigger
/home/pmc/public_html/libraries/src/Application/BaseApplication.php108
4
Joomla\CMS\Application\BaseApplication triggerEvent
/home/pmc/public_html/libraries/src/Application/CMSApplication.php1190
3
Joomla\CMS\Application\CMSApplication route
/home/pmc/public_html/libraries/src/Application/SiteApplication.php796
2
Joomla\CMS\Application\SiteApplication route
/home/pmc/public_html/libraries/src/Application/SiteApplication.php218
1
Joomla\CMS\Application\SiteApplication doExecute
/home/pmc/public_html/libraries/src/Application/CMSApplication.php225
0
Joomla\CMS\Application\CMSApplication execute
/home/pmc/public_html/index.php49
 
        if ($data !== null) {
            $this->content($data);
        }
 
        $filename = $this->filename;
 
        if (is_link($filename)) {
            $realname = realpath($filename);
            if ($realname === false) {
                throw new RuntimeException('Failed to save file ' . $filename);
            }
 
            $filename = $realname;
        }
 
        $dir = dirname($filename);
 
        if (!$dir || !$this->mkdir($dir)) {
            throw new RuntimeException('Creating directory failed for ' . $filename);
        }
 
        try {
            if ($this->handle) {
                $tmp = true;
                // As we are using non-truncating locking, make sure that the file is empty before writing.
                if (@ftruncate($this->handle, 0) === false || @fwrite($this->handle, $this->raw()) === false) {
                    // Writing file failed, throw an error.
                    $tmp = false;
                }
            } else {
                // Create file with a temporary name and rename it to make the save action atomic.
                $tmp = $this->tempname($filename);
                if (file_put_contents($tmp, $this->raw()) === false) {
                    $tmp = false;
                } elseif (@rename($tmp, $filename) === false) {
                    @unlink($tmp);
                    $tmp = false;
                }
            }
     * @return array
     */
    public function content($var = null)
    {
        /** @var array $content */
        $content = parent::content($var);
 
        return $content;
    }
 
    /**
     * Saves PHP file and invalidates opcache.
     *
     * @param  mixed  $data  Optional data to be saved, usually array.
     * @return void
     * @throws RuntimeException
     */
    public function save($data = null)
    {
        parent::save($data);
 
        // Invalidate configuration file from the opcache.
        if (null !== $this->filename && function_exists('opcache_invalidate')) {
            @opcache_invalidate($this->filename, true);
        }
    }
 
    /**
     * Check contents and make sure it is in correct format.
     *
     * @param mixed $var
     * @return array
     * @throws RuntimeException
     */
    protected function check($var)
    {
        if (!(is_array($var) || is_object($var))) {
            throw new RuntimeException('Provided data is not an array');
        }
 
        try {
            $file->lock(false);
        } catch (\Exception $e) {
            // Another process has locked the file; we will check this in a bit.
        }
 
        if ($file->locked() === false) {
            // File was already locked by another process.
            return;
        }
 
        $cache = [
            '@class' => get_class($this),
            'timestamp' => time(),
            'checksum' => $this->checksum(),
            'files' => $this->files,
            'data' => $this->getState()
        ];
 
        $file->save($cache);
        $file->unlock();
        $file->free();
 
        $this->modified();
    }
 
    /**
     * @return array
     */
    protected function getState()
    {
        return $this->object->toArray();
    }
}
 
     * Function gets called when cached configuration is saved.
     */
    public function modified()
    {
    }
 
    /**
     * Load the configuration.
     *
     * @return mixed
     */
    public function load()
    {
        if ($this->object) {
            return $this->object;
        }
 
        $filename = $this->createFilename();
        if (!$this->loadCompiledFile($filename) && $this->loadFiles()) {
            $this->saveCompiledFile($filename);
        }
 
        return $this->object;
    }
 
    /**
     * Returns checksum from the configuration files.
     *
     * You can set $this->checksum = false to disable this check.
     *
     * @return bool|string
     */
    public function checksum()
    {
        if (!isset($this->checksum)) {
            $this->checksum = md5(json_encode($this->files) . $this->version);
        }
 
        return $this->checksum;
    }
     */
    public static function blueprints(Container $container)
    {
        /** @var UniformResourceLocator $locator */
        $locator = $container['locator'];
 
        $cache = $locator->findResource('gantry-cache://theme/compiled/blueprints', true, true);
        if (is_bool($cache)) {
            throw new \RuntimeException('Who just removed Gantry 5 cache folder? Try reloading the page if it fixes the issue');
        }
 
        $files = [];
        $paths = $locator->findResources('gantry-particles://');
        $files += (new ConfigFileFinder)->setBase('particles')->locateFiles($paths);
        $paths = $locator->findResources('gantry-blueprints://');
        $files += (new ConfigFileFinder)->locateFiles($paths);
 
        $config = new CompiledBlueprints($cache, $files, GANTRY5_ROOT);
 
        return $config->load();
    }
 
    /**
     * @param Container $container
     * @param string $name
     * @param bool $combine
     * @param bool $withDefaults
     * @return mixed
     */
    public static function load(Container $container, $name = 'default', $combine = true, $withDefaults = true)
    {
        /** @var UniformResourceLocator $locator */
        $locator = $container['locator'];
 
        $combine = $combine && $name !== 'default';
 
        // Merge current configuration with the default.
        $uris = $combine ? ["gantry-config://{$name}", 'gantry-config://default'] : ["gantry-config://{$name}"];
 
        $paths = [[]];
use Pimple\ServiceProviderInterface;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
 
/**
 * Class ConfigServiceProvider
 * @package Gantry\Framework\Services
 */
class ConfigServiceProvider implements ServiceProviderInterface
{
    /**
     * @param Container $gantry
     */
    public function register(Container $gantry)
    {
        $gantry['blueprints'] = static function(Gantry $gantry) {
            if (\GANTRY_DEBUGGER) {
                Debugger::startTimer('blueprints', 'Loading blueprints');
            }
 
            $blueprints = static::blueprints($gantry);
 
            if (\GANTRY_DEBUGGER) {
                Debugger::stopTimer('blueprints');
            }
 
            return $blueprints;
        };
 
        $gantry['config'] = static function(Gantry $gantry) {
            // Make sure configuration has been set.
            if (!isset($gantry['configuration'])) {
                throw new \LogicException('Gantry: Please set current configuration before using $gantry["config"]', 500);
            }
 
            if (\GANTRY_DEBUGGER) {
                Debugger::startTimer('config', 'Loading configuration');
            }
 
            // Get the current configuration and lock the value from modification.
            $outline = $gantry->lock('configuration');
    {
        if (!isset($this->keys[$id])) {
            throw new UnknownIdentifierException($id);
        }
 
        if (
            isset($this->raw[$id])
            || !\is_object($this->values[$id])
            || isset($this->protected[$this->values[$id]])
            || !\method_exists($this->values[$id], '__invoke')
        ) {
            return $this->values[$id];
        }
 
        if (isset($this->factories[$this->values[$id]])) {
            return $this->values[$id]($this);
        }
 
        $raw = $this->values[$id];
        $val = $this->values[$id] = $raw($this);
        $this->raw[$id] = $raw;
 
        $this->frozen[$id] = true;
 
        return $val;
    }
 
    /**
     * Checks if a parameter or an object is set.
     *
     * @param string $id The unique identifier for the parameter or object
     *
     * @return bool
     */
    public function offsetExists($id)
    {
        return isset($this->keys[$id]);
    }
 
    /**
        // Merge current configuration with the default.
        $uris = $combine ? ["gantry-config://{$name}", 'gantry-config://default'] : ["gantry-config://{$name}"];
 
        $paths = [[]];
        foreach ($uris as $uri) {
            $paths[] = $locator->findResources($uri);
        }
        $paths = array_merge(...$paths);
 
        // Locate all configuration files to be compiled.
        $files = (new ConfigFileFinder)->locateFiles($paths);
 
        $cache = $locator->findResource('gantry-cache://theme/compiled/config', true, true);
        if (is_bool($cache)) {
            throw new \RuntimeException('Who just removed Gantry 5 cache folder? Try reloading the page if it fixes the issue');
        }
 
        $compiled = new CompiledConfig($cache, $files, GANTRY5_ROOT);
        $compiled->setBlueprints(static function() use ($container) {
            return $container['blueprints'];
        });
 
        $config = $compiled->load($withDefaults);
 
        // Set atom inheritance.
        $atoms = $config->get('page.head.atoms');
        if (is_array($atoms)) {
            $config->set('page.head.atoms', (new Atoms($atoms))->init()->toArray());
        }
 
        // Set FA default in Joomla
        if (class_exists(Version::class)) {
            $config->def('page.fontawesome.default_version', Version::MAJOR_VERSION < 4 ? 'fa4' : 'fa5css');
        } else {
            $config->def('page.fontawesome.default_version', 'fa4');
        }
 
        return $config;
    }
}
     * @param bool $withDefaults
     * @return mixed
     */
    public function load($withDefaults = false)
    {
        $this->withDefaults = $withDefaults;
 
        return parent::load();
    }
 
    /**
     * Create configuration object.
     *
     * @param  array  $data
     */
    protected function createObject(array $data = [])
    {
        if ($this->withDefaults && empty($data) && is_callable($this->callable)) {
            $blueprints = $this->callable;
            $data = $blueprints()->getDefaults();
        }
 
        $this->object = new Config($data, $this->callable);
    }
 
    /**
     * Finalize configuration object.
     */
    protected function finalizeObject()
    {
    }
 
    /**
     * Load single configuration file and append it to the correct position.
     *
     * @param  string  $name  Name of the position.
     * @param  string  $filename  File to be loaded.
     */
    protected function loadFile($name, $filename)
    {
     */
    abstract protected function finalizeObject();
 
    /**
     * Load single configuration file and append it to the correct position.
     *
     * @param  string  $name  Name of the position.
     * @param  string  $filename  File to be loaded.
     */
    abstract protected function loadFile($name, $filename);
 
    /**
     * Load and join all configuration files.
     *
     * @return bool
     * @internal
     */
    protected function loadFiles()
    {
        $this->createObject();
 
        $list = array_reverse($this->files);
        foreach ($list as $files) {
            foreach ($files as $name => $item) {
                $this->loadFile($name, $this->path . $item['file']);
            }
        }
 
        $this->finalizeObject();
 
        return true;
    }
 
    /**
     * Load compiled file.
     *
     * @param  string  $filename
     * @return bool
     * @internal
     */
    /**
     * Function gets called when cached configuration is saved.
     */
    public function modified()
    {
    }
 
    /**
     * Load the configuration.
     *
     * @return mixed
     */
    public function load()
    {
        if ($this->object) {
            return $this->object;
        }
 
        $filename = $this->createFilename();
        if (!$this->loadCompiledFile($filename) && $this->loadFiles()) {
            $this->saveCompiledFile($filename);
        }
 
        return $this->object;
    }
 
    /**
     * Returns checksum from the configuration files.
     *
     * You can set $this->checksum = false to disable this check.
     *
     * @return bool|string
     */
    public function checksum()
    {
        if (!isset($this->checksum)) {
            $this->checksum = md5(json_encode($this->files) . $this->version);
        }
 
        return $this->checksum;
     *
     * @param callable $blueprints
     * @return $this
     */
    public function setBlueprints(callable $blueprints)
    {
        $this->callable = $blueprints;
 
        return $this;
    }
 
    /**
     * @param bool $withDefaults
     * @return mixed
     */
    public function load($withDefaults = false)
    {
        $this->withDefaults = $withDefaults;
 
        return parent::load();
    }
 
    /**
     * Create configuration object.
     *
     * @param  array  $data
     */
    protected function createObject(array $data = [])
    {
        if ($this->withDefaults && empty($data) && is_callable($this->callable)) {
            $blueprints = $this->callable;
            $data = $blueprints()->getDefaults();
        }
 
        $this->object = new Config($data, $this->callable);
    }
 
    /**
     * Finalize configuration object.
     */
        $paths = [[]];
        foreach ($uris as $uri) {
            $paths[] = $locator->findResources($uri);
        }
        $paths = array_merge(...$paths);
 
        // Locate all configuration files to be compiled.
        $files = (new ConfigFileFinder)->locateFiles($paths);
 
        $cache = $locator->findResource('gantry-cache://theme/compiled/config', true, true);
        if (is_bool($cache)) {
            throw new \RuntimeException('Who just removed Gantry 5 cache folder? Try reloading the page if it fixes the issue');
        }
 
        $compiled = new CompiledConfig($cache, $files, GANTRY5_ROOT);
        $compiled->setBlueprints(static function() use ($container) {
            return $container['blueprints'];
        });
 
        $config = $compiled->load($withDefaults);
 
        // Set atom inheritance.
        $atoms = $config->get('page.head.atoms');
        if (is_array($atoms)) {
            $config->set('page.head.atoms', (new Atoms($atoms))->init()->toArray());
        }
 
        // Set FA default in Joomla
        if (class_exists(Version::class)) {
            $config->def('page.fontawesome.default_version', Version::MAJOR_VERSION < 4 ? 'fa4' : 'fa5css');
        } else {
            $config->def('page.fontawesome.default_version', 'fa4');
        }
 
        return $config;
    }
}
 
        if ($force) {
            unset($gantry['configuration']);
        }
 
        // Set default name only if configuration has not been set before.
        if ($name === null && !isset($gantry['configuration'])) {
            $name = 'default';
        }
 
        $outline = isset($gantry['configuration']) ? $gantry['configuration'] : null;
 
        // Set configuration if given.
        if ($name && $name !== $outline) {
            if (\GANTRY_DEBUGGER) {
                Debugger::addMessage("Using Gantry outline {$name}");
            }
 
            $gantry['configuration'] = $name;
            unset($gantry['config']);
            $gantry['config'] = ConfigServiceProvider::load($gantry, $name);
        }
 
        return $this;
    }
 
    /**
     * Get current preset.
     *
     * @param  bool $forced     If true, return only forced preset or null.
     * @return string|null $preset
     */
    public function preset($forced = false)
    {
        $presets = $this->presets()->toArray();
 
        $preset = $this->preset;
 
        if (!$preset && !$forced) {
            /** @var Config $config */
            $config = static::gantry()['config'];
        }
 
        if (\GANTRY_DEBUGGER) {
            Debugger::addMessage("Using Gantry 5 template {$templateName}");
        }
 
        /** @var Theme $theme */
        $theme = $gantry['theme'];
 
        $assignments = new Assignments();
 
        if (\GANTRY_DEBUGGER) {
            Debugger::addMessage('Selecting outline (rules, matches, scores):', 'debug');
            Debugger::addMessage($assignments->getPage(), 'debug');
            Debugger::addMessage($assignments->loadAssignments(), 'debug');
            Debugger::addMessage($assignments->matches(), 'debug');
            Debugger::addMessage($assignments->scores(), 'debug');
        }
 
        $theme->setLayout($assignments->select());
 
        if ($this->params->get('asset_timestamps', 1)) {
            $age = (int)($this->params->get('asset_timestamps_period', 7) * 86400);
            Document::$timestamp_age = $age > 0 ? $age : PHP_INT_MAX;
        } else {
            Document::$timestamp_age = 0;
        }
    }
 
    /**
     * Re-route Gantry templates to Gantry Administration component.
     */
    private function onAfterRouteAdmin()
    {
        $input = $this->app->input;
 
        $option = $input->getCmd('option');
        $task   = $input->getCmd('task');
 
        if (in_array($option, array('com_templates', 'com_advancedtemplates'), true)) {
 
    /**
     * Return global configuration for Gantry5.
     *
     * @param array $global
     */
    public function onGantryGlobalConfig(&$global)
    {
        $global = $this->params->toArray();
    }
 
    public function onAfterRoute()
    {
        if (version_compare(JVERSION, '4.0', '<')) {
            // In Joomla 3.9 we need to make sure that user identity has been loaded.
            $this->app->loadIdentity();
        }
 
        if ($this->app->isClient('site')) {
            $this->onAfterRouteSite();
 
        } elseif ($this->app->isClient('administrator')) {
            $this->onAfterRouteAdmin();
        }
    }
 
    /**
     * Document gets set during dispatch, we need language and direction.
     */
    public function onAfterDispatch()
    {
        if (class_exists('Gantry\Framework\Gantry')) {
            $this->onAfterDispatchSiteAdmin();
        }
    }
 
    public function onAfterRender()
    {
        if ($this->app->isClient('site') && class_exists('Gantry\Framework\Gantry')) {
            $this->onAfterRenderSite();
     * @param   array  &$args  Arguments
     *
     * @return  mixed  Routine return value
     *
     * @since   1.5
     */
    public function update(&$args)
    {
        // First let's get the event from the argument array.  Next we will unset the
        // event argument as it has no bearing on the method to handle the event.
        $event = $args['event'];
        unset($args['event']);
 
        /*
         * If the method to handle an event exists, call it and return its return
         * value.  If it does not exist, return null.
         */
        if (method_exists($this, $event))
        {
            return call_user_func_array(array($this, $event), array_values($args));
        }
    }
}
 
        if (!isset($this->_methods[$event]) || empty($this->_methods[$event]))
        {
            // No Plugins Associated To Event!
            return $result;
        }
 
        // Loop through all plugins having a method matching our event
        foreach ($this->_methods[$event] as $key)
        {
            // Check if the plugin is present.
            if (!isset($this->_observers[$key]))
            {
                continue;
            }
 
            // Fire the event for an object based observer.
            if (is_object($this->_observers[$key]))
            {
                $args['event'] = $event;
                $value = $this->_observers[$key]->update($args);
            }
            // Fire the event for a function based observer.
            elseif (is_array($this->_observers[$key]))
            {
                $value = call_user_func_array($this->_observers[$key]['handler'], array_values($args));
            }
 
            if (isset($value))
            {
                $result[] = $value;
            }
        }
 
        return $result;
    }
 
    /**
     * Attach an observer object
     *
     * @param   object  $observer  An observer object to attach
        }
 
        return $this;
    }
 
    /**
     * Calls all handlers associated with an event group.
     *
     * @param   string  $event  The event name.
     * @param   array   $args   An array of arguments (optional).
     *
     * @return  array   An array of results from each function call, or null if no dispatcher is defined.
     *
     * @since   3.0.0
     */
    public function triggerEvent($event, array $args = null)
    {
        if ($this->dispatcher instanceof \JEventDispatcher)
        {
            return $this->dispatcher->trigger($event, $args);
        }
 
        return;
    }
 
    /**
     * Allows the application to load a custom or default dispatcher.
     *
     * The logic and options for creating this object are adequately generic for default cases
     * but for many applications it will make sense to override this method and create event
     * dispatchers, if required, based on more specific needs.
     *
     * @param   \JEventDispatcher  $dispatcher  An optional dispatcher object. If omitted, the factory dispatcher is created.
     *
     * @return  BaseApplication This method is chainable.
     *
     * @since   3.0.0
     */
    public function loadDispatcher(\JEventDispatcher $dispatcher = null)
    {
 
                    $this->setHeader('Expires', 'Wed, 17 Aug 2005 00:00:00 GMT', true);
                    $this->setHeader('Last-Modified', gmdate('D, d M Y H:i:s') . ' GMT', true);
                    $this->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
                    $this->setHeader('Pragma', 'no-cache');
                    $this->sendHeaders();
 
                    $this->redirect((string) $oldUri, 301);
                }
            }
        }
 
        foreach ($result as $key => $value)
        {
            $this->input->def($key, $value);
        }
 
        // Trigger the onAfterRoute event.
        \JPluginHelper::importPlugin('system');
        $this->triggerEvent('onAfterRoute');
    }
 
    /**
     * Sets the value of a user state variable.
     *
     * @param   string  $key    The path of the state.
     * @param   mixed   $value  The value of the variable.
     *
     * @return  mixed  The previous state, if one existed.
     *
     * @since   3.2
     */
    public function setUserState($key, $value)
    {
        $session = \JFactory::getSession();
        $registry = $session->get('registry');
 
        if ($registry !== null)
        {
            return $registry->set($key, $value);
 
        parent::render();
    }
 
    /**
     * Route the application.
     *
     * Routing is the process of examining the request environment to determine which
     * component should receive the request. The component optional parameters
     * are then set in the request object to be processed when the application is being
     * dispatched.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function route()
    {
        // Execute the parent method
        parent::route();
 
        $Itemid = $this->input->getInt('Itemid', null);
        $this->authorise($Itemid);
    }
 
    /**
     * Set the current state of the detect browser option.
     *
     * @param   boolean  $state  The new state of the detect browser option
     *
     * @return    boolean     The previous state
     *
     * @since    3.2
     */
    public function setDetectBrowser($state = false)
    {
        $old = $this->_detect_browser;
        $this->_detect_browser = $state;
 
        return $old;
        $this->triggerEvent('onAfterDispatch');
    }
 
    /**
     * Method to run the Web application routines.
     *
     * @return  void
     *
     * @since   3.2
     */
    protected function doExecute()
    {
        // Initialise the application
        $this->initialiseApp();
 
        // Mark afterInitialise in the profiler.
        JDEBUG ? $this->profiler->mark('afterInitialise') : null;
 
        // Route the application
        $this->route();
 
        // Mark afterRoute in the profiler.
        JDEBUG ? $this->profiler->mark('afterRoute') : null;
 
        /*
         * Check if the user is required to reset their password
         *
         * Before $this->route(); "option" and "view" can't be safely read using:
         * $this->input->getCmd('option'); or $this->input->getCmd('view');
         * ex: due of the sef urls
         */
        $this->checkUserRequireReset('com_users', 'profile', 'edit', 'com_users/profile.save,com_users/profile.apply,com_users/user.logout');
 
        // Dispatch the application
        $this->dispatch();
 
        // Mark afterDispatch in the profiler.
        JDEBUG ? $this->profiler->mark('afterDispatch') : null;
    }
 
            array('option', 'view', 'format', 'lang', 'Itemid', 'template', 'templateStyle', 'task'),
            function($systemVariable) use ($input) {
                return $input->exists($systemVariable) && is_array($input->getRaw($systemVariable));
            }
        );
 
        // Unset invalid system variables
        foreach ($invalidInputVariables as $systemVariable)
        {
            $input->set($systemVariable, null);
        }
 
        // Abort when there are invalid variables
        if ($invalidInputVariables)
        {
            throw new \RuntimeException('Invalid input, aborting application.');
        }
 
        // Perform application routines.
        $this->doExecute();
 
        // If we have an application document object, render it.
        if ($this->document instanceof \JDocument)
        {
            // Render the application output.
            $this->render();
        }
 
        // If gzip compression is enabled in configuration and the server is compliant, compress the output.
        if ($this->get('gzip') && !ini_get('zlib.output_compression') && ini_get('output_handler') !== 'ob_gzhandler')
        {
            $this->compress();
 
            // Trigger the onAfterCompress event.
            $this->triggerEvent('onAfterCompress');
        }
 
        // Send the application response.
        $this->respond();
 
{
    include_once __DIR__ . '/defines.php';
}
 
if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', __DIR__);
    require_once JPATH_BASE . '/includes/defines.php';
}
 
require_once JPATH_BASE . '/includes/framework.php';
 
// Set profiler start time and memory usage and mark afterLoad in the profiler.
JDEBUG ? JProfiler::getInstance('Application')->setStart($startTime, $startMem)->mark('afterLoad') : null;
 
// Instantiate the application.
$app = JFactory::getApplication('site');
 
// Execute the application.
$app->execute();
 

Environment & details:

empty
empty
empty
empty
Key Value
fb_532733327532331_state 6d58207047ebc102e8bf8a444ef6b189
Key Value
PHP_INI_SCAN_DIR /etc/opt/remi/php74/php.d:/home/pmc/public_html
PATH /bin:/usr/bin
HTTP_ACCEPT */*
HTTP_HOST pocketmoney.credit
HTTP_USER_AGENT claudebot
DOCUMENT_ROOT /home/pmc/public_html
REMOTE_ADDR 44.206.227.65
REMOTE_PORT 41476
SERVER_ADDR 217.174.153.75
SERVER_NAME pocketmoney.credit
SERVER_ADMIN
SERVER_PORT 443
REQUEST_URI /community/stream/item/19831
REDIRECT_URL /community/stream/item/19831
HTTPS on
HTTP_AUTHORIZATION
REDIRECT_STATUS 200
X_SPDY HTTP2
SSL_PROTOCOL TLSv1.3
SSL_CIPHER TLS_CHACHA20_POLY1305_SHA256
SSL_CIPHER_USEKEYSIZE 256
SSL_CIPHER_ALGKEYSIZE 256
LSWS_EDITION Openlitespeed 1.7.19
X-LSCACHE on,crawler
SCRIPT_FILENAME /home/pmc/public_html/index.php
QUERY_STRING
SCRIPT_NAME /index.php
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE LiteSpeed
REQUEST_METHOD GET
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1711661843.7558
REQUEST_TIME 1711661843
empty
0. Whoops\Handler\PrettyPageHandler