Symfony \ Component \ Yaml \ Exception \ ParseException
Duplicate key "type" detected at line 23 (near "type: Repeaat Track"). Symfony\Component\Yaml\Exception\ParseException thrown with message "Duplicate key "type" detected at line 23 (near "type: Repeaat Track")." Stacktrace: #40 Symfony\Component\Yaml\Exception\ParseException in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:360 #39 Symfony\Component\Yaml\Parser:doParse in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:537 #38 Symfony\Component\Yaml\Parser:parseBlock in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:208 #37 Symfony\Component\Yaml\Parser:doParse in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:537 #36 Symfony\Component\Yaml\Parser:parseBlock in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:332 #35 Symfony\Component\Yaml\Parser:doParse in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:537 #34 Symfony\Component\Yaml\Parser:parseBlock in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:332 #33 Symfony\Component\Yaml\Parser:doParse in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Parser.php:97 #32 Symfony\Component\Yaml\Parser:parse in /apps/topdata/app/webroot/libraries/gantry5/vendor/symfony/yaml/Yaml.php:80 #31 Symfony\Component\Yaml\Yaml:parse in /apps/topdata/app/webroot/libraries/quix/src/Config/Loaders/YamlConfigLoader.php:26 #30 ThemeXpert\Config\Loaders\YamlConfigLoader:load in /apps/topdata/app/webroot/libraries/quix/vendor/symfony/config/Loader/DelegatingLoader.php:40 #29 Symfony\Component\Config\Loader\DelegatingLoader:load in /apps/topdata/app/webroot/libraries/quix/src/Config/Loader.php:88 #28 ThemeXpert\Config\Loader:load in /apps/topdata/app/webroot/libraries/quix/src/Config/ConfigBag.php:108 #27 ThemeXpert\Config\ConfigBag:load in /apps/topdata/app/webroot/libraries/quix/src/Config/ConfigBag.php:71 #26 ThemeXpert\Config\ConfigBag:fill in /apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php:75 #25 ThemeXpert\Quix\Element\ElementBag:add in /apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php:58 #24 call_user_func_array in /apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php:58 #23 ThemeXpert\Quix\Element\ElementBag:load in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:273 #22 ThemeXpert\Quix\Application:ThemeXpert\Quix\{closure} in /apps/topdata/app/webroot/libraries/quix/src/Quix/Cache.php:128 #21 ThemeXpert\Quix\Cache:getCacheById in /apps/topdata/app/webroot/libraries/quix/src/Quix/Cache.php:103 #20 ThemeXpert\Quix\Cache:fetch in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:300 #19 ThemeXpert\Quix\Application:getElements in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:110 #18 ThemeXpert\Quix\Application:ThemeXpert\Quix\{closure} in /apps/topdata/app/webroot/libraries/gantry5/compat/vendor/pimple/pimple/src/Pimple/Container.php:122 #17 Pimple\Container:offsetGet in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:198 #16 ThemeXpert\Quix\Application:getAllNodes in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:152 #15 ThemeXpert\Quix\Application:ThemeXpert\Quix\{closure} in /apps/topdata/app/webroot/libraries/gantry5/compat/vendor/pimple/pimple/src/Pimple/Container.php:122 #14 Pimple\Container:offsetGet in /apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php:248 #13 ThemeXpert\Quix\Application:getWebFontsRenderer in /apps/topdata/app/webroot/libraries/quix/app/drivers/joomla/partials/quix-render-item.php:314 #12 QuixRenderItemHelper:loadAssetsClassicBuilder in /apps/topdata/app/webroot/libraries/quix/app/drivers/joomla/partials/quix-render-item.php:155 #11 quixRenderItem in /apps/topdata/app/webroot/components/com_quix/views/page/view.html.php:71 #10 QuixViewPage:display in /apps/topdata/app/webroot/libraries/src/Cache/Controller/ViewController.php:102 #9 Joomla\CMS\Cache\Controller\ViewController:get in /apps/topdata/app/webroot/libraries/src/MVC/Controller/BaseController.php:655 #8 Joomla\CMS\MVC\Controller\BaseController:display in /apps/topdata/app/webroot/components/com_quix/controller.php:79 #7 QuixController:display in /apps/topdata/app/webroot/libraries/src/MVC/Controller/BaseController.php:702 #6 Joomla\CMS\MVC\Controller\BaseController:execute in /apps/topdata/app/webroot/components/com_quix/quix.php:74 #5 require_once in /apps/topdata/app/webroot/libraries/src/Component/ComponentHelper.php:402 #4 Joomla\CMS\Component\ComponentHelper:executeComponent in /apps/topdata/app/webroot/libraries/src/Component/ComponentHelper.php:377 #3 Joomla\CMS\Component\ComponentHelper:renderComponent in /apps/topdata/app/webroot/libraries/src/Application/SiteApplication.php:194 #2 Joomla\CMS\Application\SiteApplication:dispatch in /apps/topdata/app/webroot/libraries/src/Application/SiteApplication.php:233 #1 Joomla\CMS\Application\SiteApplication:doExecute in /apps/topdata/app/webroot/libraries/src/Application/CMSApplication.php:225 #0 Joomla\CMS\Application\CMSApplication:execute in /apps/topdata/app/webroot/index.php:49
Stack frames (41)
40
Symfony\Component\Yaml\Exception\ParseException
/vendor/symfony/yaml/Parser.php360
39
Symfony\Component\Yaml\Parser doParse
/vendor/symfony/yaml/Parser.php537
38
Symfony\Component\Yaml\Parser parseBlock
/vendor/symfony/yaml/Parser.php208
37
Symfony\Component\Yaml\Parser doParse
/vendor/symfony/yaml/Parser.php537
36
Symfony\Component\Yaml\Parser parseBlock
/vendor/symfony/yaml/Parser.php332
35
Symfony\Component\Yaml\Parser doParse
/vendor/symfony/yaml/Parser.php537
34
Symfony\Component\Yaml\Parser parseBlock
/vendor/symfony/yaml/Parser.php332
33
Symfony\Component\Yaml\Parser doParse
/vendor/symfony/yaml/Parser.php97
32
Symfony\Component\Yaml\Parser parse
/vendor/symfony/yaml/Yaml.php80
31
Symfony\Component\Yaml\Yaml parse
/apps/topdata/app/webroot/libraries/quix/src/Config/Loaders/YamlConfigLoader.php26
30
ThemeXpert\Config\Loaders\YamlConfigLoader load
/apps/topdata/app/webroot/libraries/quix/vendor/symfony/config/Loader/DelegatingLoader.php40
29
Symfony\Component\Config\Loader\DelegatingLoader load
/apps/topdata/app/webroot/libraries/quix/src/Config/Loader.php88
28
ThemeXpert\Config\Loader load
/apps/topdata/app/webroot/libraries/quix/src/Config/ConfigBag.php108
27
ThemeXpert\Config\ConfigBag load
/apps/topdata/app/webroot/libraries/quix/src/Config/ConfigBag.php71
26
ThemeXpert\Config\ConfigBag fill
/apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php75
25
ThemeXpert\Quix\Element\ElementBag add
/apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php58
24
call_user_func_array
/apps/topdata/app/webroot/libraries/quix/src/Quix/Element/ElementBag.php58
23
ThemeXpert\Quix\Element\ElementBag load
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php273
22
ThemeXpert\Quix\Application ThemeXpert\Quix\{closure}
/apps/topdata/app/webroot/libraries/quix/src/Quix/Cache.php128
21
ThemeXpert\Quix\Cache getCacheById
/apps/topdata/app/webroot/libraries/quix/src/Quix/Cache.php103
20
ThemeXpert\Quix\Cache fetch
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php300
19
ThemeXpert\Quix\Application getElements
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php110
18
ThemeXpert\Quix\Application ThemeXpert\Quix\{closure}
/compat/vendor/pimple/pimple/src/Pimple/Container.php122
17
Pimple\Container offsetGet
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php198
16
ThemeXpert\Quix\Application getAllNodes
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php152
15
ThemeXpert\Quix\Application ThemeXpert\Quix\{closure}
/compat/vendor/pimple/pimple/src/Pimple/Container.php122
14
Pimple\Container offsetGet
/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php248
13
ThemeXpert\Quix\Application getWebFontsRenderer
/apps/topdata/app/webroot/libraries/quix/app/drivers/joomla/partials/quix-render-item.php314
12
QuixRenderItemHelper loadAssetsClassicBuilder
/apps/topdata/app/webroot/libraries/quix/app/drivers/joomla/partials/quix-render-item.php155
11
quixRenderItem
/apps/topdata/app/webroot/components/com_quix/views/page/view.html.php71
10
QuixViewPage display
/apps/topdata/app/webroot/libraries/src/Cache/Controller/ViewController.php102
9
Joomla\CMS\Cache\Controller\ViewController get
/apps/topdata/app/webroot/libraries/src/MVC/Controller/BaseController.php655
8
Joomla\CMS\MVC\Controller\BaseController display
/apps/topdata/app/webroot/components/com_quix/controller.php79
7
QuixController display
/apps/topdata/app/webroot/libraries/src/MVC/Controller/BaseController.php702
6
Joomla\CMS\MVC\Controller\BaseController execute
/apps/topdata/app/webroot/components/com_quix/quix.php74
5
require_once
/apps/topdata/app/webroot/libraries/src/Component/ComponentHelper.php402
4
Joomla\CMS\Component\ComponentHelper executeComponent
/apps/topdata/app/webroot/libraries/src/Component/ComponentHelper.php377
3
Joomla\CMS\Component\ComponentHelper renderComponent
/apps/topdata/app/webroot/libraries/src/Application/SiteApplication.php194
2
Joomla\CMS\Application\SiteApplication dispatch
/apps/topdata/app/webroot/libraries/src/Application/SiteApplication.php233
1
Joomla\CMS\Application\SiteApplication doExecute
/apps/topdata/app/webroot/libraries/src/Application/CMSApplication.php225
0
Joomla\CMS\Application\CMSApplication execute
/apps/topdata/app/webroot/index.php49
                        } elseif ($allowOverwrite || !isset($data[$key])) {
                            // Spec: Keys MUST be unique; first one wins.
                            // But overwriting is allowed when a merge node is used in current block.
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, $value);
                            } else {
                                $data[$key] = $value;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
                        }
                    }
                } else {
                    $value = $this->parseValue(rtrim($values['value']), $flags, $context);
                    // Spec: Keys MUST be unique; first one wins.
                    // But overwriting is allowed when a merge node is used in current block.
                    if ($allowOverwrite || !isset($data[$key])) {
                        $data[$key] = $value;
                    } else {
                        throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                    }
                }
                if ($isRef) {
                    $this->refs[$isRef] = $data[$key];
                    array_pop($this->refsBeingParsed);
                }
            } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) {
                if (null !== $context) {
                    throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                }
 
                try {
                    return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs);
                } catch (ParseException $e) {
                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                    $e->setSnippet($this->currentLine);
 
                    throw $e;
                }
            } elseif ('{' === $this->currentLine[0]) {
Arguments
  1. "Duplicate key "type" detected at line 23 (near "type: Repeaat Track")."
    
    private function parseBlock(int $offset, string $yaml, int $flags)
    {
        $skippedLineNumbers = $this->skippedLineNumbers;
 
        foreach ($this->locallySkippedLineNumbers as $lineNumber) {
            if ($lineNumber < $offset) {
                continue;
            }
 
            $skippedLineNumbers[] = $lineNumber;
        }
 
        $parser = new self();
        $parser->offset = $offset;
        $parser->totalNumberOfLines = $this->totalNumberOfLines;
        $parser->skippedLineNumbers = $skippedLineNumbers;
        $parser->refs = &$this->refs;
        $parser->refsBeingParsed = $this->refsBeingParsed;
 
        return $parser->doParse($yaml, $flags);
    }
 
    /**
     * Returns the current line number (takes the offset into account).
     *
     * @internal
     */
    public function getRealCurrentLineNb(): int
    {
        $realCurrentLineNumber = $this->currentLineNb + $this->offset;
 
        foreach ($this->skippedLineNumbers as $skippedLineNumber) {
            if ($skippedLineNumber > $realCurrentLineNumber) {
                break;
            }
 
            ++$realCurrentLineNumber;
        }
 
        return $realCurrentLineNumber;
Arguments
  1. "Repeaat Track"
    
  2. 0
    
                } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) {
                    $data[] = new TaggedValue(
                        $subTag,
                        $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags)
                    );
                } else {
                    if (
                        isset($values['leadspaces'])
                        && (
                            '!' === $values['value'][0]
                            || self::preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->trimTag($values['value']), $matches)
                        )
                    ) {
                        // this is a compact notation element, add to next block and parse
                        $block = $values['value'];
                        if ($this->isNextLineIndented()) {
                            $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1);
                        }
 
                        $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags);
                    } else {
                        $data[] = $this->parseValue($values['value'], $flags, $context);
                    }
                }
                if ($isRef) {
                    $this->refs[$isRef] = end($data);
                    array_pop($this->refsBeingParsed);
                }
            } elseif (
                self::preg_match('#^(?P<key>(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P<value>.+))?$#u', rtrim($this->currentLine), $values)
                && (false === strpos($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"]))
            ) {
                if ($context && 'sequence' == $context) {
                    throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename);
                }
                $context = 'mapping';
 
                try {
                    $key = Inline::parseScalar($values['key']);
                } catch (ParseException $e) {
Arguments
  1. 20
    
  2. """
    name: repeat_track\n
    type: switch\n
    type: Repeaat Track\n
    """
    
  3. 0
    
    private function parseBlock(int $offset, string $yaml, int $flags)
    {
        $skippedLineNumbers = $this->skippedLineNumbers;
 
        foreach ($this->locallySkippedLineNumbers as $lineNumber) {
            if ($lineNumber < $offset) {
                continue;
            }
 
            $skippedLineNumbers[] = $lineNumber;
        }
 
        $parser = new self();
        $parser->offset = $offset;
        $parser->totalNumberOfLines = $this->totalNumberOfLines;
        $parser->skippedLineNumbers = $skippedLineNumbers;
        $parser->refs = &$this->refs;
        $parser->refsBeingParsed = $this->refsBeingParsed;
 
        return $parser->doParse($yaml, $flags);
    }
 
    /**
     * Returns the current line number (takes the offset into account).
     *
     * @internal
     */
    public function getRealCurrentLineNb(): int
    {
        $realCurrentLineNumber = $this->currentLineNb + $this->offset;
 
        foreach ($this->skippedLineNumbers as $skippedLineNumber) {
            if ($skippedLineNumber > $realCurrentLineNumber) {
                break;
            }
 
            ++$realCurrentLineNumber;
        }
 
        return $realCurrentLineNumber;
Arguments
  1. """
    - name: audio_mp3_link\n
      type: file-manager\n
      label: MP3 File\n
    \n
    - name: audio_ogg_link\n
      type: file-manager\n
      label: OGG File\n
    \n
    - name: autoplay_audio\n
      type: switch\n
      label: Autoplay\n
    \n
    - name: repeat_track\n
      type: switch\n
      type: Repeaat Track\n
    """
    
  2. 0
    
                    // Merge keys
                } elseif (!isset($values['value']) || '' === $values['value'] || 0 === strpos($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) {
                    // hash
                    // if next line is less indented or equal, then it means that the current value is null
                    if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) {
                        // Spec: Keys MUST be unique; first one wins.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ($allowOverwrite || !isset($data[$key])) {
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, '');
                            } else {
                                $data[$key] = null;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                        }
                    } else {
                        // remember the parsed line number here in case we need it to provide some contexts in error messages below
                        $realCurrentLineNbKey = $this->getRealCurrentLineNb();
                        $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags);
                        if ('<<' === $key) {
                            $this->refs[$refMatches['ref']] = $value;
 
                            if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) {
                                $value = (array) $value;
                            }
 
                            $data += $value;
                        } elseif ($allowOverwrite || !isset($data[$key])) {
                            // Spec: Keys MUST be unique; first one wins.
                            // But overwriting is allowed when a merge node is used in current block.
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, $value);
                            } else {
                                $data[$key] = $value;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
                        }
                    }
