Skip to content
Extraits de code Groupes Projets
controller.php 5,22 Kio
<?php
namespace Controller;

class Controller
{
    // Constructeur
    public function __construct()
    {
        $f3=\Base::instance();
    }

    // Fonction appelée avant routage
    public function beforeRoute($f3, $args)
    {
        // Template de base par défaut
        $this->template = "base.html";

        if (php_sapi_name() == 'cli') {
            $HTTP_HOST = 'localhost';
        } else {
            $HTTP_HOST = $_SERVER['HTTP_HOST'];
        }
        define("ROOTURL", "https://".$HTTP_HOST.'/');

        // Sélection de la langue par header
        $lang = 'fr_FR';
        $lang_short = 'fr';

        if ($f3->exists('GET.lang')) {
            // On force la langue passée dans l'URL GET
            $accept_languages = [$f3->get('GET.lang')];
            $f3->set('SESSION.lang', $f3->get('GET.lang'));
        } else {
            if ($f3->exists('SESSION.lang')) {
                // On a déjà défini une langue précédemment
                $accept_languages = [$f3->get('SESSION.lang')];
            } else {
                // On récupère la langue du navigateur
                $accept_languages = $f3->exists('HEADERS.Accept-Language') ? explode(',', $f3->get('HEADERS.Accept-Language')) : [];
            }
        }

        foreach (explode(',', LANGUAGES) as $language) {
            foreach ($accept_languages as $accept_language) {
                if (substr($language, 0, strlen($accept_language))===$accept_language) {
                    $lang = $language;
                    $lang_short = explode($language, '-')[0];
                }
            }
        }

        if (!bindtextdomain("messages", "../locales/")) {
            echo "<!-- bondtextdomain failed -->";
        }
        // Language ok, set the locale environment
        putenv("LC_MESSAGES=".$lang);
        putenv("LANG=".$lang);
        putenv("LANGUAGE=".$lang);

        if (!setlocale(LC_ALL, $lang)) {
            // try the UTF8 version
            putenv("LC_MESSAGES=".$lang.".utf8");
            putenv("LANG=".$lang.".utf8");
            putenv("LANGUAGE=".$lang.".utf8");
            if (!setlocale(LC_ALL, $lang.".utf8")) {
                echo "<!-- setlocale $lang failed -->";
            }
        }

        if (!textdomain("messages")) {
            echo "<!-- textdomain failed -->";
        }
        $charset = "UTF-8";
        bind_textdomain_codeset("messages", $charset);

        // Variables pour les templates
        $f3->set('lang', $lang);
        $f3->set('lang_short', $lang_short);

        // Initialize DB
        $f3->set('DB', new \DB\SQL(
            SQL_DSN,
            SQL_USER,
            SQL_PASSWORD,
            array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION)
        ));

        if ($f3->get('VERB') == 'POST') {
            $this->sanitizeForms($f3);
        }

        $f3->set('mail', array(
            "from" => "contact@laquadrature.net",
            "fromName" => "La Quadrature du Net"
        ));
        $atailles = array(
            1 => _('Coupe Homme, Taille') . ' S',
            2 => _('Coupe Homme, Taille') . ' M',
            3 => _('Coupe Homme, Taille') . ' L',
            4 => _('Coupe Homme, Taille') . ' XL',
            5 => _('Coupe Femme, Taille') . ' S',
            6 => _('Coupe Femme, Taille') . ' M',
            7 => _('Coupe Femme, Taille') . ' L',
            8 => _('Coupe Femme, Taille') . ' XL',
            9 => _('Coupe Homme, Taille') . ' XXL',
            10 => _('Coupe Femme, Taille') . ' XXL',
        );
        asort($atailles);
        $f3->set('atailles', $atailles);

        // On initialise les messages en tableau vide, par défaut
        $f3->set('SESSION.message', array());
        $f3->set('SESSION.error', array());

        // Ceci n'est valable que pour les tests en CLI
        if (strlen($f3["RESPONSE"])>0) {
            $f3->clear("RESPONSE");
            return;
        }
    }

    // Fonction appelée après routage
    public function afterRoute($f3, $args)
    {
        // Ceci n'est valable que pour les tests en CLI
        if (strlen($f3["RESPONSE"])>0) {
            echo $f3["RESPONSE"];
            return;
        }

        // Test si il y a des messages
        if (!$f3->exists('SESSION.message')) {
            $f3->push('SESSION.message', '');
        }
        if (!$f3->exists('SESSION.error')) {
            $f3->push('SESSION.error', '');
        }
        // Rendu de la page
        if ($this->template!='') {
            echo \Template::instance()->render($this->template);
        }
        // Une fois que tout est affiché, on peut supprimer les notifications
        $f3->clear('SESSION.message');
        $f3->clear('SESSION.error');
    }

    // Fonction utilisée pour sanitiser les données
    public function sanitizeForms($f3)
    {
        // We need to check we do have a POST
        if ($f3->get('VERB') != 'POST') {
            return;
        }

        // CSRF checks
        //if ($f3->get('POST.csrf') != $f3->get('container')['session']->get('csrf')) {
        //   $f3->error('400', 'CSRF Validation error');
        //}

        // First, let's clean all the data
        // actual data validation is done in the functions
        foreach ($f3->get('POST') as $key => $value) {
            $f3->set($key, $f3->clean($value));
        }
    }
};