burger-quizz/controller.php

174 lines
5.3 KiB
PHP

<?php
/**
* @brief Gère l'affichage des pages en fonction de l'argument 'page' de la barre d'adresse
* @note définit également la structure de la page (<head>)
*/
class controller
{
///Instance de la classe
private static $Ctrl;
///Code de la page courante
private $currpage_code;
///Titre de la page courante
private $currpage_title;
///URL de la page courante
private $currpage_url;
/**
* @brief Instancie le contrôleur et charge les données de la barre d'adresse
* @note Si le contrôleur a déja été instancié, cette methode executera uniquement route()
*/
public static function init()
{
//Si l'instance de la classe est NULL
if (!isset(self::$Ctrl))
{
//On instancie un nouveau controlleur
self::$Ctrl = new controller();
}
//On lance le routage
self::$Ctrl->route();
}
/**
* @brief Récupère le contrôleur utilisé
* @return controller
* @warning Si le contrôleur n'a pas été instancié, renverra null
*/
public static function get()
{
return self::$Ctrl;
}
/**
* @brief Génère le code HTML de la page désirée, enfonction du terminal
* @note le contrôleur doit avoir été instancié et être routé
*/
public function render()
{
//Chargement du fichier user.php pour la session et de la classe DAO
require_once "metier/user.php";
//Dérrage de la sessions
session_start();
//Detection du type de terminal (smartphone ou normal)
$bSmartphone =
strstr($_SERVER['HTTP_USER_AGENT'], 'Android')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'BlackBerry')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Windows')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Opera Mini')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'Mobile')
|| strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
//Cette variable permettra par la suite de décider du placement de
// certains menus ainsi que de la feuille de style
?>
<!-- Structure globale du template -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<?php
echo "<link href=\"style/global.css\" rel=\"stylesheet\" type=\"text/css\" />";
if ($bSmartphone)
{
echo "<link href=\"style/smartphone.css\" rel=\"stylesheet\" type=\"text/css\" />";
}
?>
<script type="text/javascript" src ="scripts/manager.js"></script>
<?php echo " <title>BurgerQuizz - $this->currpage_title</title>"; ?>
<link rel="icon" type="image/ico" href="favicon.ico" />
</head>
<body>
<?php
// Bandeau de haut de page
include 'view/template/header.php';
// Menu de GAUCHE
if ($bSmartphone)
{
include 'view/template/smartphone_menu_left.php';
}
else
{
include 'view/template/menu_left.php';
}
// Menu de DROITE
if ($bSmartphone)
{
include 'view/template/smartphone_menu_right.php';
}
else
{
include 'view/template/menu_right.php';
}
//Contenu principal de la page
echo "<div id=\"core\">";
echo " <div id=\"content\">";
include $this->currpage_url;
echo " </div>";
echo "</div>";
?>
</body>
</html>
<?php
}
/**
* @brief Charge les données de la barre d'adresse
* @brief Charge les vars $currpage_code, $currpage_title, $currpage_url correspondant à la page en cours grace au param 'page'
*/
function route()
{
//Récupération de la page actuelle
if (isset($_GET['page']))
{//si le code est inscrit {
if (!array_key_exists($_GET['page'], config::$pages))
{//si le code n'est pas dans la liste des pages
$this->currpage_code = '404';
} else
{
$this->currpage_code = $_GET['page'];
}
} else
{
$this->currpage_code = 'welcome';
}
//Récupération du template à utiliser (smartphone/normal)
if (isset($_GET['tmpl']) && $_GET['tmpl'] == "smartphone")
{
$this->currpage_template = "smartphone";
} else
{
$this->currpage_template = "global";
}
//Titre & URL
$this->currpage_title = config::$pages[$this->currpage_code][0];
$this->currpage_url = config::$pages[$this->currpage_code][1];
}
}
?>