Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php").
Previous exceptions
  • Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php (0)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php")." Stacktrace: #39 Twig\Error\RuntimeError in /home/pmc/public_html/media/gantry5/engines/nucleus/templates/page.html.twig:4 #38 RuntimeException in /home/pmc/public_html/libraries/gantry5/vendor/rockettheme/toolbox/File/src/AbstractFile.php:348 #37 RocketTheme\Toolbox\File\AbstractFile:save in /home/pmc/public_html/libraries/gantry5/vendor/rockettheme/toolbox/File/src/PhpFile.php:46 #36 RocketTheme\Toolbox\File\PhpFile:save in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:253 #35 Gantry\Component\Config\CompiledBase:saveCompiledFile in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/CompiledBase.php:98 #34 Gantry\Component\Config\CompiledBase:load in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:98 #33 Gantry\Framework\Services\ConfigServiceProvider:blueprints in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:44 #32 Gantry\Framework\Services\ConfigServiceProvider:Gantry\Framework\Services\{closure} in /home/pmc/public_html/libraries/gantry5/vendor/pimple/pimple/src/Pimple/Container.php:118 #31 Pimple\Container:offsetGet in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php:134 #30 Gantry\Framework\Services\ConfigServiceProvider:Gantry\Framework\Services\{closure} in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/Config.php:239 #29 Gantry\Component\Config\Config:blueprint in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Config/Config.php:143 #28 Gantry\Component\Config\Config:getJoined in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:762 #27 Gantry\Framework\Theme:getContent in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:718 #26 Gantry\Framework\Theme:renderContent in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:643 #25 Gantry\Framework\Theme:prepareLayout in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:627 #24 Gantry\Framework\Theme:prepareLayout in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:627 #23 Gantry\Framework\Theme:prepareLayout in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:627 #22 Gantry\Framework\Theme:prepareLayout in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/ThemeTrait.php:468 #21 Gantry\Framework\Theme:segments in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:700 #20 Twig\Template:getAttribute in /home/pmc/public_html/cache/gantry5/g5_helium/twig/98/983febda1511bb912a0432db9ed30f4d7c960beefc1385a15e0cd875d7fbdc97.php:47 #19 __TwigTemplate_4b7af794afd2b9e8b995b4e8dcde3d3692d9c8b346435486f5a02b01af8745cb:doDisplay in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:453 #18 Twig\Template:displayWithErrorHandling in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:420 #17 Twig\Template:display in /home/pmc/public_html/cache/gantry5/g5_helium/twig/c5/c5527c41a6a0904b6479437d00fbc09806f969d8feec73942328e0f6328e6560.php:35 #16 __TwigTemplate_c34a64284d748f580762a1d06799b2d95c4f7cc5f61e9d6e1e467a5535ad4f01:doDisplay in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:453 #15 Twig\Template:displayWithErrorHandling in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:420 #14 Twig\Template:display in /home/pmc/public_html/cache/gantry5/g5_helium/twig/25/25fd429887bcc45f038d1bd9cc3af0c963c4a06541c30d67d20849fde4f41973.php:35 #13 __TwigTemplate_cb5f5e966d608143897004838caceb766084ced80c4adc2a0da9d343757e3142:doDisplay in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:453 #12 Twig\Template:displayWithErrorHandling in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:420 #11 Twig\Template:display in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Template.php:432 #10 Twig\Template:render in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/TemplateWrapper.php:47 #9 Twig\TemplateWrapper:render in /home/pmc/public_html/libraries/gantry5/compat/vendor/twig/twig/src/Environment.php:384 #8 Twig\Environment:render in /home/pmc/public_html/libraries/gantry5/src/classes/Gantry/Component/Theme/AbstractTheme.php:176 #7 Gantry\Component\Theme\AbstractTheme:render in /home/pmc/public_html/templates/g5_helium/index.php:35 #6 require in /home/pmc/public_html/libraries/src/Document/HtmlDocument.php:678 #5 Joomla\CMS\Document\HtmlDocument:_loadTemplate in /home/pmc/public_html/libraries/src/Document/HtmlDocument.php:740 #4 Joomla\CMS\Document\HtmlDocument:_fetchTemplate in /home/pmc/public_html/libraries/src/Document/HtmlDocument.php:555 #3 Joomla\CMS\Document\HtmlDocument:parse in /home/pmc/public_html/libraries/src/Application/CMSApplication.php:1098 #2 Joomla\CMS\Application\CMSApplication:render in /home/pmc/public_html/libraries/src/Application/SiteApplication.php:778 #1 Joomla\CMS\Application\SiteApplication:render in /home/pmc/public_html/libraries/src/Application/CMSApplication.php:231 #0 Joomla\CMS\Application\CMSApplication:execute in /home/pmc/public_html/index.php:49
