Twig \ Error \ RuntimeError
An exception has been thrown during the rendering of a template ("").
Previous exceptions
  • (0)
Twig\Error\RuntimeError thrown with message "An exception has been thrown during the rendering of a template ("")." Stacktrace: #48 Twig\Error\RuntimeError in /var/www/www.cadi-tco.re/src/Category/views/products.tpl:11 #47 Framework\Exception\NoRecordException in /var/www/www.cadi-tco.re/src/Framework/Database/Query.php:224 #46 Framework\Database\Query:fetchOrFail in /var/www/www.cadi-tco.re/src/Framework/Database/Table.php:267 #45 Framework\Database\Table:findActive in /var/www/www.cadi-tco.re/src/Category/Twig/LinkPathTwigExtension.php:60 #44 App\Category\Twig\LinkPathTwigExtension:linkPath in /var/www/www.cadi-tco.re/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php:70 #43 __TwigTemplate_8681b49891bc5eed540b90d90a8e502d7bb72bc7dffe4aca9a8cc8745bbc529d:block_body in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:182 #42 Twig\Template:displayBlock in /var/www/www.cadi-tco.re/tmp/views/cf/cf48e9ad8f56cd0f58609ca1e1076f02cd6b4e57dbd24cfcdc71e2facbb7f6b2.php:716 #41 __TwigTemplate_c6dc9d31c4c9af5a57feade1eacb6fbe3df92517b3681465da4eacd9b5c1ba36:doDisplay in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:405 #40 Twig\Template:displayWithErrorHandling in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:378 #39 Twig\Template:display in /var/www/www.cadi-tco.re/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php:43 #38 __TwigTemplate_8681b49891bc5eed540b90d90a8e502d7bb72bc7dffe4aca9a8cc8745bbc529d:doDisplay in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:405 #37 Twig\Template:displayWithErrorHandling in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:378 #36 Twig\Template:display in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php:390 #35 Twig\Template:render in /var/www/www.cadi-tco.re/vendor/twig/twig/src/TemplateWrapper.php:45 #34 Twig\TemplateWrapper:render in /var/www/www.cadi-tco.re/vendor/twig/twig/src/Environment.php:318 #33 Twig\Environment:render in /var/www/www.cadi-tco.re/src/Framework/Renderer/TwigRenderer.php:56 #32 Framework\Renderer\TwigRenderer:render in /var/www/www.cadi-tco.re/src/Category/Actions/CategoryProductListingAction.php:105 #31 App\Category\Actions\CategoryProductListingAction:__invoke in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #30 call_user_func_array in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #29 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:48 #28 Framework\Middleware\CombinedMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/DispatcherMiddleware.php:37 #27 Framework\Middleware\DispatcherMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #26 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/RouterMiddleware.php:83 #25 Framework\Middleware\RouterMiddleware:__invoke in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #24 call_user_func_array in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #23 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/CsrfMiddleware.php:61 #22 Framework\Middleware\CsrfMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #21 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/RendererRequestMiddleware.php:187 #20 Framework\Middleware\RendererRequestMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #19 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/MethodMiddleware.php:19 #18 Framework\Middleware\MethodMiddleware:__invoke in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #17 call_user_func_array in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #16 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/PostMaxSizeMiddleware.php:40 #15 Framework\Middleware\PostMaxSizeMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #14 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/RoutePrefixedMiddleware.php:47 #13 Framework\Middleware\RoutePrefixedMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #12 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/RoutePrefixedMiddleware.php:47 #11 Framework\Middleware\RoutePrefixedMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #10 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Auth/ForbiddenMiddleware.php:36 #9 App\Auth\ForbiddenMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #8 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/TrailingSlashMiddleware.php:19 #7 Framework\Middleware\TrailingSlashMiddleware:__invoke in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #6 call_user_func_array in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:58 #5 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/vendor/middlewares/whoops/src/Whoops.php:108 #4 Middlewares\Whoops:process in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:64 #3 Framework\Middleware\CombinedMiddleware:handle in /var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php:48 #2 Framework\Middleware\CombinedMiddleware:process in /var/www/www.cadi-tco.re/src/Framework/App.php:81 #1 Framework\App:handle in /var/www/www.cadi-tco.re/src/Framework/App.php:90 #0 Framework\App:run in /var/www/www.cadi-tco.re/public/index.php:112
Stack frames (49)
48
Twig\Error\RuntimeError
/src/Category/views/products.tpl11
47
Framework\Exception\NoRecordException
/src/Framework/Database/Query.php224
46
Framework\Database\Query fetchOrFail
/src/Framework/Database/Table.php267
45
Framework\Database\Table findActive
/src/Category/Twig/LinkPathTwigExtension.php60
44
App\Category\Twig\LinkPathTwigExtension linkPath
/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php70
43
__TwigTemplate_8681b49891bc5eed540b90d90a8e502d7bb72bc7dffe4aca9a8cc8745bbc529d block_body
/vendor/twig/twig/src/Template.php182
42
Twig\Template displayBlock
/tmp/views/cf/cf48e9ad8f56cd0f58609ca1e1076f02cd6b4e57dbd24cfcdc71e2facbb7f6b2.php716
41
__TwigTemplate_c6dc9d31c4c9af5a57feade1eacb6fbe3df92517b3681465da4eacd9b5c1ba36 doDisplay
/vendor/twig/twig/src/Template.php405
40
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php378
39
Twig\Template display
/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php43
38
__TwigTemplate_8681b49891bc5eed540b90d90a8e502d7bb72bc7dffe4aca9a8cc8745bbc529d doDisplay
/vendor/twig/twig/src/Template.php405
37
Twig\Template displayWithErrorHandling
/vendor/twig/twig/src/Template.php378
36
Twig\Template display
/vendor/twig/twig/src/Template.php390
35
Twig\Template render
/vendor/twig/twig/src/TemplateWrapper.php45
34
Twig\TemplateWrapper render
/vendor/twig/twig/src/Environment.php318
33
Twig\Environment render
/src/Framework/Renderer/TwigRenderer.php56
32
Framework\Renderer\TwigRenderer render
/src/Category/Actions/CategoryProductListingAction.php105
31
App\Category\Actions\CategoryProductListingAction __invoke
/src/Framework/Middleware/CombinedMiddleware.php58
30
call_user_func_array
/src/Framework/Middleware/CombinedMiddleware.php58
29
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/CombinedMiddleware.php48
28
Framework\Middleware\CombinedMiddleware process
/src/Framework/Middleware/DispatcherMiddleware.php37
27
Framework\Middleware\DispatcherMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
26
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/RouterMiddleware.php83
25
Framework\Middleware\RouterMiddleware __invoke
/src/Framework/Middleware/CombinedMiddleware.php58
24
call_user_func_array
/src/Framework/Middleware/CombinedMiddleware.php58
23
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/CsrfMiddleware.php61
22
Framework\Middleware\CsrfMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
21
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/RendererRequestMiddleware.php187
20
Framework\Middleware\RendererRequestMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
19
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/MethodMiddleware.php19
18
Framework\Middleware\MethodMiddleware __invoke
/src/Framework/Middleware/CombinedMiddleware.php58
17
call_user_func_array
/src/Framework/Middleware/CombinedMiddleware.php58
16
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/PostMaxSizeMiddleware.php40
15
Framework\Middleware\PostMaxSizeMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
14
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/RoutePrefixedMiddleware.php47
13
Framework\Middleware\RoutePrefixedMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
12
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/RoutePrefixedMiddleware.php47
11
Framework\Middleware\RoutePrefixedMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
10
Framework\Middleware\CombinedMiddleware handle
/src/Auth/ForbiddenMiddleware.php36
9
App\Auth\ForbiddenMiddleware process
/src/Framework/Middleware/CombinedMiddleware.php64
8
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/TrailingSlashMiddleware.php19
7
Framework\Middleware\TrailingSlashMiddleware __invoke
/src/Framework/Middleware/CombinedMiddleware.php58
6
call_user_func_array
/src/Framework/Middleware/CombinedMiddleware.php58
5
Framework\Middleware\CombinedMiddleware handle
/vendor/middlewares/whoops/src/Whoops.php108
4
Middlewares\Whoops process
/src/Framework/Middleware/CombinedMiddleware.php64
3
Framework\Middleware\CombinedMiddleware handle
/src/Framework/Middleware/CombinedMiddleware.php48
2
Framework\Middleware\CombinedMiddleware process
/src/Framework/App.php81
1
Framework\App handle
/src/Framework/App.php90
0
Framework\App run
/public/index.php112
/var/www/www.cadi-tco.re/src/Category/views/products.tpl
{% extends 'layout.tpl' %}

