-
Bastien Le Querrec a rédigéBastien Le Querrec a rédigé
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));
}
}
};