Stack frames (40)
39
Twig\Error\RuntimeError
/home/pmc/public_html/media/gantry5/engines/nucleus/templates/page.html.twig4
38
RuntimeException
/vendor/rockettheme/toolbox/File/src/AbstractFile.php348
37
RocketTheme\Toolbox\File\AbstractFile save
/vendor/rockettheme/toolbox/File/src/PhpFile.php46
36
RocketTheme\Toolbox\File\PhpFile save
/src/classes/Gantry/Component/Config/CompiledBase.php253
35
Gantry\Component\Config\CompiledBase saveCompiledFile
/src/classes/Gantry/Component/Config/CompiledBase.php98
34
Gantry\Component\Config\CompiledBase load
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php98
33
Gantry\Framework\Services\ConfigServiceProvider blueprints
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php44
32
Gantry\Framework\Services\ConfigServiceProvider Gantry\Framework\Services\{closure}
/vendor/pimple/pimple/src/Pimple/Container.php118
31
Pimple\Container offsetGet
/src/classes/Gantry/Framework/Services/ConfigServiceProvider.php134
30
Gantry\Framework\Services\ConfigServiceProvider Gantry\Framework\Services\{closure}
/src/classes/Gantry/Component/Config/Config.php239
29
Gantry\Component\Config\Config blueprint
/src/classes/Gantry/Component/Config/Config.php143
28
Gantry\Component\Config\Config getJoined
/src/classes/Gantry/Component/Theme/ThemeTrait.php762
27
Gantry\Framework\Theme getContent
/src/classes/Gantry/Component/Theme/ThemeTrait.php718
26
Gantry\Framework\Theme renderContent
/src/classes/Gantry/Component/Theme/ThemeTrait.php643
25
Gantry\Framework\Theme prepareLayout
/src/classes/Gantry/Component/Theme/ThemeTrait.php627
24
Gantry\Framework\Theme prepareLayout
/src/classes/Gantry/Component/Theme/ThemeTrait.php627
23
Gantry\Framework\Theme prepareLayout
/src/classes/Gantry/Component/Theme/ThemeTrait.php627
22
Gantry\Framework\Theme prepareLayout
/src/classes/Gantry/Component/Theme/ThemeTrait.php468
21
Gantry\Framework\Theme segments
/compat/vendor/twig/twig/src/Template.php700
20
Twig\Template getAttribute
/home/pmc/public_html/cache/gantry5/g5_helium/twig/98/983febda1511bb912a0432db9ed30f4d7c960beefc1385a15e0cd875d7fbdc97.php47
19
__TwigTemplate_4b7af794afd2b9e8b995b4e8dcde3d3692d9c8b346435486f5a02b01af8745cb doDisplay
/compat/vendor/twig/twig/src/Template.php453
18
Twig\Template displayWithErrorHandling
/compat/vendor/twig/twig/src/Template.php420
17
Twig\Template display
/home/pmc/public_html/cache/gantry5/g5_helium/twig/c5/c5527c41a6a0904b6479437d00fbc09806f969d8feec73942328e0f6328e6560.php35
16
__TwigTemplate_c34a64284d748f580762a1d06799b2d95c4f7cc5f61e9d6e1e467a5535ad4f01 doDisplay
/compat/vendor/twig/twig/src/Template.php453
15
Twig\Template displayWithErrorHandling
/compat/vendor/twig/twig/src/Template.php420
14
Twig\Template display
/home/pmc/public_html/cache/gantry5/g5_helium/twig/25/25fd429887bcc45f038d1bd9cc3af0c963c4a06541c30d67d20849fde4f41973.php35
13
__TwigTemplate_cb5f5e966d608143897004838caceb766084ced80c4adc2a0da9d343757e3142 doDisplay
/compat/vendor/twig/twig/src/Template.php453
12
Twig\Template displayWithErrorHandling
/compat/vendor/twig/twig/src/Template.php420
11
Twig\Template display
/compat/vendor/twig/twig/src/Template.php432
10
Twig\Template render
/compat/vendor/twig/twig/src/TemplateWrapper.php47
9
Twig\TemplateWrapper render
/compat/vendor/twig/twig/src/Environment.php384
8
Twig\Environment render
/src/classes/Gantry/Component/Theme/AbstractTheme.php176
7
Gantry\Component\Theme\AbstractTheme render
/home/pmc/public_html/templates/g5_helium/index.php35
6
require
/home/pmc/public_html/libraries/src/Document/HtmlDocument.php678
5
Joomla\CMS\Document\HtmlDocument _loadTemplate
/home/pmc/public_html/libraries/src/Document/HtmlDocument.php740
4
Joomla\CMS\Document\HtmlDocument _fetchTemplate
/home/pmc/public_html/libraries/src/Document/HtmlDocument.php555
3
Joomla\CMS\Document\HtmlDocument parse
/home/pmc/public_html/libraries/src/Application/CMSApplication.php1098
2
Joomla\CMS\Application\CMSApplication render
/home/pmc/public_html/libraries/src/Application/SiteApplication.php778
1
Joomla\CMS\Application\SiteApplication render
/home/pmc/public_html/libraries/src/Application/CMSApplication.php231
0
Joomla\CMS\Application\CMSApplication execute
/home/pmc/public_html/index.php49
{%- do gantry.debugger.startTimer('render', 'Rendering page') %}
{%- do gantry.theme.setLayout() -%}
{%- do gantry.theme.loadAtoms() -%}
{%- set segments = gantry.theme.segments() -%}
 