{% block title %}
  Produits {{ category.name }} {% if page > 1 %} - page {{ page }}{% endif %}
{% endblock %}

{% block body %}
<div class="container">
    <div class="row">                       
        <div class="col-lg-12">
            {{ linkPath(category.id) | raw }}<br />
            <div class="info-bar">
                <div class="row">
                    <div class="col-md-12 col-lg-7 products-showing">
                        <div class="row">
                            <h3>{{ category.name }}{% if page > 1 %}, page {{ page }}{% endif %}</h3>
                            &nbsp;<a class="btn btn-green" href="{{ path('categories_products.agec', {id: category.id, url: category.url}) }}">Afficher produits AGEC</a>
                        </div>
                    </div>
                    {% include '@shop/orderby.inc.tpl' %}
                </div>
            </div>
            <br />
            <hr class="products-hr" />
            {% if subCategories.0 | length > 0 %}
                <div class="row col-md-12">
                    {% for subCategory in subCategories %}
                        <div class="col-md-4 category-list">
                            {% if(subCategory.icon) %}
                            <div class="border border-primary">
                                &nbsp;<br />
                                <a href="{{ path('categories_products', {id: subCategory.id, url: subCategory.url}) }}" /><img src="/uploads/icons/{{ subCategory.icon }}" alt="Catégorie {{ subCategory.name }}" /></a>
                                <br />&nbsp;
                            </div>
                            {% endif %}
                            <a href="{{ path('categories_products', {id: subCategory.id, url: subCategory.url}) }}" />{{ subCategory.name }}</a>
                        </div>
                    {% endfor %}
                </div>
                <hr class="products-hr" />