Arguments
  1. 5
    
  2. """
    - name: audio_mp3_link\n
      type: file-manager\n
      label: MP3 File\n
    \n
    - name: audio_ogg_link\n
      type: file-manager\n
      label: OGG File\n
    \n
    - name: autoplay_audio\n
      type: switch\n
      label: Autoplay\n
    \n
    - name: repeat_track\n
      type: switch\n
      type: Repeaat Track\n
    """
    
  3. 0
    
    private function parseBlock(int $offset, string $yaml, int $flags)
    {
        $skippedLineNumbers = $this->skippedLineNumbers;
 
        foreach ($this->locallySkippedLineNumbers as $lineNumber) {
            if ($lineNumber < $offset) {
                continue;
            }
 
            $skippedLineNumbers[] = $lineNumber;
        }
 
        $parser = new self();
        $parser->offset = $offset;
        $parser->totalNumberOfLines = $this->totalNumberOfLines;
        $parser->skippedLineNumbers = $skippedLineNumbers;
        $parser->refs = &$this->refs;
        $parser->refsBeingParsed = $this->refsBeingParsed;
 
        return $parser->doParse($yaml, $flags);
    }
 
    /**
     * Returns the current line number (takes the offset into account).
     *
     * @internal
     */
    public function getRealCurrentLineNb(): int
    {
        $realCurrentLineNumber = $this->currentLineNb + $this->offset;
 
        foreach ($this->skippedLineNumbers as $skippedLineNumber) {
            if ($skippedLineNumber > $realCurrentLineNumber) {
                break;
            }
 
            ++$realCurrentLineNumber;
        }
 
        return $realCurrentLineNumber;
Arguments
  1. """
    general:\n
      - name: audio_mp3_link\n
        type: file-manager\n
        label: MP3 File\n
    \n
      - name: audio_ogg_link\n
        type: file-manager\n
        label: OGG File\n
    \n
      - name: autoplay_audio\n
        type: switch\n
        label: Autoplay\n
    \n
      - name: repeat_track\n
        type: switch\n
        type: Repeaat Track\n
    \n
    styles:\n
      - name : element\n
        type : divider\n
        label : Element Style - Apply On Element Body\n
    \n
      - name: margin\n
        type: margin\n
    \n
      - name: padding\n
        type: padding
    """
    
  2. 0
    
                    // Merge keys
                } elseif (!isset($values['value']) || '' === $values['value'] || 0 === strpos($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) {
                    // hash
                    // if next line is less indented or equal, then it means that the current value is null
                    if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) {
                        // Spec: Keys MUST be unique; first one wins.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ($allowOverwrite || !isset($data[$key])) {
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, '');
                            } else {
                                $data[$key] = null;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                        }
                    } else {
                        // remember the parsed line number here in case we need it to provide some contexts in error messages below
                        $realCurrentLineNbKey = $this->getRealCurrentLineNb();
                        $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags);
                        if ('<<' === $key) {
                            $this->refs[$refMatches['ref']] = $value;
 
                            if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) {
                                $value = (array) $value;
                            }
 
                            $data += $value;
                        } elseif ($allowOverwrite || !isset($data[$key])) {
                            // Spec: Keys MUST be unique; first one wins.
                            // But overwriting is allowed when a merge node is used in current block.
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, $value);
                            } else {
                                $data[$key] = $value;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
                        }
                    }
