controller.php 4.79 KB
Newer Older
1
<?php
2
namespace Controller;
3 4 5 6 7 8

class Controller
{
    // Constructeur
    public function __construct()
    {
9
        $f3=\Base::instance();
10 11 12 13 14
    }

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

18 19 20 21 22 23 24
        if (php_sapi_name() == 'cli') {
            $HTTP_HOST = 'localhost';
        } else {
            $HTTP_HOST = $_SERVER['HTTP_HOST'];
        }
        define("ROOTURL", "https://".$HTTP_HOST.'/');

Okhin's avatar
Okhin committed
25
        // Sélection de la langue par header
Okhin's avatar
Okhin committed
26
        $lang = 'fr_FR';
Okhin's avatar
Okhin committed
27 28
        $lang_short = 'fr';

Okhin's avatar
Okhin committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42
        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')) : [];
            }
        }

43
        foreach (explode(',', LANGUAGES) as $language) {
Okhin's avatar
Okhin committed
44
            foreach ($accept_languages as $accept_language) {
Okhin's avatar
Okhin committed
45
                if (strpos($language, $accept_language)>=0) {
Okhin's avatar
Okhin committed
46 47 48
                    $lang = $language;
                    $lang_short = explode($language, '-')[0];
                }
49 50
            }
        }
Okhin's avatar
Okhin committed
51 52

        if (!bindtextdomain("messages", "../locales/")) {
53 54 55 56 57 58
            echo "<!-- bondtextdomain failed -->";
        }
        // Language ok, set the locale environment
        putenv("LC_MESSAGES=".$lang);
        putenv("LANG=".$lang);
        putenv("LANGUAGE=".$lang);
Okhin's avatar
Okhin committed
59

60
        if (!setlocale(LC_ALL, $lang)) {
Okhin's avatar
Okhin committed
61
            echo "<!-- setlocale $lang failed -->";
62
        }
Okhin's avatar
Okhin committed
63

64 65 66 67 68 69 70 71 72 73 74
        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
75 76 77 78 79 80
        $f3->set('DB', new \DB\SQL(
            SQL_DSN,
            SQL_USER,
            SQL_PASSWORD,
            array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION)
        ));
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

        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);
104 105 106 107 108 109

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

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

Okhin's avatar
Okhin committed
121 122 123 124 125 126 127
        // 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', '');
        }
128 129 130 131
        // Rendu de la page
        if ($this->template!='') {
            echo \Template::instance()->render($this->template);
        }
132 133 134
        // Une fois que tout est affiché, on peut supprimer les notifications
        $f3->clear('SESSION.message');
        $f3->clear('SESSION.error');
135 136 137 138 139 140 141 142 143 144 145 146
    }

    // 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')) {
147
        //   $f3->error('400', 'CSRF Validation error');
148 149 150 151 152 153 154 155 156
        //}

        // 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));
        }
    }
};