/var/www/www.cadi-tco.re/src/Framework/Database/Query.php
            $parts[] = 'LIMIT ' . $this -> limit;
        }
        
        echo join(' ', $parts);
        
        die();
    }
    
    /**
     * Retourne un résultat ou une exception
     *
     * @return mixed
     * @throws \Exception
     */
    public function fetchOrFail()
    {
        $record = $this->fetch();
        
        if ($record === false) {
            throw new NoRecordException();
        }
        
        return $record;
    }
    
    public function __toString()
    {
        $parts = ['SELECT'];
        
        if ($this -> select) {
            $parts[] = join(',', $this->select);
        } else {
            $parts[] = '*';
        }
        $parts[] = 'FROM';
        $parts[] = $this->buildFrom();
        
        if (!empty($this->joins)) {
            foreach ($this->joins as $type => $joins) {
                foreach ($joins as $join) {
Exception message:
/var/www/www.cadi-tco.re/src/Framework/Database/Table.php
    public function findWF(int $id)
    {
        return $this->makeQuery()
            ->where('id = :id')
            ->params([':id' => $id])
            ->fetch();
    }
    
    /**
     * Récupère un élément avec is_active = 1 à partir de son id
     *
     * @param int $id
     * @return mixed
     */
    public function findActive(int $id)
    {
        return $this->makeQuery()
                ->where('id = :id', 'is_active = :active')
                ->params([':id' => $id, ':active' => 1])
                ->fetchOrFail();
    }
    
    /**
     * Récupère le stock d'un élément
     *
     * @param int $id
     * @return mixed
     */
    public function getStock(int $id)
    {
        return $this->makeQuery()
            ->select('stock')
            ->where('id = :id', 'is_stock = :is_stock')
            ->params([':id' => $id, ':is_stock' => 1])
            ->fetchColumn(0);
    }
    
    /**
     * Compte le nombre d'articles
     *
/var/www/www.cadi-tco.re/src/Category/Twig/LinkPathTwigExtension.php
    }
    
    public function getFunctions(): array
    {
        return [
            new \Twig_SimpleFunction('linkPath', [$this, 'linkPath']),
            new \Twig_SimpleFunction('menu', [$this, 'menu']),
        ];
    }
    
    public function linkPath($categoryId)
    {
        $category = $this->categoryTable->findActive($categoryId);
        $categories = explode('/', $category->getPath());
        
        $link = '<nav aria-label="breadcrumb"><ol class="breadcrumb">';
        
        $link .= '<li class="breadcrumb-item"><a href="'.$this->router->generateUri('home').'">Accueil</a></li>';
        foreach ($categories as $c) {
            $parent = $this->categoryTable->findActive($c);
            $url = $this->router->generateUri(
                'categories_products',
                ['id' => $parent->getId(),
                'url' => $parent->getUrl()]
            );
            $link .= '<li class="breadcrumb-item"><a href="'.$url.'">'.$parent->getName().'</a></li>';
        }
        
        $link .= '</ol></nav>';
        
        return $link;
    }
    
    public function menu()
    {
        $user = $this->auth->getUser();
        $categories = $this->categoryTable->findChild(0, 'position', true);
        
        //Pour chaque catégorie
        foreach ($categories as $category) {
/var/www/www.cadi-tco.re/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php
        echo "  Produits ";
        echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "name", [], "any", false, false, false, 4), "html", null, true);
        echo " ";
        if ((($context["page"] ?? null) > 1)) {
            echo " - page ";
            echo twig_escape_filter($this->env, ($context["page"] ?? null), "html", null, true);
        }
    }
 
    // line 7
    public function block_body($context, array $blocks = [])
    {
        $macros = $this->macros;
        // line 8
        echo "<div class=\"container\">
    <div class=\"row\">                       
        <div class=\"col-lg-12\">
            ";
        // line 11
        echo $this->extensions['App\Category\Twig\LinkPathTwigExtension']->linkPath(twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "id", [], "any", false, false, false, 11));
        echo "<br />
            <div class=\"info-bar\">
                <div class=\"row\">
                    <div class=\"col-md-12 col-lg-7 products-showing\">
                        <div class=\"row\">
                            <h3>";
        // line 16
        echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "name", [], "any", false, false, false, 16), "html", null, true);
        if ((($context["page"] ?? null) > 1)) {
            echo ", page ";
            echo twig_escape_filter($this->env, ($context["page"] ?? null), "html", null, true);
        }
        echo "</h3>
                            &nbsp;<a class=\"btn btn-green\" href=\"";
        // line 17
        echo twig_escape_filter($this->env, $this->extensions['Framework\Router\RouterTwigExtension']->pathFor("categories_products.agec", ["id" => twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "id", [], "any", false, false, false, 17), "url" => twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "url", [], "any", false, false, false, 17)]), "html", null, true);
        echo "\">Afficher produits AGEC</a>
                        </div>
                    </div>
                    ";
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
    {
        if ($useBlocks && isset($blocks[$name])) {
            $template = $blocks[$name][0];
            $block = $blocks[$name][1];
        } elseif (isset($this->blocks[$name])) {
            $template = $this->blocks[$name][0];
            $block = $this->blocks[$name][1];
        } else {
            $template = null;
            $block = null;
        }
 
        // avoid RCEs when sandbox is enabled
        if (null !== $template && !$template instanceof self) {
            throw new \LogicException('A block must be a method on a \Twig\Template instance.');
        }
 
        if (null !== $template) {
            try {
                $template->$block($context, $blocks);
            } catch (Error $e) {
                if (!$e->getSourceContext()) {
                    $e->setSourceContext($template->getSourceContext());
                }
 
                // this is mostly useful for \Twig\Error\LoaderError exceptions
                // see \Twig\Error\LoaderError
                if (-1 === $e->getTemplateLine()) {
                    $e->guess();
                }
 
                throw $e;
            } catch (\Exception $e) {
                $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e);
                $e->guess();
 
                throw $e;
            }
        } elseif (false !== $parent = $this->getParent($context)) {
            $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false, $templateContext ?? $this);
/var/www/www.cadi-tco.re/tmp/views/cf/cf48e9ad8f56cd0f58609ca1e1076f02cd6b4e57dbd24cfcdc71e2facbb7f6b2.php
        // line 312
        echo "        <!--END HEADER-->
        <div id=\"all\">
            <!--*** BANNER ***-->
            <div id=\"content\">
                <div class=\"row\">
                    <div id=\"title-content\" class=\"row\">
                        <div id=\"title-content-text\">
                            CADI, PREMIÈRE CENTRALE D'ACHATS PUBLICS À LA RÉUNION & DANS LES DOM<br />
                            VOS ACHATS PUBLICS <span style=\"font-weight: bold; font-size: 24px;\">EN </span><span style=\"color: #00b3ba; font-weight: bold; font-size: 24px;\">1 CLIC</span><br />
                        </div>
                        <div id=\"title-content-icon\">
                            <img src=\"/images/un-clic.jpg\" alt=\"un clic\" />
                        </div> 
                    </div>
                </div>
                <br style=\"clear: both;\" />
                ";
        // line 328
        $this->displayBlock('body', $context, $blocks);
        // line 329
        echo "                ";
        $this->loadTemplate("footer.inc.tpl", "layout.tpl", 329)->display($context);
        // line 330
        echo "            </div>
        </div>
        
        ";
        // line 333
        if ($this->extensions['Framework\Twig\FlashExtension']->getFlash("success")) {
            // line 334
            echo "            <div id=\"message-success\">
                <div class=\"row\">
                    <div class=\"row margin-auto\">
                        ";
            // line 337
            echo twig_escape_filter($this->env, $this->extensions['Framework\Twig\FlashExtension']->getFlash("success"), "html", null, true);
            echo "
                        <div style=\"margin-left: 30px;\">
                            <a href=\"javascript:void(0);\" onclick=\"closeMsgFlash()\" style=\"color: #ffffff;\" ><small style=\"padding: 5px; border: solid 1px #ffffff;\">fermer</small></a>
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
/var/www/www.cadi-tco.re/tmp/views/32/32cc0204f408b650f61adca63db24b19dcc74684922632b38dc3af6e7f05f108.php
 
        $this->source = $this->getSourceContext();
 
        $this->blocks = [
            'title' => [$this, 'block_title'],
            'body' => [$this, 'block_body'],
        ];
    }
 
    protected function doGetParent(array $context)
    {
        // line 1
        return "layout.tpl";
    }
 
    protected function doDisplay(array $context, array $blocks = [])
    {
        $macros = $this->macros;
        $this->parent = $this->loadTemplate("layout.tpl", "@category/products.tpl", 1);
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }
 
    // line 3
    public function block_title($context, array $blocks = [])
    {
        $macros = $this->macros;
        // line 4
        echo "  Produits ";
        echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["category"] ?? null), "name", [], "any", false, false, false, 4), "html", null, true);
        echo " ";
        if ((($context["page"] ?? null) > 1)) {
            echo " - page ";
            echo twig_escape_filter($this->env, ($context["page"] ?? null), "html", null, true);
        }
    }
 
    // line 7
    public function block_body($context, array $blocks = [])
    {
        $macros = $this->macros;
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
            // this is mostly useful for \Twig\Error\LoaderError exceptions
            // see \Twig\Error\LoaderError
            if (-1 === $e->getTemplateLine()) {
                $e->guess();
            }
 
            throw $e;
        } catch (\Exception $e) {
            $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e);
            $e->guess();
 
            throw $e;
        }
    }
 
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
    {
        return $this;
    }
 
    /**
     * Returns all blocks.
     *
     * This method is for internal use only and should never be called
     * directly.
     *
     * @return array An array of blocks
     */
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Template.php
    public function getBlocks()
    {
        return $this->blocks;
    }
 
    public function display(array $context, array $blocks = [])
    {
        $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks));
    }
 
    public function render(array $context)
    {
        $level = ob_get_level();
        if ($this->env->isDebug()) {
            ob_start();
        } else {
            ob_start(function () { return ''; });
        }
        try {
            $this->display($context);
        } catch (\Throwable $e) {
            while (ob_get_level() > $level) {
                ob_end_clean();
            }
 
            throw $e;
        }
 
        return ob_get_clean();
    }
 
    protected function displayWithErrorHandling(array $context, array $blocks = [])
    {
        try {
            $this->doDisplay($context, $blocks);
        } catch (Error $e) {
            if (!$e->getSourceContext()) {
                $e->setSourceContext($this->getSourceContext());
            }
 
/var/www/www.cadi-tco.re/vendor/twig/twig/src/TemplateWrapper.php
     * directly (use Twig\Environment::load() instead).
     *
     * @internal
     */
    public function __construct(Environment $env, Template $template)
    {
        $this->env = $env;
        $this->template = $template;
    }
 
    /**
     * Renders the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function render(array $context = []): string
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        return $this->template->render($context, \func_get_args()[1] ?? []);
    }
 
    /**
     * Displays the template.
     *
     * @param array $context An array of parameters to pass to the template
     */
    public function display(array $context = [])
    {
        // using func_get_args() allows to not expose the blocks argument
        // as it should only be used by internal code
        $this->template->display($context, \func_get_args()[1] ?? []);
    }
 
    /**
     * Checks if a block is defined.
     *
     * @param string $name    The block name
     * @param array  $context An array of parameters to pass to the template
     */
/var/www/www.cadi-tco.re/vendor/twig/twig/src/Environment.php
        $key = $this->getLoader()->getCacheKey($name).$this->optionsHash;
 
        return $this->templateClassPrefix.hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $key).(null === $index ? '' : '___'.$index);
    }
 
    /**
     * Renders a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @return string The rendered template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function render($name, array $context = [])
    {
        return $this->load($name)->render($context);
    }
 
    /**
     * Displays a template.
     *
     * @param string|TemplateWrapper $name    The template name
     * @param array                  $context An array of parameters to pass to the template
     *
     * @throws LoaderError  When the template cannot be found
     * @throws SyntaxError  When an error occurred during compilation
     * @throws RuntimeError When an error occurred during rendering
     */
    public function display($name, array $context = [])
    {
        $this->load($name)->display($context);
    }
 
    /**
     * Loads a template.
     *
/var/www/www.cadi-tco.re/src/Framework/Renderer/TwigRenderer.php
    public function addPath(string $namespace, string $path = null):void
    {
        $this->twig->getLoader()->addPath($path, $namespace);
    }
    
    /**
     * Permet de rendre une vue
     * Le chemin peut être précisé avec des namespaces rajoutés via addPath()
     * $this->render('@blog/views');
     * $this->render('views');
     * @param string $view
     * @param array $params
     * @return string
     */
    public function render(string $view, array $params = []):string
    {
        if ($this->session->get('javascript') && in_array($view, $this->ajaxFiles)) {
            $this->twig->render($view.'.inc.tpl', $params);
        }
        return $this->twig->render($view.'.tpl', $params);
    }
    
    /**
     * Permet de rendre une vue en Json
     *
     * @param string $view
     * @param array $params
     * @return string
     */
    public function renderJson(string $view, array $params = []):string
    {
        $renderer = $this->render($view, $params);
        $start = strpos($renderer, '<body>')+6;
        $length = strpos($renderer, '</body>') - $start;
        $html = substr($renderer, $start, $length);
        return json_encode(['html' => $html]);
    }
    
    
    /**
/var/www/www.cadi-tco.re/src/Category/Actions/CategoryProductListingAction.php
        
        $products = $this->productTable->findPublicCategory($categoryId, $orderBy)->paginate($productPerPage, $page);
        
        //Si la catégorie est une page
        if ($category->getPage()) {
            return $this->renderer->render('@page/'.$category->getPage());
        }
        
        //S'il n'y a pas de produit
        if ($products->count() == 0) {
            $bestSale = $this->productTable->findBestSales($categoryId, 2);
            $greenOffer = $this->productTable->findGreenProducts($categoryId, 2);
            $firstOffer = $this->productTable->findFirstPrice($categoryId, 2);
            
            $params = compact('products', 'page', 'category', 'subCategories', 'bestSale', 'greenOffer', 'firstOffer');
        } else {
            $params = compact('products', 'page', 'category', 'subCategories', 'orderByIndex', 'productPerPage');
        }
        
        return $this->renderer->render('@category/products', $params);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
     * @var RequestHandlerInterface
     */
    private $handler;
    
    /**
     *
     * @param ContainerInterface $container
     * @param array $middlewares
     */

    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
/var/www/www.cadi-tco.re/src/Framework/Middleware/DispatcherMiddleware.php

    public function __construct(\Psr\Container\ContainerInterface $container)
    {
        $this->container = $container;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $route = $request->getAttribute(\Framework\Router\Route::class);
        if (is_null($route)) {
            //Appelle le prochain middleware : cad le NotFoundMiddleware
            return $handler->handle($request);
        }
        //Récupère l'action à appeller
        $callback = $route->getCallable();
        if (!is_array($callback)) {
            $callback = [$callback];
        }
        //Permet d'appler d'autres middlewares
        return (new CombinedMiddleware($this->container, $callback))->process($request, $handler);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/RouterMiddleware.php
            
            if($this->auth->getUser()){
                $user = $this->auth->getUser();
                $originalUser = $this->auth->getOriginalUser();
                $fichier = fopen('public/uploads/logs/log'.date('ymd').'.txt', 'a');
                $input = date('H:i:s').' : ';
                if($originalUser) {
                    $input .= '['.$originalUser ->getFirstname().' '.$originalUser ->getlastname().']';
                }
                $input .= $user ->getFirstname().' '.$user ->getlastname().' - ';
                $input .= $route->getName().' - '. json_encode($route->getParams());
                if($request->getMethod() == "POST") {
                    $input .= ' - POST => ' . json_encode($request->getParsedBody());
                }
                $input .= "\n";
                fwrite($fichier, $input);
                fclose($fichier);            
            }

            return $next($request);
        } catch (\Pagerfanta\Exception\OutOfRangeCurrentPageException $exception) {
            return new Response(404, [], $this->renderer->render('404'));
        } catch (\Framework\Exception\NoRecordException $exception) {
            return new Response(404, [], $this->renderer->render('404'));
        }
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CsrfMiddleware.php
    }
    
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        try {
            if (in_array($request->getMethod(), ['POST', 'PUT', 'DELETE'])) {
                $params = $request->getParsedBody()?: [];
                if (!array_key_exists($this->formKey, $params)) {
                    return $this->reject($request);
                } else {
                    $csrfList = $this->session[$this->sessionKey] ?? [];
                    if (in_array($params[$this->formKey], $csrfList)) {
                        $this->useToken($params[$this->formKey]);
                        return $handler->handle($request);
                    } else {
                        return $this->reject($request);
                    }
                }
            } else {
                return $handler->handle($request);
            }
        } catch (CsrfInvalidException $e) {
            $this->flashService->error($e->getMessage());
            return new RedirectBackResponse($request);
        }
    }
    
    public function generateToken(): string
    {
        $token = bin2hex(random_bytes(16));
        $csrfList = $this->session[$this->sessionKey] ?? [];
        $csrfList[] = $token;
        $this->session[$this->sessionKey] = $csrfList;
        
        $this->limitTokens();
        
        return $token;
    }
    
    public function getFormKey()
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/RendererRequestMiddleware.php
                //S'il y a un cookie popup, l'utilisateur a déjà vu le popup.
                if (isset($_COOKIE['cookie-popup'])) {
                    if ($_COOKIE['cookie-popup'] == $popupName) { //On vérifie qu'il s'agit bien du popup actuel
                        $popup = false;
                    } else { //S'il s'agit d'un autre popup, on l'enregistre pour ne plus l'afficher la prochaine fois.
                        setcookie("cookie-popup", $popupName, time() + 86400 * $popup->getCookieTime(), '/');
                    }
                } else { //S'il y en a pas, on l'enregistre pour ne plus l'afficher la prochaine fois.
                    setcookie("cookie-popup", $popupName, time() + 86400 * $popup->getCookieTime(), '/');
                }
            }
        }
        
        $this->renderer->addGlobal('domain', $domain);
        $this->renderer->addGlobal('cookie', $cookie);
        $this->renderer->addGlobal('cookieConsent', $cookieConsent);
        $this->renderer->addGlobal('popup', $popup);
        $this->renderer->addGlobal('popupQuestion', $popupQuestion);
        $this->renderer->addGlobal('url', 'www.cadi.re');
        return $handler->handle($request);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/MethodMiddleware.php