{%- set content %}
    {% if gantry.theme.hasContent() %}
        {% block content %}
        {% endblock %}
    {% endif %}
{% endset -%}
 
{%- set offcanvas = null -%}
{%- for segment in segments if segment.type == 'offcanvas' %}
    {%- set offcanvas = segment -%}
{% endfor -%}
 
{%- set page_offcanvas %}
    {% block page_offcanvas %}
        {% if offcanvas %}
            {% include '@nucleus/layout/' ~ offcanvas.type ~ '.html.twig' with { 'segment': offcanvas } -%}
        {% endif %}
    {% endblock %}
{% endset -%}
 
{%- set page_offcanvas = page_offcanvas|trim ?: '' %}
{%- set offcanvas_position = page_offcanvas ? offcanvas.attributes.position|default('g-offcanvas-left') : '' -%}
 
{%- set page_layout %}
    {% block page_layout %}
    {% for segment in segments if segment.type != 'offcanvas' %}
        {% include '@nucleus/layout/' ~ segment.type ~ '.html.twig' with { 'segments': segment.children } %}
    {% endfor %}
    {% endblock %}
{% endset -%}
 
{%- set page_top %}
    {% block page_top %}
    {% endblock %}
    {{ gantry.document.getHtml('top')|join("\n    ")|raw }}
 
        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;
                }
            }
