controller.php 4.5 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.'/');

25 26 27 28 29 30 31 32 33 34 35 36 37
        // Sélection de la langue par header
        $lang = 'fr-FR';
        $lang_short = 'fr';

        var_dump($f3->get('HEADERS'));
        /*$accept_languages = $f3->exists('HEADERS.Accept-Language') ? $f3->get('HEADERS.Accept-Language').split[','] : [];
        //$accept_languages[] = $f3->exists('GET.lang') ? $f3->get('GET.lang') : 'C' ; 
        foreach ($f3->get('languages') as $language) {
            foreach ($accept_languages as $accept_language) {
                if (substr($language, $accept_language) > 0) {
                    $lang = $language;
                    $lang_short = explode($language, '-')[0];
                }
38 39
            }
        }
40
         */
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
        if (!bindtextdomain("messages", dirname(__FILE__)."/../locales")) {
            echo "<!-- bondtextdomain failed -->";
        }
        // Language ok, set the locale environment
        putenv("LC_MESSAGES=".$lang);
        putenv("LANG=".$lang);
        putenv("LANGUAGE=".$lang);
        // this locale MUST be selected in "dpkg-reconfigure locales"
        if (!setlocale(LC_ALL, $lang)) {
            echo "<!-- setlocale 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
63 64 65 66 67 68
        $f3->set('DB', new \DB\SQL(
            SQL_DSN,
            SQL_USER,
            SQL_PASSWORD,
            array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION)
        ));
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91

        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);
92 93 94 95 96 97

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

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

okhin's avatar
okhin committed
109 110 111 112 113 114 115
        // 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', '');
        }
116 117 118 119
        // Rendu de la page
        if ($this->template!='') {
            echo \Template::instance()->render($this->template);
        }
120 121 122
        // Une fois que tout est affiché, on peut supprimer les notifications
        $f3->clear('SESSION.message');
        $f3->clear('SESSION.error');
123 124 125 126 127 128 129 130 131 132 133 134
    }

    // 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')) {
135
        //   $f3->error('400', 'CSRF Validation error');
136 137 138 139 140 141 142 143 144
        //}

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