<?php

namespace Framework\Middleware;

use Psr\Http\Message\ServerRequestInterface;

class MethodMiddleware
{
    
    public function __invoke(ServerRequestInterface $request, callable $next)
    {
        $parsedBody = $request->getParsedBody();
        if (array_key_exists('_method', $parsedBody) &&
                in_array($parsedBody['_method'], ['DELETE', 'PUT'])
        ) {
            $request = $request->withMethod($parsedBody['_method']);
        }
        
        return $next($request);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/PostMaxSizeMiddleware.php
    private $flashService;

    public function __construct(FlashService $flashService)
    {
        $this->flashService = $flashService;
    }
    
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        if ($request->getMethod() === 'POST') {
            $postMaxSize = $this->returnBytes(ini_get('post_max_size'));
            $serverParams = $request->getServerParams();
                
            if ($serverParams['CONTENT_LENGTH']>$postMaxSize) {
                $this->flashService->error('Les éléments envoyés au formulaire sont trop importants');
                return new RedirectResponse($request->getUri());
            }
        }
            
        return $handler->handle($request);
    }
    
    private function returnBytes($size_str)
    {
        switch (substr($size_str, -1)) {
            case 'M':
            case 'm':
                return (int)$size_str * 1048576;
            case 'K':
            case 'k':
                return (int)$size_str * 1024;
            case 'G':
            case 'g':
                return (int)$size_str * 1073741824;
            default:
                return $size_str;
        }
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/RoutePrefixedMiddleware.php

    public function __construct(ContainerInterface $container, string $prefix, $middleware)
    {
        $this->container = $container;
        $this->prefix = $prefix;
        $this->middleware = $middleware;
    }
    
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $path = $request->getUri()->getPath();
        if (strpos($path, $this->prefix) === 0) {
            if (is_string($this->middleware)) {
                return $this->container->get($this->middleware)->process($request, $handler);
            } else {
                return $this->middleware->process($request, $handler);
            }
        }
        
        return $handler->handle($request);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/RoutePrefixedMiddleware.php

    public function __construct(ContainerInterface $container, string $prefix, $middleware)
    {
        $this->container = $container;
        $this->prefix = $prefix;
        $this->middleware = $middleware;
    }
    
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $path = $request->getUri()->getPath();
        if (strpos($path, $this->prefix) === 0) {
            if (is_string($this->middleware)) {
                return $this->container->get($this->middleware)->process($request, $handler);
            } else {
                return $this->middleware->process($request, $handler);
            }
        }
        
        return $handler->handle($request);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Auth/ForbiddenMiddleware.php
    /**
     * @var \Framework\Session\SessionInterface
     */
    private $session;

    /**
     * @var string
     */
    private $loginPath;

    public function __construct(string $loginPath, SessionInterface $session)
    {
        $this->loginPath = $loginPath;
        $this->session = $session;
    }
    
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        try {
            return $handler->handle($request);
        } catch (ForbiddenException $exception) {
            $this->session->set('auth.redirect', $request->getUri()->getPath());
            (new FlashService($this->session))->error('Vous devez posséder un compte pour accéder à cette page');
            return new RedirectResponse($this->loginPath);
        } catch (ForbiddenProfilException $exception) {
            $this->session->delete('auth.redirect');
            (new FlashService($this->session))->error('Votre compte ne vous permet pas d\'accéder à cette page');
            return new RedirectResponse($this->session->get('auth.back.redirect') ?? $this->loginPath);
        }
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/TrailingSlashMiddleware.php
<?php

namespace Framework\Middleware;

use Psr\Http\Message\ServerRequestInterface;

class TrailingSlashMiddleware
{
    
    public function __invoke(ServerRequestInterface $request, callable $next)
    {
        $uri = $request->getUri()->getPath();
        
        if (!empty($uri) && $uri !== '/' && $uri[-1] === '/') {
            return (new \GuzzleHttp\Psr7\Response())
            ->withStatus(301)
            ->withHeader('Location', substr($uri, 0, -1));
        }
        return $next($request);
    }
}
 
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
/var/www/www.cadi-tco.re/vendor/middlewares/whoops/src/Whoops.php
            $whoops->register();
 
            $shutdown = function () use ($whoops) {
                $whoops->allowQuit(true);
                $whoops->writeToOutput(true);
                $whoops->sendHttpCode(true);
 
                $method = Run::SHUTDOWN_HANDLER;
                $whoops->$method();
            };
 
            if ($this->system) {
                $this->system->registerShutdownFunction($shutdown);
            } else {
                register_shutdown_function($shutdown);
            }
        }
 