Exception message: Creating directory failed for /home/pmc/public_html/cache/gantry5/g5_helium/compiled/blueprints/f3bdf9ef8b4c8fbda65bb4713111549d.php
     * @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;
    }
}
            }
        }
 
        return $list;
    }
 
    /**
     * Return blueprint.
     *
     * @return BlueprintSchema|BlueprintForm
     * @since 5.4.7
     */
    public function blueprint()
    {
        if (!$this->blueprint) {
            $this->blueprint = new BlueprintSchema;
        } elseif (is_callable($this->blueprint)) {
            // Lazy load blueprints.
            $blueprint = $this->blueprint;
            $this->blueprint = $blueprint();
        }
        return $this->blueprint;
    }
 
    /**
     * Return blueprints.
     *
     * @return BlueprintSchema
     * @deprecated 5.4.7
     */
    public function blueprints()
    {
        return $this->blueprint();
    }
 
    /**
     * Count items in nested array.
     *
     * @param string $path
     * @param string $separator
    {
        if (is_object($value)) {
            $value = (array) $value;
        } elseif (!is_array($value)) {
            throw new \RuntimeException("Value is not array in '{$name}': " . print_r($value, true));
        }
 
        $old = $this->get($name, null, $separator);
 
        if ($old === null) {
            // No value set; no need to join data.
            return $value;
        }
 
        if (!is_array($old)) {
            throw new \RuntimeException("Value is not array in '{$name}': " . print_r($value, true));
        }
 
        // Return joined data.
        return $this->blueprint()->mergeData($old, $value, $name, $separator);
    }
 
    /**
     * Merge two configurations together.
     *
     * @param array $data
     * @return $this
     */
    public function merge(array $data)
    {
        $this->items = $this->blueprint()->mergeData($this->items, $data);
 
        return $this;
    }
 
    /**
     * Set default values to the configuration if variables were not set.
     *
     * @param array $data
     * @return $this
        }
 
        $gantry = static::gantry();
 
        /** @var Config $global */
        $global = $gantry['global'];
 
        /** @var Config $config */
        $config = $gantry['config'];
 
        $production = (bool) $global->get('production');
        $subtype = $item->subtype;
        $enabled = $config->get("particles.{$subtype}.enabled", 1);
 
        if (!$enabled) {
            return new HtmlBlock;
        }
 
        $attributes = isset($item->attributes) ? $item->attributes : [];
        $particle = $config->getJoined("particles.{$subtype}", $attributes);
 
        $cached = false;
        $cacheKey = [];
 
        // Enable particle caching only in production mode.
        if ($production && isset($particle['caching'])) {
            $caching = $particle['caching'] + ['type' => 'dynamic'];
 
            switch ($caching['type']) {
                case 'static':
                    $cached = true;
                    break;
                case 'config_matches':
                    if (isset($particle['caching']['values'])) {
                        $values = (array) $particle['caching']['values'];
                        $compare = array_intersect_key($particle, $values);
                        $cached = ($values === $compare);
                    }
                    break;
                case 'menu':
                        }
                    }
            }
        }
    }
 
    /**
     * Renders individual content block, like particle or position.
     *
     * Function is used to pre-render content.
     *
     * @param object|array $item
     * @param array $options
     * @return string|null
     */
    public function renderContent($item, $options = [])
    {
        $gantry = static::gantry();
 
        $content = $this->getContent($item, $options);
 
        /** @var Document $document */
        $document = $gantry['document'];
        $document->addBlock($content);
 
        $html = $content->toString();
 
        return false === strpos($html, '@@DEFERRED@@') ? $html : null;
    }
 
    /**
     * Renders individual content block, like particle or position.
     *
     * Function is used to pre-render content.
     *
     * @param object|array $item
     * @param array $options
     * @return ContentBlock|ContentBlockInterface
     * @since 5.4.3
     */
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    if (\GANTRY_DEBUGGER) {
                        Debugger::startTimer($item->id, "Rendering {$item->id}");
                    }
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
 
                    if (\GANTRY_DEBUGGER) {
                        Debugger::stopTimer($item->id);
                    }
 
                    break;
 
                default:
                    if ($sticky) {
                        $item->attributes->sticky = 1;
                        break;
                    }
 
                    if (empty($item->children)) {
                        unset($items[$i]);
                        break;
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    if (\GANTRY_DEBUGGER) {
                        Debugger::startTimer($item->id, "Rendering {$item->id}");
                    }
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    if (\GANTRY_DEBUGGER) {
                        Debugger::startTimer($item->id, "Rendering {$item->id}");
                    }
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
     * @param array $items
     * @param bool  $temporary
     * @param bool  $sticky
     * @internal
     */
    protected function prepareLayout(array &$items, $temporary = false, $sticky = false)
    {
        foreach ($items as $i => &$item) {
            // Non-numeric items are meta-data which should be ignored.
            if (((string)(int) $i !== (string) $i) || !is_object($item)) {
                continue;
            }
 
            if (!empty($item->children)) {
                $fixed = true;
                foreach ($item->children as $child) {
                    $fixed &= !empty($child->attributes->fixed);
                }
 
                $this->prepareLayout($item->children, $fixed, $temporary);
            }
 
            // TODO: remove hard coded types.
            switch ($item->type) {
                case 'system':
                    break;
 
                case 'atom':
                case 'particle':
                case 'position':
                case 'spacer':
                    if (\GANTRY_DEBUGGER) {
                        Debugger::startTimer($item->id, "Rendering {$item->id}");
                    }
 
                    $item->content = $this->renderContent($item, ['prepare_layout' => true]);
                    // Note that content can also be null (postpone rendering).
                    if ($item->content === '') {
                        unset($items[$i]);
                    }
                Debugger::stopTimer('atoms');
            }
        }
    }
 
    /**
     * Returns all non-empty segments from the layout.
     *
     * @return array
     */
    public function segments()
    {
        if (!isset($this->segments)) {
            $this->segments = $this->loadLayout()->toArray();
 
            if (\GANTRY_DEBUGGER) {
                Debugger::startTimer('segments', 'Preparing layout');
            }
 
            $this->prepareLayout($this->segments);
 
            if (\GANTRY_DEBUGGER) {
                Debugger::stopTimer('segments');
            }
        }
 
        return $this->segments;
    }
 
    /**
     * Prepare layout for rendering. Initializes all CSS/JS in particles.
     */
    public function prepare()
    {
        $this->segments();
    }
 
    /**
     * Returns details of the theme.
     *
            if ($ignoreStrictCheck || !$this->env->isStrictVariables()) {
                return;
            }
 
            throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), -1, $this->getSourceContext());
        }
 
        if ($isDefinedTest) {
            return true;
        }
 
        if ($this->env->hasExtension('\Twig\Extension\SandboxExtension')) {
            $this->env->getExtension('\Twig\Extension\SandboxExtension')->checkMethodAllowed($object, $method);
        }
 
        // Some objects throw exceptions when they have __call, and the method we try
        // to call is not supported. If ignoreStrictCheck is true, we should return null.
        try {
            if (!$arguments) {
                $ret = $object->$method();
            } else {
                $ret = \call_user_func_array([$object, $method], $arguments);
            }
        } catch (\BadMethodCallException $e) {
            if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) {
                return;
            }
            throw $e;
        }
 
        // @deprecated in 1.28
        if ($object instanceof \Twig_TemplateInterface) {
            $self = $object->getTemplateName() === $this->getTemplateName();
            $message = sprintf('Calling "%s" on template "%s" from template "%s" is deprecated since version 1.28 and won\'t be supported anymore in 2.0.', $item, $object->getTemplateName(), $this->getTemplateName());
            if ('renderBlock' === $method || 'displayBlock' === $method) {
                $message .= sprintf(' Use block("%s"%s) instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('hasBlock' === $method) {
                $message .= sprintf(' Use "block("%s"%s) is defined" instead).', $arguments[0], $self ? '' : ', template');
            } elseif ('render' === $method || 'display' === $method) {
                $message .= sprintf(' Use include("%s") instead).', $object->getTemplateName());
            'page_bottom' => [$this, 'block_page_bottom'],
            'body_top' => [$this, 'block_body_top'],
            'body_bottom' => [$this, 'block_body_bottom'],
            'page_head' => [$this, 'block_page_head'],
            'page_footer' => [$this, 'block_page_footer'],
            'page' => [$this, 'block_page'],
            'page_body' => [$this, 'block_page_body'],
        ];
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        // line 1
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "debugger", []), "startTimer", [0 => "render", 1 => "Rendering page"], "method");
        // line 2
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "setLayout", [], "method");
        // line 3
        $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "loadAtoms", [], "method");
        // line 4
        $context["segments"] = $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "segments", [], "method");
        // line 6
        ob_start(function () { return ''; });
        // line 7
        echo "    ";
        if ($this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "theme", []), "hasContent", [], "method")) {
            // line 8
            echo "        ";
            $this->displayBlock('content', $context, $blocks);
            // line 10
            echo "    ";
        }
        $context["content"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset());
        // line 13
        $context["offcanvas"] = null;
        // line 14
        $context['_parent'] = $context;
        $context['_seq'] = twig_ensure_traversable(($context["segments"] ?? null));
        foreach ($context['_seq'] as $context["_key"] => $context["segment"]) {
            if (($this->getAttribute($context["segment"], "type", []) == "offcanvas")) {
                // line 15
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'page_footer' => [$this, 'block_page_footer'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "@nucleus/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("@nucleus/page.html.twig", "partials/page.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_page_footer($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        $this->displayParentBlock("page_footer", $context, $blocks);
        echo "
    <jdoc:include type=\"modules\" name=\"debug\" />
";
    }
 
    public function getTemplateName()
    {
        return "partials/page.html.twig";
    }
 
    public function isTraitable()
    {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
{
    public function __construct(Environment $env)
    {
        parent::__construct($env);
 
        $this->blocks = [
            'content' => [$this, 'block_content'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "partials/page.html.twig";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $this->parent = $this->loadTemplate("partials/page.html.twig", "index.html.twig", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_content($context, array $blocks = [])
    {
        // line 4
        echo "    ";
        echo $this->getAttribute($this->getAttribute(($context["gantry"] ?? null), "platform", []), "displayContent", [0 => ($context["content"] ?? null)], "method");
        echo "
";
    }
 
    public function getTemplateName()
    {
        return "index.html.twig";
    }
 
    public function isTraitable()
    {
        return false;
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Exception $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     */
    public function render($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display($context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_num_args() > 1 ? func_get_arg(1) : []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     *
        @trigger_error(sprintf('The %s method is deprecated since version 1.22 and will be removed in Twig 2.0.', __METHOD__), \E_USER_DEPRECATED);
 
        return $this->templateClassPrefix;
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
 
            $this->renderer = $this->extendTwig($twig, $loader);
        }
 
        return $this->renderer;
    }
 
    /**
     * Render a template file by using given context.
     *
     * @param string $file
     * @param array $context
     * @return string
     */
    public function render($file, array $context = [])
    {
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $this->renderer()->render($file, $context);
    }
 
    /**
     * Compile and render twig string.
     *
     * @param string $string
     * @param array $context
     * @return string
     */
    public function compile($string, array $context = [])
    {
        $renderer = $this->renderer();
        $template = $renderer->createTemplate($string);
 
        // Include Gantry specific things to the context.
        $context = $this->getContext($context);
 
        return $template->render($context);
    }
 
 
// Bootstrap Gantry framework or fail gracefully (inside included file).
$className = __DIR__ . '/custom/includes/gantry.php';
if (!is_file($className)) {
    $className = __DIR__ . '/includes/gantry.php';
}
$gantry = include $className;
 
/** @var Platform $joomla */
$joomla = $gantry['platform'];
$joomla->document = $this;
 
/** @var Theme $theme */
$theme = $gantry['theme'];
 
// All the custom twig variables can be defined in here:
$context = array();
 
// Render the page.
echo $theme->render('index.html.twig', $context);
 
     * @param   string  $directory  The name of the template
     * @param   string  $filename   The actual filename
     *
     * @return  string  The contents of the template
     *
     * @since   1.7.0
     */
    protected function _loadTemplate($directory, $filename)
    {
        $contents = '';
 
        // Check to see if we have a valid template file
        if (file_exists($directory . '/' . $filename))
        {
            // Store the file path
            $this->_file = $directory . '/' . $filename;
 
            // Get the file content
            ob_start();
            require $directory . '/' . $filename;
            $contents = ob_get_contents();
            ob_end_clean();
        }
 
        // Try to find a favicon by checking the template and root folder
        $icon = '/favicon.ico';
 
        foreach (array($directory, JPATH_BASE) as $dir)
        {
            if (file_exists($dir . $icon))
            {
                $path = str_replace(JPATH_BASE, '', $dir);
                $path = str_replace('\\', '/', $path);
                $this->addFavicon(Uri::base(true) . $path . $icon);
                break;
            }
        }
 
        return $contents;
    }
 
        if (!file_exists($directory . '/' . $template . '/' . $file))
        {
            $file = 'index.php';
        }
 
        // Load the language file for the template
        $lang = \JFactory::getLanguage();
 
        // 1.5 or core then 1.6
        $lang->load('tpl_' . $template, JPATH_BASE, null, false, true)
        || $lang->load('tpl_' . $template, $directory . '/' . $template, null, false, true);
 
        // Assign the variables
        $this->template = $template;
        $this->baseurl = Uri::base(true);
        $this->params = isset($params['params']) ? $params['params'] : new Registry;
 
        // Load
        $this->_template = $this->_loadTemplate($directory . '/' . $template, $file);
 
        return $this;
    }
 
    /**
     * Parse a document template
     *
     * @return  HtmlDocument  instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    protected function _parseTemplate()
    {
        $matches = array();
 
        if (preg_match_all('#<jdoc:include\ type="([^"]+)"(.*)\/>#iU', $this->_template, $matches))
        {
            $template_tags_first = array();
            $template_tags_last = array();
 
            $options['title'] = (isset($args[3])) ? $args[3] : null;
        }
 
        parent::$_buffer[$options['type']][$options['name']][$options['title']] = $content;
 
        return $this;
    }
 
    /**
     * Parses the template and populates the buffer
     *
     * @param   array  $params  Parameters for fetching the template
     *
     * @return  HtmlDocument instance of $this to allow chaining
     *
     * @since   1.7.0
     */
    public function parse($params = array())
    {
        return $this->_fetchTemplate($params)->_parseTemplate();
    }
 
    /**
     * Outputs the template to the browser.
     *
     * @param   boolean  $caching  If true, cache the output
     * @param   array    $params   Associative array of attributes
     *
     * @return  string The rendered data
     *
     * @since   1.7.0
     */
    public function render($caching = false, $params = array())
    {
        $this->_caching = $caching;
 
        if (empty($this->_template))
        {
            $this->parse($params);
        }
     */
    protected function render()
    {
        // Setup the document options.
        $this->docOptions['template'] = $this->get('theme');
        $this->docOptions['file']     = $this->get('themeFile', 'index.php');
        $this->docOptions['params']   = $this->get('themeParams');
 
        if ($this->get('themes.base'))
        {
            $this->docOptions['directory'] = $this->get('themes.base');
        }
        // Fall back to constants.
        else
        {
            $this->docOptions['directory'] = defined('JPATH_THEMES') ? JPATH_THEMES : (defined('JPATH_BASE') ? JPATH_BASE : __DIR__) . '/themes';
        }
 
        // Parse the document.
        $this->document->parse($this->docOptions);
 
        // Trigger the onBeforeRender event.
        \JPluginHelper::importPlugin('system');
        $this->triggerEvent('onBeforeRender');
 
        $caching = false;
 
        if ($this->isClient('site') && $this->get('caching') && $this->get('caching', 2) == 2 && !\JFactory::getUser()->get('id'))
        {
            $caching = true;
        }
 
        // Render the document.
        $data = $this->document->render($caching, $this->docOptions);
 
        // Set the application output data.
        $this->setBody($data);
 
        // Trigger the onAfterRender event.
        $this->triggerEvent('onAfterRender');
                    $this->setUserState('users.login.form.data', array('return' => \JUri::getInstance()->toString()));
                    $this->set('themeFile', 'offline.php');
                    $this->setHeader('Status', '503 Service Temporarily Unavailable', 'true');
                }
 
                if (!is_dir(JPATH_THEMES . '/' . $template->template) && !$this->get('offline'))
                {
                    $this->set('themeFile', 'component.php');
                }
 
                // Ensure themeFile is set by now
                if ($this->get('themeFile') == '')
                {
                    $this->set('themeFile', $file . '.php');
                }
 
                break;
        }
 
        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);
        // 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();
 
        // Trigger the onAfterRespond event.
        $this->triggerEvent('onAfterRespond');
    }
 
    /**
     * Check if the user is required to reset their password.
{
    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 7e0dc0d7fa20864dd1a296db8221f84f
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 3.229.124.236
REMOTE_PORT 33912
SERVER_ADDR 217.174.153.75
SERVER_NAME pocketmoney.credit
SERVER_ADMIN
SERVER_PORT 443
REQUEST_URI /polls/finance-and-insurance/20-cooling-off-period-window-in-loans-did-you-know
REDIRECT_URL /polls/finance-and-insurance/20-cooling-off-period-window-in-loans-did-you-know
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 1711645086.8617
REQUEST_TIME 1711645086
empty
0. Whoops\Handler\PrettyPageHandler