Arguments
  1. 4
    
  2. """
    general:\n
      - name: audio_mp3_link\n
        type: file-manager\n
        label: MP3 File\n
    \n
      - name: audio_ogg_link\n
        type: file-manager\n
        label: OGG File\n
    \n
      - name: autoplay_audio\n
        type: switch\n
        label: Autoplay\n
    \n
      - name: repeat_track\n
        type: switch\n
        type: Repeaat Track\n
    \n
    styles:\n
      - name : element\n
        type : divider\n
        label : Element Style - Apply On Element Body\n
    \n
      - name: margin\n
        type: margin\n
    \n
      - name: padding\n
        type: padding
    """
    
  3. 0
    
     *
     * @throws ParseException If the YAML is not valid
     */
    public function parse(string $value, int $flags = 0)
    {
        if (false === preg_match('//u', $value)) {
            throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename);
        }
 
        $this->refs = [];
 
        $mbEncoding = null;
 
        if (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) {
            $mbEncoding = mb_internal_encoding();
            mb_internal_encoding('UTF-8');
        }
 
        try {
            $data = $this->doParse($value, $flags);
        } finally {
            if (null !== $mbEncoding) {
                mb_internal_encoding($mbEncoding);
            }
            $this->refsBeingParsed = [];
            $this->offset = 0;
            $this->lines = [];
            $this->currentLine = '';
            $this->numberOfParsedLines = 0;
            $this->refs = [];
            $this->skippedLineNumbers = [];
            $this->locallySkippedLineNumbers = [];
            $this->totalNumberOfLines = null;
        }
 
        return $data;
    }
 
    private function doParse(string $value, int $flags)
    {
Arguments
  1. "content"
    
  2. 0
    
     * Parses YAML into a PHP value.
     *
     *  Usage:
     *  <code>
     *   $array = Yaml::parse(file_get_contents('config.yml'));
     *   print_r($array);
     *  </code>
     *
     * @param string $input A string containing YAML
     * @param int    $flags A bit field of PARSE_* constants to customize the YAML parser behavior
     *
     * @return mixed
     *
     * @throws ParseException If the YAML is not valid
     */
    public static function parse(string $input, int $flags = 0)
    {
        $yaml = new Parser();
 
        return $yaml->parse($input, $flags);
    }
 
    /**
     * Dumps a PHP value to a YAML string.
     *
     * The dump method, when supplied with an array, will do its best
     * to convert the array into friendly YAML.
     *
     * @param mixed $input  The PHP value
     * @param int   $inline The level where you switch to inline YAML
     * @param int   $indent The amount of spaces to use for indentation of nested nodes
     * @param int   $flags  A bit field of DUMP_* constants to customize the dumped YAML string
     */
    public static function dump($input, int $inline = 2, int $indent = 4, int $flags = 0): string
    {
        $yaml = new Dumper($indent);
 
        return $yaml->dump($input, $inline, 0, $flags);
    }
}
Arguments
  1. """
    name: Audio\n
    slug: audio\n
    groups: content\n
    form:\n
      general:\n
        - name: audio_mp3_link\n
          type: file-manager\n
          label: MP3 File\n
    \n
        - name: audio_ogg_link\n
          type: file-manager\n
          label: OGG File\n
    \n
        - name: autoplay_audio\n
          type: switch\n
          label: Autoplay\n
    \n
        - name: repeat_track\n
          type: switch\n
          type: Repeaat Track\n
    \n
      styles:\n
        - name : element\n
          type : divider\n
          label : Element Style - Apply On Element Body\n
    \n
        - name: margin\n
          type: margin\n
    \n
        - name: padding\n
          type: padding
    """
    
  2. 0
    
 
class YamlConfigLoader extends FileLoader
{
    /**
     * Load all YML configuration files.
     *
     * @param mixed $resource
     * @param null  $type
     *
     * @return array
     */
    public function load($resource, $type = null)
    {
        $files = $this->getLocator()->locate($resource, null, false);
 
        $elements = [];
 
        foreach ($files as $file) {
            # Parse YML file.
            $config = Yaml::parse(file_get_contents($file));
 
            $elements[$file] = $config;
        }
 
        return $elements;
    }
 