        try {
            $response = $handler->handle($request);
        } catch (\Throwable $exception) {
            $response = $this->createResponse(500);
            $response->getBody()->write($whoops->$method($exception));
            $response = self::updateResponseContentType($response, $whoops);
        } finally {
            while (ob_get_level() >= $level) {
                ob_end_clean();
            }
        }
 
        if ($this->catchErrors) {
            $whoops->unregister();
        }
 
        return $response;
    }
 
    /**
     * Returns the whoops instance or create one.
     */
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
     *
     * @return callable|null
     */
    private function getMiddleware()
    {
        if (array_key_exists($this->index, $this->middlewares)) {
            if (is_string($this->middlewares[$this->index])) {
                $middleware = $this->container->get($this->middlewares[$this->index]);
            } else {
                $middleware = $this->middlewares[$this->index];
            }
            
            $this->index ++;
            
            return $middleware;
        }
/var/www/www.cadi-tco.re/src/Framework/Middleware/CombinedMiddleware.php
     * @var RequestHandlerInterface
     */
    private $handler;
    
    /**
     *
     * @param ContainerInterface $container
     * @param array $middlewares
     */

    public function __construct(ContainerInterface $container, array $middlewares)
    {
        $this->container = $container;
        $this->middlewares = $middlewares;
    }

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        $this->handler = $handler;
        return $this->handle($request);
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $middleware = $this->getMiddleware();
        
        if (is_null($middleware)) {
            return $this->handler->handle($request);
        } elseif (is_callable($middleware)) {
            $response = call_user_func_array($middleware, [$request, [$this, 'handle']]);
            if (is_string($response)) {
                return new Response(200, [], $response);
            }
            return $response;
        } elseif ($middleware instanceof \Psr\Http\Server\MiddlewareInterface) {
            return $middleware->process($request, $this);
        }
    }
    
    /**
/var/www/www.cadi-tco.re/src/Framework/App.php
     */
    public function pipe($routePrefix, $middleware = null): self
    {
        if ($middleware === null) {//Si le middleware n'est pas renseigné
        // Le middleware est renseigné au premier paramètre.
            $this->middlewares[] = $routePrefix;
        } else {
            $this->middlewares[] = new RoutePrefixedMiddleware($this->getContainer(), $routePrefix, $middleware);
        }
        return $this;
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $this->index++;
        if ($this->index > 1) {
            throw new \Exception();
        }
        $middleware = new CombinedMiddleware($this->getContainer(), $this->middlewares);
        return $middleware->process($request, $this);
    }
    
    public function run(ServerRequestInterface $request): ResponseInterface
    {
        foreach ($this->modules as $module) {
            $this->getContainer()->get($module);
        }
        
        return $this->handle($request);
    }
    
    public function getContainer():ContainerInterface
    {
        if ($this->container === null) {
            $builder = new \DI\ContainerBuilder();
            $env = getenv('ENV') ?: 'production';
            if ($env === 'production') {
                $builder->enableCompilation('tmp/di');
                $builder->writeProxiesToFile(true, 'tmp/proxies');
                //$builder->enableDefinitionCache();
/var/www/www.cadi-tco.re/src/Framework/App.php
        return $this;
    }
    
    public function handle(ServerRequestInterface $request): ResponseInterface
    {
        $this->index++;
        if ($this->index > 1) {
            throw new \Exception();
        }
        $middleware = new CombinedMiddleware($this->getContainer(), $this->middlewares);
        return $middleware->process($request, $this);
    }
    
    public function run(ServerRequestInterface $request): ResponseInterface
    {
        foreach ($this->modules as $module) {
            $this->getContainer()->get($module);
        }
        
        return $this->handle($request);
    }
    
    public function getContainer():ContainerInterface
    {
        if ($this->container === null) {
            $builder = new \DI\ContainerBuilder();
            $env = getenv('ENV') ?: 'production';
            if ($env === 'production') {
                $builder->enableCompilation('tmp/di');
                $builder->writeProxiesToFile(true, 'tmp/proxies');
                //$builder->enableDefinitionCache();
            }
            
            if ($this->definition) {
                $builder->addDefinitions($this->definition);
            }

            foreach ($this->modules as $module) {
                if ($module::DEFINITIONS) {
                    $builder->addDefinitions($module::DEFINITIONS);
/var/www/www.cadi-tco.re/public/index.php
    )
    ->pipe(
        $container->get('superadmin.prefix'),
        $container->get(Framework\Auth\RoleMiddlewareFactory::class)->makeForRole('superadmin')
    )
    ->pipe(PostMaxSizeMiddleware::class)
    ->pipe(MethodMiddleware::class)
    ->pipe(RendererRequestMiddleware::class)//Ajoute des variables globales
    ->pipe(CsrfMiddleware::class)
    ->pipe(RouterMiddleware::class)
    ->pipe(DispatcherMiddleware::class)
    ->pipe(NotFoundMiddleware::class);
        
if(!empty($_COOKIE['cookie-debug'])) {
    $fichier = fopen('timeScript.txt', 'a');
    fwrite($fichier, 'pipes ok : '.date('H:i:s')."\n");
}

if (php_sapi_name() !=="cli") {
    $response = $app->run(\GuzzleHttp\Psr7\ServerRequest::fromGlobals());
    Http\Response\send($response);
    if(!empty($_COOKIE['cookie-debug'])) {
        $fichier = fopen('timeScript.txt', 'a');
        fwrite($fichier, 'End : '.date('H:i:s')."\n");
    }
}
 

Environment & details:

empty
empty
empty
empty
Key Value
csrf Array ( [0] => e4bf1688026d37a3be15165c9338cc80 )
Key Value
REDIRECT_HTTPS on
REDIRECT_SSL_TLS_SNI www.cadi.re
REDIRECT_STATUS 200
HTTPS on
SSL_TLS_SNI www.cadi.re
HTTP_ACCEPT */*
HTTP_USER_AGENT claudebot
HTTP_HOST www.cadi.re
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SERVER_SIGNATURE <address>Apache/2.4.25 (Debian) Server at www.cadi.re Port 443</address>
SERVER_SOFTWARE Apache/2.4.25 (Debian)
SERVER_NAME www.cadi.re
SERVER_ADDR 10.254.252.98
SERVER_PORT 443
REMOTE_ADDR 34.236.152.203
DOCUMENT_ROOT /var/www/www.cadi-tco.re/public
REQUEST_SCHEME https
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /var/www/www.cadi-tco.re/public
SERVER_ADMIN webmaster@localhost
SCRIPT_FILENAME /var/www/www.cadi-tco.re/public/index.php
REMOTE_PORT 43214
REDIRECT_URL /categorie-307-vannes-jonctions-et-raccords.html
GATEWAY_INTERFACE CGI/1.1
SERVER_PROTOCOL HTTP/1.1
REQUEST_METHOD GET
QUERY_STRING
REQUEST_URI /categorie-307-vannes-jonctions-et-raccords.html
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1710838084.765
REQUEST_TIME 1710838084
empty
0. Whoops\Handler\PrettyPageHandler