    /**
     * Determines the configuration file is YML or not.
     *
     * @param mixed $resource
     * @param null  $type
     *
     * @return bool
     */
    public function supports($resource, $type = null)
    {
        return is_string($resource) && 'yml' === pathinfo(
            $resource,
            PATHINFO_EXTENSION
Arguments
  1. """
    name: Audio\n
    slug: audio\n
    groups: content\n
    form:\n
      general:\n
        - name: audio_mp3_link\n
          type: file-manager\n
          label: MP3 File\n
    \n
        - name: audio_ogg_link\n
          type: file-manager\n
          label: OGG File\n
    \n
        - name: autoplay_audio\n
          type: switch\n
          label: Autoplay\n
    \n
        - name: repeat_track\n
          type: switch\n
          type: Repeaat Track\n
    \n
      styles:\n
        - name : element\n
          type : divider\n
          label : Element Style - Apply On Element Body\n
    \n
        - name: margin\n
          type: margin\n
    \n
        - name: padding\n
          type: padding
    """
    
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class DelegatingLoader extends Loader
{
    public function __construct(LoaderResolverInterface $resolver)
    {
        $this->resolver = $resolver;
    }
 
    /**
     * {@inheritdoc}
     */
    public function load($resource, $type = null)
    {
        if (false === $loader = $this->resolver->resolve($resource, $type)) {
            throw new FileLoaderLoadException($resource, null, null, null, $type);
        }
 
        return $loader->load($resource, $type);
    }
 
    /**
     * {@inheritdoc}
     */
    public function supports($resource, $type = null)
    {
        return false !== $this->resolver->resolve($resource, $type);
    }
}
 
Arguments
  1. "config.yml"
    
  2. "yml"
    
     * @throws \Symfony\Component\Config\Exception\FileLoaderLoadException
     */
    public function load()
    {
        $elements = [];
 
        // load configuration that has PHP extension.
        try {
            $configs = $this->loader->load('config.php', 'php');
 
            $elements = array_merge($elements, $configs);
        } catch (ConfigFileIsNotAnArray $e) {
            xception($e->getMessage());
        } catch (InvalidArgumentException $e) {
            //xception( $e->getMessage(), 0);
        }
 
        // load configuration that has YML extension.
        try {
            $configs = $this->loader->load('config.yml', 'yml');
            $elements = array_merge($elements, $configs);
        } catch (ConfigFileIsNotAnArray $e) {
            xception($e->getMessage());
        } catch (InvalidArgumentException $e) {
            //xception( $e->getMessage(), 0);
        }
 
        $elements = $this->transform($elements);
 
        return $elements;
    }
 
    /**
     * Get all directories of the given path.
     *
     * @param $path
     *
     * @return array
     */
    protected function directories($path)
Arguments
  1. "config.yml"
    
  2. "yml"
    
    public function getConfigs()
    {
        $configs = $this->finalTransformer->transform($this->configs);
 
        return $configs;
    }
 
    /**
     * Load elements.
     *
     * @param $path
     * @param $url
     *
     * @return array
     */
    protected function load($path, $url)
    {
        $loader = new Loader($path, $url);
 
        return $loader->load();
    }
 
    /**
     * Validating the configuration file.
     *
     * @param $configs
     *
     * @return mixed
     */
    protected function validate($configs)
    {
        $configs = array_reduce($configs, function ($carry, $config) {
            $this->validator->validate($config, $config['file']);
 
            return $carry;
        }, []);
 
        return $configs;
    }
 
        $this->finalTransformer = $finalTransformer;
    }
 
    /**
     * Fill up the configuration array.
     *
     * @param $path
     * @param $url
     * @param $groups
     *
     * @return $this
     * @throws DirectoryNotFoundException
     */
    public function fill($path, $url, $groups)
    {
        if (!is_dir($path)) {
            throw new DirectoryNotFoundException("directory `{$path}` was not found in filesystem");
        }
 
        $configs = $this->load($path, $url);
 
        $this->validate($configs);
 
        $configs = $this->transform($configs, $path);
 
        $configs = $this->setGroups($configs, $groups);
 
        $this->configs = array_merge($this->configs, $configs);
 
        return $this;
    }
 
    /**
     * Get configuration.
     *
     * @return array
     */
    public function getConfigs()
    {
        $configs = $this->finalTransformer->transform($this->configs);
Arguments
  1. "/apps/topdata/app/webroot/libraries/quix/app/elements"
    
  2. "/libraries/quix/app/elements"
    
    {
        foreach ($this->pathBags as $bag) {
            call_user_func_array([$this, 'add'], $bag);
        }
       
        return $this;
    }
    /**
     * Adding bag to the config bag.
     *
     * @param       $path
     * @param       $url
     * @param array $group
     *
     * @return $this
     */
    public function add($path, $url, $group = [])
    {
        try {
            $this->configBag->fill($path, $url, $group);
        } catch (DirectoryNotFoundException $e) {
            xception($e->getMessage());
        }
        return $this;
    }
    /**
     * Get config bag instance.
     *
     * @return ConfigBag
     */
    public function getConfigBag()
    {
        return $this->configBag;
    }
}
Arguments
  1. "/apps/topdata/app/webroot/libraries/quix/app/elements"
    
  2. "/libraries/quix/app/elements"
    
  3. []
    
     * @param       $path
     * @param       $url
     * @param array $groups
     */
    public function fill($path, $url, $groups = [], $builder = '')
    {
        if(!$builder && $this->builder == 'frontend') return;
 
        $this->pathBags[] = compact("path", "url", "groups");
    }
 
    /**
     * Adding all path bags to the config bag.
     *
     * @return $this
     */
    public function load()
    {
        foreach ($this->pathBags as $bag) {
            call_user_func_array([$this, 'add'], $bag);
        }
       
        return $this;
    }
    /**
     * Adding bag to the config bag.
     *
     * @param       $path
     * @param       $url
     * @param array $group
     *
     * @return $this
     */
    public function add($path, $url, $group = [])
    {
        try {
            $this->configBag->fill($path, $url, $group);
        } catch (DirectoryNotFoundException $e) {
            xception($e->getMessage());
        }
Arguments
  1. "/apps/topdata/app/webroot/libraries/quix/app/elements"
    
  2. "/libraries/quix/app/elements"
    
  3. []
    
     * @param       $path
     * @param       $url
     * @param array $groups
     */
    public function fill($path, $url, $groups = [], $builder = '')
    {
        if(!$builder && $this->builder == 'frontend') return;
 
        $this->pathBags[] = compact("path", "url", "groups");
    }
 
    /**
     * Adding all path bags to the config bag.
     *
     * @return $this
     */
    public function load()
    {
        foreach ($this->pathBags as $bag) {
            call_user_func_array([$this, 'add'], $bag);
        }
       
        return $this;
    }
    /**
     * Adding bag to the config bag.
     *
     * @param       $path
     * @param       $url
     * @param array $group
     *
     * @return $this
     */
    public function add($path, $url, $group = [])
    {
        try {
            $this->configBag->fill($path, $url, $group);
        } catch (DirectoryNotFoundException $e) {
            xception($e->getMessage());
        }
Arguments
  1. array:2 [
      0 => ElementBag {}
      1 => "add"
    ]
    
  2. array:3 [
      "path" => "/apps/topdata/app/webroot/libraries/quix/app/elements"
      "url" => "/libraries/quix/app/elements"
      "groups" => []
    ]
    
     * @return mixed
     */
    public function getNodes()
    {
        return $this->cache->fetch('nodes', function () {
            return $this->getNodesBag()->load()->getConfigBag()->getConfigs();
        });
    }
 
    /**
     * Get elements.
     *
     * [IMPORTANT] This method need to decouple. So that, the application can work with other platform.
     *
     * @return mixed
     */
    public function getElements()
    {
        return $this->cache->fetch('elements', function () {
            $elements = $this->getElementsBag()->load()->getConfigBag()->getConfigs();
 
            $elementsInfo = qxGetElementsInfo();
 
            $elementsInfo = array_reduce($elementsInfo, function ($carry, $element) {
                $carry[$element->alias] = (array)$element; // must be send as alias
 
                return $carry;
            }, []);
 
            $elements = array_map(function ($element) use ($elementsInfo) {
                if (array_key_exists($element['slug'], $elementsInfo)) {
                    $checked = $elementsInfo[$element['slug']]['status'];
                } else {
                    if (in_array($element['slug'], $this->disabledElements)) {
                        $checked = false;
                    } else {
                        $checked = true;
                    }
                }
 
     *
     * @param $id
     * @param $callback
     *
     * @return mixed
     */
    protected function getCacheById($id, $callback)
    {
        $id = $id . $this->builder;
 
        if (!$this->shouldCache) {
            return $callback();
        } else {
            $cache = $this->cache->get($id, 'lib_quix');
 
            if($cache){
                return $cache;
            }else{
 
                $data = $callback();
                // $this->cache->store($data, $id, 'quix'); // old way
                $this->cache->store($data, $id, $this->cachePath); // new path with v2 support
 
                return $data;
            }
            
            // if ($this->cache->contains($id)) {
            //     return $this->cache->fetch($id);
            // } else {
            //     $data = $callback();
            //     $this->cache->save($id, $data, $this->cacheLifeTime);
 
            //     return $data;
            // }
        }
    }
}
 
    }
 
    /**
     * Get cache details by ID.
     *
     * @param $id
     *
     * @return mixed
     */
    public function fetch($id)
    {
        $id = $id . $this->builder;
        $args = func_get_args();
 
        if (count($args) === 1) {
            // return $this->cache->fetch($id);
            return $this->cache->get($id, 'lib_quix');
        } else {
            $callback = $args[1];
            return $this->getCacheById($id, $callback);
        }
    }
 
    /**
     * Get Cache by id.
     *
     * @param $id
     * @param $callback
     *
     * @return mixed
     */
    protected function getCacheById($id, $callback)
    {
        $id = $id . $this->builder;
 
        if (!$this->shouldCache) {
            return $callback();
        } else {
            $cache = $this->cache->get($id, 'lib_quix');
 
Arguments
  1. "elementsclassicclassic"
    
  2. Closure {
      class: "ThemeXpert\Quix\Application"
      this: Application { …}
      file: "/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php"
      line: "272 to 300"
    }
    
            }, []);
 
            $elements = array_map(function ($element) use ($elementsInfo) {
                if (array_key_exists($element['slug'], $elementsInfo)) {
                    $checked = $elementsInfo[$element['slug']]['status'];
                } else {
                    if (in_array($element['slug'], $this->disabledElements)) {
                        $checked = false;
                    } else {
                        $checked = true;
                    }
                }
 
                $element['enabled'] = $checked;
 
                return $element;
            }, $elements);
 
            return $elements;
        });
    }
 
    /**
     * Get elements json.
     *
     * [IMPORTANT] This method need to decouple. So that, the application can work with other platform.
     *
     * @return mixed
     */
    public function getElementsJson()
    {
        return $this->cache->fetch('json_elements', function () {
            return json_encode($this->getElements());
        });
    }
 
    /**
     * loading shape divider svg
     *
     * @return mixed
Arguments
  1. "elementsclassic"
    
  2. Closure {
      class: "ThemeXpert\Quix\Application"
      this: Application { …}
      file: "/apps/topdata/app/webroot/libraries/quix/src/Quix/Application.php"
      line: "272 to 300"
    }
    
 
            return new ElementBag($validator, $transformer, $container['finalConfigTransformer'], $builder);
        };
 
        // Bind nodes with the container
        $this->container['nodes'] = function ($container) use ($builder) {
            $validator = new NodeValidator();
            $transformer = new NodeTransformer(new FormEngine(new ControlsTransformer($builder)), $builder);
 
            return new NodeBag($validator, $transformer, $container['finalConfigTransformer'], $builder);
        };
 
        // Bind presets with the container
        $this->container['presets'] = function ($container) {
            return new Library();
        };
 
        // Bind allNodes with the container
        $this->container['allNodes'] = function ($container) {
            $elements = $this->getElements();
            $nodes = $this->getNodes();
            return array_merge($elements, $nodes);
        };
 
        // Bind mobile detect with the container
        $this->container['mobile_detect'] = function ($container) {
            return new Mobile_Detect();
        };
 
        // Bind view with the container
        $this->container['view'] = function ($container) use ($builder) {
            // if( checkQuixIsVersion2() && ($builder == "frontend") ) {
            if ($builder == 'frontend') {
                return new View(new TwigEngine, $builder);
            } else {
                return new View(new PhpEngine, $builder);
            }
        };
 
        // Bind view renderer with the container
    {
        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
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($id)
    {
        return isset($this->keys[$id]);
    }
 
Arguments
  1. Container {}
    
    }
 
    /**
     * Get presents bag.
     *
     * @return mixed
     */
    public function getPresetsBag()
    {
        return $this->container['presets'];
    }
 
    /**
     * Get all nodes.
     *
     * @return mixed
     */
    public function getAllNodes()
    {
        return $this->container['allNodes'];
    }
 
    /**
     * Get view renderer.
     *
     * @return mixed
     */
    public function getViewRenderer()
    {
        return $this->container['viewRenderer'];
    }
 
    /**
     * Get template renderer.
     *
     * @return mixed
     */
    public function getTemplateRenderer()
    {
        return $this->container['templateRenderer'];
Arguments
  1. "allNodes"
    
        };
 
        // Bind style renderer with the container
        $this->container['styleRenderer'] = function ($container) {
            return new StyleRenderer($container['view'], $container['mobile_detect'], $container['allNodes']);
        };
 
        // Bind script renderer with the container
        $this->container['scriptRenderer'] = function ($container) {
            return new ScriptRenderer($container['view'], $container['mobile_detect'], $container['allNodes']);
        };
 
        // Bind template renderer with the container
        $this->container['templateRenderer'] = function ($container) {
            return new TemplateRenderer($container['view'], $container['mobile_detect'], $container['allNodes']);
        };
 
        // Bind web font renderer with the container
        $this->container['webFontsRenderer'] = function ($container) {
            return new WebFontsRenderer($this->cache, $this->getAllNodes());
        };
 
        // Bind view engine tracker with the container
        $this->container['engineTracker'] = function () {
            return new EngineTracker;
        };
    }
 
    /**
     * Get element bag.
     *
     * @return mixed
     */
    public function getElementsBag()
    {
        return $this->container['elements'];
    }
 
    /**
     * Get nodes bag.
    {
        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
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($id)
    {
        return isset($this->keys[$id]);
    }
 
Arguments
  1. Container {}
    
    }
 
    /**
    * Get script renderer.
    *
    * @return mixed
    */
    public function getScriptRenderer()
    {
        return $this->container['scriptRenderer'];
    }
 
    /**
     * Get web fonts renderer.
     *
     * @return mixed
     */
    public function getWebFontsRenderer()
    {
        return $this->container['webFontsRenderer'];
    }
 
    /**
     * Get nodes.
     *
     * @return mixed
     */
    public function getNodes()
    {
        return $this->cache->fetch('nodes', function () {
            return $this->getNodesBag()->load()->getConfigBag()->getConfigs();
        });
    }
 
    /**
     * Get elements.
     *
     * [IMPORTANT] This method need to decouple. So that, the application can work with other platform.
     *
     * @return mixed
Arguments
  1. "webFontsRenderer"
    
            }
        }
 
        if (JDEBUG) {
            \JProfiler::getInstance('Application')->mark('After loading core CSS (' . $item->builder . ')');
        }
    }
 
    public static function loadAssetsClassicBuilder($quix, $data, $item, $type, $pageModifiedTimeStamp)
    {
        if (JDEBUG) {
            \JProfiler::getInstance('Application')->mark('Before loading assets (' . $item->builder . ')');
        }
        $document = \JFactory::getDocument();
 
        // classic builder codes start
        loadClassicBuilderPreviewAssets();
        plgSystemQuix::addQuixTrapCSSclassic();
 
        $webFontsRenderer = $quix->getWebFontsRenderer();
        $fonts = $webFontsRenderer->getUsedFonts($data);
        $fontsWeight = $webFontsRenderer->getUsedFontsWeight();
 
        Assets::bulkCssMinifier(
            $pageModifiedTimeStamp,
            $quix->getStyleRenderer()->render($data, null, $item->builder),
            $type,
            $item->id
        );
 
        if (count($fonts)) {
            /**
             * Dynamically generate font families name string.
             */
            $fontFamilies = '';
 
            $count = count($fonts);
 
            foreach ($fonts as $font) {
                $weights = isset($fontsWeight[$font])
            if (strlen($jsCotent) > 2) {
                Assets::bulkJsMinifier($pageModifiedTimeStamp . '-fileJS' . $type . $item->id, $jsCotent, $type, $item->id);
            }
        } else {
            $scriptRendared = $quix->getScriptRenderer()->render($data, null, $item->builder);
            $scriptRendared = QuixRenderItemHelper::minimizeJavascriptSimple($scriptRendared);
 
            // var_dump($scriptRendared);die;
            if (strlen($scriptRendared) > 8) { // as less then 8 not seems possible
                $scripts = "(function(){{$scriptRendared}}());";
                file_put_contents(get_compiled_js_path() . "{$compiledJs}", $scripts);
 
                Assets::bulkJsMinifier($pageModifiedTimeStamp . '-script', $scripts, $type, $item->id);
            }
            // Assets::load($item->builder);
        }
 
        // ======= visual builder codes end
    } else {
        QuixRenderItemHelper::loadAssetsClassicBuilder($quix, $data, $item, $type, $pageModifiedTimeStamp);
    } ?>
        <?php
    if (JDEBUG) {
        \JProfiler::getInstance('Application')->mark('Before making view (' . $item->builder . ')');
    } ?>
 
        <?php echo $quix->getViewRenderer()->render($data, null, $item->builder); ?>
 
        <?php
    if (JDEBUG) {
        \JProfiler::getInstance('Application')->mark('After making view (' . $item->builder . ')');
    } ?>
    </div>
</div>
<?php
 
    if ($item->builder == 'frontend' && !empty($code)) {
        Assets::bulkJsMinifier($pageModifiedTimeStamp . '-loadGlobalStyles' . $type . $item->id, ";(function(){ if(typeof loadGlobalStyles == 'function') loadGlobalStyles($code); })();", $type, $item->id);
        // $document->addScriptDeclaration(";(function(){ if(typeof loadGlobalStyles == 'function') loadGlobalStyles($code); })();");
    }
Arguments
  1. Application {}
    
  2. array:2 [
      0 => array:4 [
        "visibility" => array:4 [
          "lg" => true
          "md" => true
          "sm" => true
          "xs" => true
        ]
        "form" => array:2 [
          "general" => array:8 [
            "container" => false
            "bg_image" => ""
            "image_repeat" => "no-repeat"
            "image_position" => "initial"
            "image_size" => "initial"
            "bg_color" => ""
            "bg_parallax" => false
            "padding" => array:4 [
              "top" => ""
              "left" => ""
              "bottom" => ""
              "right" => ""
            ]
          ]
          "advanced" => array:3 [
            "label" => "Section"
            "id" => "qx-node-261"
            "class" => ""
          ]
        ]
        "slug" => "section"
        "children" => array:2 [
          0 => array:4 [
            "visibility" => array:4 [
              "lg" => true
              "md" => true
              "sm" => true
              "xs" => true
            ]
            "form" => array:2 [
              "general" => array:10 [
                "container" => true
                "bg_image" => ""
                "equal_column" => false
                "image_size" => "initial"
                "bg_color" => ""
                "image_position" => "initial"
                "margin" => array:4 [
                  "top" => ""
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "padding" => array:4 [
                  "top" => ""
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "bg_parallax" => false
                "image_repeat" => "no-repeat"
              ]
              "advanced" => array:3 [
                "label" => "Row"
                "id" => "qx-node-872"
                "class" => ""
              ]
            ]
            "slug" => "row"
            "children" => array:1 [
              0 => array:5 [
                "visibility" => array:4 [
                  "lg" => true
                  "md" => true
                  "sm" => true
                  "xs" => true
                ]
                "form" => array:2 [
                  "general" => array:8 [
                    "center_text" => false
                    "bg_image" => ""
                    "image_repeat" => "no-repeat"
                    "image_position" => "initial"
                    "image_size" => "initial"
                    "bg_color" => ""
                    "margin" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                    "padding" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                  ]
                  "advanced" => array:3 [
                    "label" => "Column"
                    "id" => "qx-node-863"
                    "class" => ""
                  ]
                ]
                "slug" => "column"
                "children" => array:1 [
                  0 => array:3 [
                    "visibility" => array:4 [
                      "lg" => true
                      "md" => true
                      "sm" => true
                      "xs" => true
                    ]
                    "form" => array:3 [
                      "general" => array:3 [
                        "alignment" => "center"
                        "content" => """
                          <h1>Les articles de Topdata</h1>\n
                          <h4>Voici quelques informations synthétiques, pour vous transmettre le résultat de nos analyses, <br />de nos rencontres et des évolutions que nous constatons dans le métier de fundraiser.<br /><br />Bonne lecture !</h4>
                          """
                        "animation" => "fadeIn"
                      ]
                      "styles" => array:9 [
                        "bg_image" => ""
                        "image_size" => "initial"
                        "bg_color" => ""
                        "image_position" => "initial"
                        "margin" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "font" => array:8 [
                          "size" => ""
                          "bold" => ""
                          "underline" => ""
                          "italic" => ""
                          "family" => ""
                          "case" => ""
                          "spacing" => ""
                          "height" => "1.5em"
                        ]
                        "padding" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "text_color" => ""
                        "image_repeat" => "no-repeat"
                      ]
                      "advanced" => array:3 [
                        "label" => "Text"
                        "id" => "qx-node-554"
                        "class" => ""
                      ]
                    ]
                    "slug" => "text"
                  ]
                ]
                "size" => array:4 [
                  "lg" => 1
                  "md" => 1
                  "sm" => 0.5
                  "xs" => 1
                ]
              ]
            ]
          ]
          1 => array:4 [
            "visibility" => array:4 [
              "lg" => true
              "md" => true
              "sm" => true
              "xs" => true
            ]
            "form" => array:2 [
              "general" => array:10 [
                "container" => true
                "bg_image" => ""
                "equal_column" => false
                "image_size" => "initial"
                "bg_color" => ""
                "image_position" => "initial"
                "margin" => array:4 [
                  "top" => ""
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "padding" => array:4 [
                  "top" => ""
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "bg_parallax" => false
                "image_repeat" => "no-repeat"
              ]
              "advanced" => array:3 [
                "label" => "Row"
                "id" => "qx-node-955"
                "class" => ""
              ]
            ]
            "slug" => "row"
            "children" => array:1 [
              0 => array:5 [
                "visibility" => array:4 [
                  "lg" => true
                  "md" => true
                  "sm" => true
                  "xs" => true
                ]
                "form" => array:2 [
                  "general" => array:8 [
                    "center_text" => false
                    "bg_image" => ""
                    "image_repeat" => "no-repeat"
                    "image_position" => "initial"
                    "image_size" => "initial"
                    "bg_color" => ""
                    "margin" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                    "padding" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                  ]
                  "advanced" => array:3 [
                    "label" => "Column"
                    "id" => "qx-node-516"
                    "class" => ""
                  ]
                ]
                "slug" => "column"
                "children" => array:1 [
                  0 => array:3 [
                    "visibility" => array:4 [
                      "lg" => true
                      "md" => true
                      "sm" => true
                      "xs" => true
                    ]
                    "form" => array:3 [
                      "general" => array:3 [
                        "accordions" => array:6 [
                          0 => array:4 [
                            "title" => "Les pétitions en ligne, une opportunité à explorer..."
                            "content" => """
                              <p>Créer une pétition en ligne pour sensibiliser à votre cause est aujourd'hui <strong>facile et accessible en un clic</strong>.</p>\n
                              <p>Les plateformes se multiplient et sont de plus en plus dynamiques.<br />Mais avant de vous lancer, assurez-vous que vous pourrez gérer vos pétitionnaires.<br /><br />Trop nombreuses sont les associations qui rassemblent des milliers voire des dizaines de milliers de signataires, mais qui, dépassées par le manque de solution informatique, ne peuvent gérer cet afflux de sympathisants.<br /><br />Imaginez le nombre de donateurs potentiels qui sont ainsi perdus !<br /><br />A contrario, beaucoup de signataires seront surement déjà dans votre base et il serait malvenu de les traiter en "prospects".<br />D'où l'utilité d'une base de données multi-canal.</p>\n
                              <p>Sachez que TopDon comporte des modules d'import de données et de gestion des pétitions, parfaitement adaptés aux campagnes multi-canal. Qu'ils soient issus de mailing papier ou de plateformes internet, vous retrouvez dans votre CRM vos pétitionnaires dédoublonnés, avec une information complète sur les causes pour lesquelles ils se sont engagés.</p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                          1 => array:4 [
                            "title" => "Pourquoi s'équiper d'un outil CRM ?"
                            "content" => """
                              <h2>CRM ou GRC</h2>\n
                              <p>Le CRM (Customer Relationship Management) ou GRC en français (Gestion de la Relation Client) est une solution structurante qui permet de mieux comprendre les donateurs et les différents contacts de votre organisation :</p>\n
                              <p>Depuis quand est-il en contact avec l'association ou la fondation ? A quels thèmes est-il plus ou moins sensible ? Combien de dons a-t-il fait dans l'année ? Accepte-t-il d'être appelé au téléphone ? Ouvre-t-il les emails envoyés par l'association ? Vous a-t-il envoyé des courriers ? A-t-il des demandes particulières en matière de rythme ou de canal de communication ? Etc, etc, etc.</p>\n
                              <p>Cette somme d'informations, détaillée et facile d'accès, permet d'adapter vos communications aux demandes et comportements de vos membres.</p>\n
                              <p>Avec un outil CRM vous augmentez l'individualisation de la relation avec vos membres et diminuez le temps passé à gérer cette relation, grâce à des outils simples et efficaces.</p>\n
                              <p>Cette individualisation permet une communication personnalisée qui augmente la satisfaction des donateurs. Donc, contribue à une plus grande fidélisation.</p>\n
                              <p>Petites, moyennes ou grandes organisations, une solution existe pour chaque taille de structure et s'adapte à tous les budgets.</p>\n
                              <p>Profitez de la nouvelle version de Topdon pour vous équiper d'un outil CRM efficace et gérez au mieux votre relation donateurs et votre collecte de fonds.</p>\n
                              <p> </p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                          2 => array:4 [
                            "title" => "Spécial reçus fiscaux."
                            "content" => """
                              <h2>Quand et comment faut-il envoyer le reçu fiscal aux donateurs ?</h2>\n
                              <p>Janvier… mois des reçus fiscaux annuels.</p>\n
                              <p>Et l'occasion, peut-être, pour votre organisation de revoir sa procédure d'envoi de ces courriers certes administratifs, mais pas uniquement.</p>\n
                              <p>Avec cette question toute simple : quand, comment et sous quelle forme faut-il envoyer les reçus fiscaux aux donateurs ?</p>\n
                              <p>Après chaque don ? Le jour même de la réception du don pour choyer les grands donateurs ? Une fois par an seulement, pour regrouper tous les dons de votre donateur, qu'ils soient par chèque, carte bancaire ou prélèvement ? Par courrier ou en pdf, par e-mail ?</p>\n
                              <p>Il n'y a pas de règle sur ce sujet, mais des usages.</p>\n
                              <p>Si votre organisation émet une lettre de remerciement à chaque réception de don, et si votre donateur n'en fait pas la demande expresse, vous pouvez attendre pour lui envoyer son reçu fiscal.</p>\n
                              <p>A l'inverse, si vous n'avez pas intégré dans votre processus l'envoi d'une lettre de remerciement, n'attendez pas pour faire savoir à votre donateur que vous avez bien reçu son don et envoyez-lui son reçu fiscal.</p>\n
                              <p>Ce qui prime avant tout, c'est de respecter au mieux le choix des donateurs. Et ce n'est pas toujours facile.</p>\n
                              <p>Certains veulent un reçu fiscal après chaque don, d'autres une fois par an ; par e-mail pour certains et par courrier pour d'autres. Et il y a ceux qui ne veulent pas de reçu fiscal du tout... Sans oublier les donateurs qui vous appelleront car ils n'ont pas reçu ou perdu leur reçu fiscal et qui vous demanderont un duplicata. Tout cela dans un format imposé par la règlementation fiscale avec l'obligation de pouvoir justifier des reçus fiscaux que vous avez émis, en cas de contrôle par l'administration.</p>\n
                              <p>Prendre en compte tous les cas particuliers peut vite devenir une usine à gaz !</p>\n
                              <p>Alors, pour que cette tâche administrative devienne simple comme un clic, assurez-vous d'avoir un outil de gestion de base de données offrant le plus large choix possible pour la production des reçus fiscaux.</p>\n
                              <p>La présence d'une bibliothèque de modèles permettant d'accompagner votre reçu d'une petite lettre adaptée au projet que votre donateur a soutenu, ou pour remercier plus particulièrement un grand donateur ou un nouveau donateur, sera une aide appréciable.</p>\n
                              <p>Et tous ces détails ne doivent pas faire oublier l'essentiel : envoyer les reçus fiscaux annuels bien avant la date butoir des déclarations de revenus imposée par l'administration fiscale...</p>\n
                              <p> </p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                          3 => array:4 [
                            "title" => "Confiez votre fichier donateurs en toute sécurité."
                            "content" => """
                              <p>Truc et astuces pour assurer vos données et suivre méthodiquement leur parcours.</p>\n
                              <p>- livrer le fichier d'adresses sous un format protégé par un mot de passe (ZIP, EXCEL, etc..).<br />- fournir le mot de passe dans un email séparé.<br />- changer le mot de passe, idéalement à chaque nouvelle extraction du fichier, en tout cas très régulièrement.<br />- introduire des adresses-pièges (une personne dont le nom est déformé) dans le fichier.<br />- en mettre au moins cinq à dix selon la taille du fichier livré.<br />- rendre les adresses-pièges "spécifiques" : à chaque fichier livré, les pièges sont changés (avec une déformation spécifique), rendant l'utilisation de l'adresse parfaitement identifiable<br />- avoir des adresses-pièges en entreprise.<br />- avoir des adresses-pièges dans différents départements.<br />- rendre vos adresses-pièges indétectables dans votre fichier.</p>\n
                              <p><strong>Et surtout, faire savoir, que le fichier contient des pièges !</strong> <br /><br /><br />Votre système de gestion de bases de données doit vous permettre de retrouver facilement le fichier qui contient l'adresse piège que vous avez reçue. Vous saurez ainsi si l'utilisation de votre fichier est licite ou pas. </p>\n
                              <p> </p>\n
                              <p> </p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                          4 => array:4 [
                            "title" => "La gestion du don et du donateur au cœur de votre organisation"
                            "content" => """
                              <h2>La gestion du don et du donateur au coeur de votre organisation ....</h2>\n
                              <p>Le 14 octobre 2014, la conférence qu’a tenue Frédéric Beghi, dirigeant et associé de Topdata, sur la gestion du don et du donateur au cœur de votre organisation a permis d’évoquer les 1001 cas rencontrés dans la gestion des donateurs par les organisations, comme :</p>\n
                              <p>- les dons avec cotisation<br />- la gestion des reçus fiscaux<br />- le suivi personnalisé des donateurs<br />- l'encaissement des dons et la ventilation<br />- les remises d'encaissement sur plusieurs banques<br />- l'interface avec la comptabilité<br />- l'historisation des contacts avec les membres<br />- le prélèvement SEPA<br />- les dons par internet...</p>\n
                              <p>Il y a présenté le parcours du don et du donateur, au cœur de la solution de gestion de base de données évolutive Topdon, qui a déjà accompagné la croissance d'associations passant, en quelques années, de quelques centaines de donateurs à près de… deux millions de sympathisants !<br /><br /></p>\n
                              <p> <img src="images/topdata/Confrence-donateurs-et-gestion-des-dons-Frdric-BEGHI.png" alt="Conférence donateurs et gestion des dons Frédéric BEGHI" /></p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                          5 => array:4 [
                            "title" => "Accélérez votre collecte de dons sur internet"
                            "content" => """
                              <h2>Le don récurrent par carte bancaire</h2>\n
                              <p>Toutes les associations qui ont mis en place les <strong>prélèvements automatiques</strong> pour leur collecte en ont vu les effets incroyablement positifs : au fil des années, un cœur de donateurs fidélisés qui monte, qui monte… et un coût de collecte qui baisse, qui baisse...</p>\n
                              <p>Aujourd’hui, l’équivalent existe pour la collecte de don sur internet : <strong>c’est le don régulier par carte bancaire</strong>.<br /><br />D'un simple clic, sur votre page internet de collecte, votre donateur choisit la périodicité et le montant du don qu'il souhaite voir régulièrement prélevé sur sa carte.<span style="text-decoration: underline;"> Ce montant sera ensuite versé sur le compte de votre association jusqu'à expiration de la date de validité de la carte bancaire</span>.<br /><br />C’est un outil de collecte d’une efficacité remarquable, capable de booster votre collecte de dons sur internet. A condition d’être capable de gérer facilement ces dons récurrents dans votre base de données.</p>\n
                              <p>Alors, aujourd’hui, pas d’hésitation ! Equipez-vous d’une solution de gestion qui intègre les dons réguliers par carte bancaire.</p>\n
                              <p>Partez à la conquête de vos donateurs réguliers sur internet et laissez Topdon gérer l’intendance…<br /><br /></p>
                              """
                            "enable_icon" => false
                            "icon" => ""
                          ]
                        ]
                        "type" => "accordion"
                        "animation" => "fadeIn"
                      ]
                      "styles" => array:7 [
                        "header_font" => array:8 [
                          "size" => "20px"
                          "bold" => true
                          "underline" => ""
                          "italic" => ""
                          "family" => "Lato"
                          "case" => ""
                          "spacing" => ""
                          "height" => ""
                        ]
                        "header_bg_color" => "#959595"
                        "header_text_color" => "#FFFFFF"
                        "body_font" => array:8 [
                          "size" => "15px"
                          "bold" => ""
                          "underline" => ""
                          "italic" => ""
                          "family" => "Default"
                          "case" => ""
                          "spacing" => ""
                          "height" => ""
                        ]
                        "body_bg_color" => ""
                        "body_text_color" => "#666666"
                        "border_color" => ""
                      ]
                      "advanced" => array:3 [
                        "label" => "Accordion"
                        "id" => "qx-node-757"
                        "class" => ""
                      ]
                    ]
                    "slug" => "accordion"
                  ]
                ]
                "size" => array:4 [
                  "lg" => 1
                  "md" => 1
                  "sm" => 0.5
                  "xs" => 1
                ]
              ]
            ]
          ]
        ]
      ]
      1 => array:4 [
        "visibility" => array:4 [
          "lg" => true
          "md" => true
          "sm" => true
          "xs" => true
        ]
        "form" => array:2 [
          "general" => array:8 [
            "container" => false
            "bg_image" => ""
            "image_repeat" => "no-repeat"
            "image_position" => "initial"
            "image_size" => "initial"
            "bg_color" => ""
            "bg_parallax" => false
            "padding" => array:4 [
              "top" => ""
              "left" => ""
              "bottom" => ""
              "right" => ""
            ]
          ]
          "advanced" => array:3 [
            "label" => "Section"
            "id" => "qx-node-488"
            "class" => ""
          ]
        ]
        "slug" => "section"
        "children" => array:1 [
          0 => array:4 [
            "visibility" => array:4 [
              "lg" => true
              "md" => true
              "sm" => true
              "xs" => true
            ]
            "form" => array:2 [
              "general" => array:10 [
                "container" => false
                "bg_image" => ""
                "equal_column" => false
                "image_size" => "initial"
                "bg_color" => "#F2F2F2"
                "image_position" => "initial"
                "margin" => array:4 [
                  "top" => "20px"
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "padding" => array:4 [
                  "top" => ""
                  "left" => ""
                  "bottom" => ""
                  "right" => ""
                ]
                "bg_parallax" => false
                "image_repeat" => "no-repeat"
              ]
              "advanced" => array:3 [
                "label" => "Row"
                "id" => "qx-node-319"
                "class" => ""
              ]
            ]
            "slug" => "row"
            "children" => array:1 [
              0 => array:5 [
                "visibility" => array:4 [
                  "lg" => true
                  "md" => true
                  "sm" => true
                  "xs" => true
                ]
                "form" => array:2 [
                  "general" => array:8 [
                    "center_text" => true
                    "bg_image" => ""
                    "image_repeat" => "no-repeat"
                    "image_position" => "initial"
                    "image_size" => "initial"
                    "bg_color" => ""
                    "margin" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                    "padding" => array:4 [
                      "top" => ""
                      "left" => ""
                      "bottom" => ""
                      "right" => ""
                    ]
                  ]
                  "advanced" => array:3 [
                    "label" => "Column"
                    "id" => "qx-node-4310"
                    "class" => ""
                  ]
                ]
                "slug" => "column"
                "children" => array:1 [
                  0 => array:3 [
                    "visibility" => array:4 [
                      "lg" => true
                      "md" => true
                      "sm" => true
                      "xs" => true
                    ]
                    "form" => array:3 [
                      "general" => array:11 [
                        "alignment" => "center"
                        "animation" => 0
                        "placement" => "beforeTitle"
                        "image_alt_text" => ""
                        "animation_delay" => 0.1
                        "title" => "Vous souhaitez en savoir plus ?"
                        "content" => """
                          <h4>Si ces articles ont fait écho à des questions que vous vous êtes déjà posées<br />et que vous souhaitez disposer de pistes de réflexion supplémentaires, alors</h4>\n
                          <h4>n'hésitez pas à nous contacter :</h4>\n
                          <h4>Par téléphone : <strong>04 67 73 12 85</strong></h4>\n
                          <h4>Par email : <a style="color: #666666;" href="mailto:contact@topdata.fr">contact@topdata.fr</a></h4>\n
                          <h4>Ou envoyez nous un message <strong><a style="color: #666666;" title="Envoyez un message à Topdata" href="../#to_contact">via notre formulaire</a></strong></h4>\n
                          <p> </p>\n
                          <p> </p>
                          """
                        "icon" => "fa fa-user"
                        "link" => array:2 [
                          "url" => "https://topdon.fr/#contact"
                          "target" => false
                        ]
                        "image" => ""
                        "icon_enabled" => true
                      ]
                      "styles" => array:22 [
                        "header_margin" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "bg_image" => ""
                        "header_font" => array:8 [
                          "size" => ""
                          "bold" => ""
                          "underline" => ""
                          "italic" => ""
                          "family" => ""
                          "case" => ""
                          "spacing" => ""
                          "height" => ""
                        ]
                        "border_radius" => 3
                        "image_size" => "initial"
                        "bg_hover_color" => ""
                        "body_color" => "rgba(74, 74, 74, 1)"
                        "media_margin" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "bg_color" => ""
                        "icon_font_size" => 80
                        "border" => false
                        "body_font" => array:8 [
                          "size" => ""
                          "bold" => ""
                          "underline" => ""
                          "italic" => ""
                          "family" => ""
                          "case" => ""
                          "spacing" => ""
                          "height" => ""
                        ]
                        "border_hover_color" => ""
                        "image_position" => "initial"
                        "margin" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "border_color" => ""
                        "padding" => array:4 [
                          "top" => ""
                          "left" => ""
                          "bottom" => ""
                          "right" => ""
                        ]
                        "header_color" => ""
                        "border_width" => 2
                        "icon_color" => ""
                        "border_style" => "solid"
                        "image_repeat" => "no-repeat"
                      ]
                      "advanced" => array:3 [
                        "label" => "Blurb"
                        "id" => "qx-node-3111"
                        "class" => ""
                      ]
                    ]
                    "slug" => "blurb"
                  ]
                ]
                "size" => array:4 [
                  "lg" => 1
                  "md" => 1
                  "sm" => 0.5
                  "xs" => 1
                ]
              ]
            ]
          ]
        ]
      ]
    ]
    
  3. CMSObject {}
    
  4. "page"
    
  5. "0000-00-00 00:00:00"
    
            return false;
        }
 
        if (isset($this->item->id) && $this->item->id) {
            // hardcode type for builder use, so we know its page
            $this->item->type = 'page';
 
            // Check the view access to the article (the model has already computed the values).
            if ($this->item->params->get('access-view') == false && ($this->item->params->get('show_noauth', '0') == '0')) {
                $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error');
                $app->setHeader('status', 403, true);
 
                return;
            }
 
            // count hits
            $this->get('Hit');
 
            // render quix content and trigger content plugin
            $this->item->text = quixRenderItem($this->item);
 
        // render quix content and trigger content plugin
            /*
            $itemCacheName = $this->item->builder . '-page-' . $this->item->id;
            $cache = JFactory::getCache('com_quix', '');
            $cache->setCaching( true );
            $pageContent = $cache->get($itemCacheName);
            if (!empty($pageContent)) {
                $the_page_output = $pageContent;
            }else{
                $the_page_output = quixRenderItem($this->item);
                $cache->store($the_page_output, $itemCacheName);
            }
 
            $this->item->text = $the_page_output;
            */
        } else {
            JError::raiseError(404, JText::_('JERROR_PAGE_NOT_FOUND'));
            return false;
        }
Arguments
  1. CMSObject {}
    
        }
 
        // No hit so we have to execute the view
        if (!method_exists($view, $method))
        {
            return false;
        }
 
        if ($locktest->locked === false && $locktest->locklooped === true)
        {
            // We can not store data because another process is in the middle of saving
            $view->$method();
 
            return false;
        }
 
        // Capture and echo output
        ob_start();
        ob_implicit_flush(false);
        $view->$method();
        $data = ob_get_clean();
        echo $data;
 
        /*
         * For a view we have a special case.  We need to cache not only the output from the view, but the state
         * of the document head after the view has been rendered.  This will allow us to properly cache any attached
         * scripts or stylesheets or links or any other modifications that the view has made to the document object
         */
        if ($wrkarounds)
        {
            $data = Cache::setWorkarounds($data);
        }
 
        // Store the cache data
        $this->cache->store(serialize($data), $id);
 
        if ($locktest->locked === true)
        {
            $this->cache->unlock($id);
        }
                }
                else
                {
                    $registeredurlparams = new \stdClass;
                }
 
                foreach ($urlparams as $key => $value)
                {
                    // Add your safe URL parameters with variable type as value {@see \JFilterInput::clean()}.
                    $registeredurlparams->$key = $value;
                }
 
                $app->registeredurlparams = $registeredurlparams;
            }
 
            try
            {
                /** @var \JCacheControllerView $cache */
                $cache = \JFactory::getCache($option, 'view');
                $cache->get($view, 'display');
            }
            catch (\JCacheException $exception)
            {
                $view->display();
            }
        }
        else
        {
            $view->display();
        }
 
        return $this;
    }
 
    /**
     * Execute a task by triggering a method in the derived class.
     *
     * @param   string  $task  The task to perform. If no matching task is found, the '__default' task is executed, if defined.
     *
     * @return  mixed   The value returned by the called method.
Arguments
  1. QuixViewPage {}
    
  2. "display"
    
            // Somehow the person just went to the form - we don't allow that.
            // return JError::raiseError(403, JText::sprintf('COM_QUIX_UNHELD_ID', $id));
            // directly redirect to task edit
            $url = 'index.php?option=com_quix&task=' . $this->input->get('type', 'page') . '.edit&id=' . $id;
            $app->redirect($url);
        }
        
        // JCH fix for amp format
        QuixFrontendHelper::fixJCH();
 
        if ($format == 'amp') {
            $free = QuixHelper::isFreeQuix();
            if ($free) {
                $uri = JUri::getInstance();
                $uri->delVar('format');
                $app->redirect($uri->toString());
            }
        }
 
        return parent::display($cachable, $urlparams);
    }
 
    /**
     * Method to perform ajax call
     *
     * @param   element  element name must be passed
     * @param   format   format can be html, raw, json; default: json
     * @param   method   default method: get; will call getAjax(). postfix is: Ajax.
     *
     * @return  core output, like: json or other format
     * url example: index.php?option=com_quix&task=ajax&element=simple-contact&format=json&method=get
     * @since    1.3
     */
    public function ajax()
    {
        // Reference global application object
        $app = JFactory::getApplication();
 
        // JInput object
        $input = $app->input;
Arguments
  1. true
    
  2. false
    
 
        $task = strtolower((string) $task);
 
        if (isset($this->taskMap[$task]))
        {
            $doTask = $this->taskMap[$task];
        }
        elseif (isset($this->taskMap['__default']))
        {
            $doTask = $this->taskMap['__default'];
        }
        else
        {
            throw new \Exception(\JText::sprintf('JLIB_APPLICATION_ERROR_TASK_NOT_FOUND', $task), 404);
        }
 
        // Record the actual task being fired
        $this->doTask = $doTask;
 
        return $this->$doTask();
    }
 
    /**
     * Method to get a model object, loading it if required.
     *
     * @param   string  $name    The model name. Optional.
     * @param   string  $prefix  The class prefix. Optional.
     * @param   array   $config  Configuration array for model. Optional.
     *
     * @return  \JModelLegacy|boolean  Model object on success; otherwise false on failure.
     *
     * @since   3.0
     */
    public function getModel($name = '', $prefix = '', $config = array())
    {
        if (empty($name))
        {
            $name = $this->getName();
        }
 
        {
            $app->setHeader('status', 403, true);
            $app->redirect(JRoute::_('index.php'), 403);
        }
    }
}
 
// Include dependencies
jimport( 'quix.app.bootstrap' );
 
global  $QuixBuilderType ;
$QuixBuilderType = "frontend";
jimport( 'quix.app.init' );
 
JLoader::register( 'QuixFrontendHelper', JPATH_COMPONENT . '/helpers/quix.php' );
JLoader::register( 'QuixHelper', JPATH_COMPONENT_ADMINISTRATOR . '/helpers/quix.php' );
 
// Execute the task.
$controller = JControllerLegacy::getInstance( 'Quix' );
$controller->execute( $app->input->get( 'task' ) );
$controller->redirect();
Arguments
  1. ""
    
        {
            \JProfiler::getInstance('Application')->mark('afterRenderComponent ' . $option);
        }
 
        return $contents;
    }
 
    /**
     * Execute the component.
     *
     * @param   string  $path  The component path.
     *
     * @return  string  The component output
     *
     * @since   1.7
     */
    protected static function executeComponent($path)
    {
        ob_start();
        require_once $path;
 
        return ob_get_clean();
    }
 
    /**
     * Load the installed components into the components property.
     *
     * @param   string  $option  The element value for the extension
     *
     * @return  boolean  True on success
     *
     * @since   1.5
     * @deprecated  4.0  Use JComponentHelper::load() instead
     */
    protected static function _load($option)
    {
        return static::load($option);
    }
 
    /**
Arguments
  1. "/apps/topdata/app/webroot/components/com_quix/quix.php"
    
             */
            define('JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR . '/components/' . $option);
        }
 
        $path = JPATH_COMPONENT . '/' . $file . '.php';
 
        // If component is disabled throw error
        if (!static::isEnabled($option) || !file_exists($path))
        {
            throw new MissingComponentException(\JText::_('JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND'), 404);
        }
 
        // Load common and local language files.
        $lang->load($option, JPATH_BASE, null, false, true) || $lang->load($option, JPATH_COMPONENT, null, false, true);
 
        // Handle template preview outlining.
        $contents = null;
 
        // Execute the component.
        $contents = static::executeComponent($path);
 
        // Revert the scope
        $app->scope = $scope;
 
        if (JDEBUG)
        {
            \JProfiler::getInstance('Application')->mark('afterRenderComponent ' . $option);
        }
 
        return $contents;
    }
 
    /**
     * Execute the component.
     *
     * @param   string  $path  The component path.
     *
     * @return  string  The component output
     *
     * @since   1.7
Arguments
  1. "/apps/topdata/app/webroot/components/com_quix/quix.php"
    
 
            case 'feed':
                $document->setBase(htmlspecialchars(\JUri::current()));
                break;
        }
 
        $document->setTitle($params->get('page_title'));
        $document->setDescription($params->get('page_description'));
 
        // Add version number or not based on global configuration
        if ($this->get('MetaVersion', 0))
        {
            $document->setGenerator('Joomla! - Open Source Content Management - Version ' . JVERSION);
        }
        else
        {
            $document->setGenerator('Joomla! - Open Source Content Management');
        }
 
        $contents = ComponentHelper::renderComponent($component);
        $document->setBuffer($contents, 'component');
 
        // Trigger the onAfterDispatch event.
        \JPluginHelper::importPlugin('system');
        $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.
Arguments
  1. "com_quix"
    
        // 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;
    }
 
    /**
     * Return the current state of the detect browser option.
     *
     * @return    boolean
     *
     * @since    3.2
     */
    public function getDetectBrowser()
    {
        return $this->_detect_browser;
    }
 
    /**
     * Return the current state of the language filter.
     *
            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
empty
Key Value
UNIVAPP
"topdata"
USER
"topdata"
HOME
"/apps/topdata"
HTTP_HOST
"topdata.fr"
HTTP_REFERER
"https://www.topdon.fr/articles"
HTTP_USER_AGENT
"claudebot"
HTTP_ACCEPT
"*/*"
REDIRECT_STATUS
"200"
SERVER_NAME
"topdata.fr"
SERVER_PORT
"443"
SERVER_ADDR
"5.135.55.84"
REMOTE_USER
""
REMOTE_PORT
"55900"
REMOTE_ADDR
"44.193.208.105"
SERVER_SOFTWARE
"nginx/1.18.0"
GATEWAY_INTERFACE
"CGI/1.1"
HTTPS
"on"
REQUEST_SCHEME
"https"
SERVER_PROTOCOL
"HTTP/1.1"
DOCUMENT_ROOT
"/apps/topdata/app/webroot"
DOCUMENT_URI
"/index.php"
REQUEST_URI
"/articles"
SCRIPT_NAME
"/index.php"
CONTENT_LENGTH
""
CONTENT_TYPE
""
REQUEST_METHOD
"GET"
QUERY_STRING
""
SCRIPT_FILENAME
"/apps/topdata/app/webroot/index.php"
PATH_INFO
""
FCGI_ROLE
"RESPONDER"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1711713246.7509
REQUEST_TIME
1711713246
Key Value
UNIVAPP
"topdata"
USER
"topdata"
HOME
"/apps/topdata"
HTTP_HOST
"topdata.fr"
HTTP_REFERER
"https://www.topdon.fr/articles"
HTTP_USER_AGENT
"claudebot"
HTTP_ACCEPT
"*/*"
REDIRECT_STATUS
"200"
SERVER_NAME
"topdata.fr"
SERVER_PORT
"443"
SERVER_ADDR
"5.135.55.84"
REMOTE_USER
""
REMOTE_PORT
"55900"
REMOTE_ADDR
"44.193.208.105"
SERVER_SOFTWARE
"nginx/1.18.0"
GATEWAY_INTERFACE
"CGI/1.1"
HTTPS
"on"
REQUEST_SCHEME
"https"
SERVER_PROTOCOL
"HTTP/1.1"
DOCUMENT_ROOT
"/apps/topdata/app/webroot"
DOCUMENT_URI
"/index.php"
REQUEST_URI
"/articles"
SCRIPT_NAME
"/index.php"
CONTENT_LENGTH
""
CONTENT_TYPE
""
REQUEST_METHOD
"GET"
QUERY_STRING
""
SCRIPT_FILENAME
"/apps/topdata/app/webroot/index.php"
PATH_INFO
""
FCGI_ROLE
"RESPONDER"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1711713246.7509
REQUEST_TIME
1711713246
0. Whoops\Handler\PrettyPageHandler