| 311 | jpm | 1 | <?php
 | 
        
           |  |  | 2 | // declare(encoding='UTF-8');
 | 
        
           |  |  | 3 | /**
 | 
        
           |  |  | 4 |  * AppControleur est le controlleur principal de l'application.
 | 
        
           |  |  | 5 |  * Elle repartie les demandes utilisateurs dans les différents modules, executent les actions et redistribue le code
 | 
        
           |  |  | 6 |  * html dans les différentes fonctions d'affichage.
 | 
        
           |  |  | 7 |  * C'est une Singleton.
 | 
        
           |  |  | 8 |  *
 | 
        
           |  |  | 9 |  * @category	PHP 5.2
 | 
        
           |  |  | 10 |  * @package		exemple
 | 
        
           |  |  | 11 |  * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
 | 
        
           |  |  | 12 |  * @copyright	2010 Tela-Botanica
 | 
        
           |  |  | 13 |  * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 | 
        
           |  |  | 14 |  * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
 | 
        
           |  |  | 15 |  * @version		$Id$
 | 
        
           |  |  | 16 |  */
 | 
        
           |  |  | 17 |   | 
        
           |  |  | 18 | class AppControleur extends Controleur {
 | 
        
           | 325 | jpm | 19 |   | 
        
           |  |  | 20 | 	/**
 | 
        
           |  |  | 21 |  	* Instance de la classe pointant sur elle même (pour le pattern singleton)
 | 
        
           |  |  | 22 |  	*/
 | 
        
           |  |  | 23 | 	private static $instance = null;
 | 
        
           |  |  | 24 |   | 
        
           |  |  | 25 | 	/**
 | 
        
           |  |  | 26 |  	* Paramètres pour les collections
 | 
        
           |  |  | 27 |  	*/
 | 
        
           |  |  | 28 | 	private static $parametres = array();
 | 
        
           |  |  | 29 |   | 
        
           |  |  | 30 | 	/**
 | 
        
           |  |  | 31 |  	* Constructeur vide
 | 
        
           |  |  | 32 |  	*/
 | 
        
           |  |  | 33 | 	public function __construct() {
 | 
        
           |  |  | 34 | 		$sortie = array('titre' => '', 'description' => '', 'tags' => '',
 | 
        
           |  |  | 35 | 			'corps' => '', 'tete' => '', 'pied' => '', 'navigation' => '');
 | 
        
           |  |  | 36 | 		$url = new Url(Config::get('url_base_index'));
 | 
        
           |  |  | 37 | 		self::$parametres = array(
 | 
        
           |  |  | 38 | 			'module' => Config::get('module_defaut'),
 | 
        
           |  |  | 39 | 			'action' => Config::get('action_defaut'),
 | 
        
           |  |  | 40 | 			'sortie' => $sortie,
 | 
        
           |  |  | 41 | 			'url' => $url);
 | 
        
           |  |  | 42 | 		parent::__construct();
 | 
        
           |  |  | 43 | 	}
 | 
        
           |  |  | 44 |   | 
        
           |  |  | 45 | 	/**
 | 
        
           |  |  | 46 |  	* Initialisation du controleur principal en fonction des paramêtres de l'url.
 | 
        
           |  |  | 47 |  	*/
 | 
        
           |  |  | 48 | 	public static function initialiser() {
 | 
        
           |  |  | 49 | 		self::verifierCreationInstance();
 | 
        
           |  |  | 50 | 		self::gererSession();
 | 
        
           |  |  | 51 |   | 
        
           |  |  | 52 | 		if (isset($_GET['module'])) {
 | 
        
           |  |  | 53 | 			self::$parametres['module'] = $_GET['module'];
 | 
        
           |  |  | 54 | 		}
 | 
        
           |  |  | 55 | 		if (isset($_GET['action'])) {
 | 
        
           |  |  | 56 | 			self::$parametres['action'] = $_GET['action'];
 | 
        
           |  |  | 57 | 		}
 | 
        
           |  |  | 58 | 		self::$parametres['url']->setRequete(array('action' => self::$parametres['action'], 'module' => self::$parametres['module']));
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 | 		Registre::set('parametres', &self::$parametres);
 | 
        
           |  |  | 61 |   | 
        
           |  |  | 62 | 		$ClasseModule = self::$parametres['module'];
 | 
        
           |  |  | 63 | 		$action = self::$parametres['action'];
 | 
        
           |  |  | 64 | 		$module = new $ClasseModule();
 | 
        
           |  |  | 65 | 		$module->$action();
 | 
        
           |  |  | 66 | 		self::fusionnerSortie($module->getSortie());
 | 
        
           |  |  | 67 | 	}
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 | 	private static function gererSession() {
 | 
        
           |  |  | 70 | 		if (Config::get('session_demarrage')) {
 | 
        
           |  |  | 71 | 			// Attribution d'un nom à la session
 | 
        
           |  |  | 72 | 			session_name(Config::get('session_nom'));
 | 
        
           |  |  | 73 | 			// Démarrage de la session
 | 
        
           |  |  | 74 | 			session_start();
 | 
        
           |  |  | 75 | 		}
 | 
        
           |  |  | 76 | 	}
 | 
        
           |  |  | 77 |   | 
        
           |  |  | 78 | 	/**
 | 
        
           |  |  | 79 |  	* Fusionne un tableau de sortie par défaut avec le tableau renvoyé par l'action du module.
 | 
        
           |  |  | 80 |  	* @param array le tableau à fusionner
 | 
        
           |  |  | 81 |  	*/
 | 
        
           |  |  | 82 | 	private static function fusionnerSortie($sortie) {
 | 
        
           |  |  | 83 | 		self::$parametres['sortie'] = array_merge(self::$parametres['sortie'], $sortie);
 | 
        
           |  |  | 84 | 	}
 | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 |   | 
        
           |  |  | 87 | 	/**
 | 
        
           |  |  | 88 |  	* Vérifie si l'instance de classe à été crée, si non la crée.
 | 
        
           |  |  | 89 |  	*/
 | 
        
           |  |  | 90 | 	private static function verifierCreationInstance() {
 | 
        
           |  |  | 91 | 		if (empty(self::$instance)) {
 | 
        
           |  |  | 92 | 			self::$instance = new AppControleur();
 | 
        
           |  |  | 93 | 		}
 | 
        
           |  |  | 94 | 	}
 | 
        
           |  |  | 95 |   | 
        
           |  |  | 96 | 	/**
 | 
        
           |  |  | 97 |  	* Retourne le titre du contenu de l'application.
 | 
        
           |  |  | 98 |  	*/
 | 
        
           |  |  | 99 | 	public static function getMetaTitre() {
 | 
        
           |  |  | 100 | 		$contenu = self::$parametres['sortie']['titre'];
 | 
        
           |  |  | 101 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 102 | 		return $sortie;
 | 
        
           |  |  | 103 | 	}
 | 
        
           |  |  | 104 |   | 
        
           |  |  | 105 | 	/**
 | 
        
           |  |  | 106 |  	* Retourne la description du contenu de l'application.
 | 
        
           |  |  | 107 |  	*/
 | 
        
           |  |  | 108 | 	public static function getMetaDescription() {
 | 
        
           |  |  | 109 | 		$contenu = self::$parametres['sortie']['description'];
 | 
        
           |  |  | 110 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 111 | 		return $sortie;
 | 
        
           |  |  | 112 | 	}
 | 
        
           |  |  | 113 |   | 
        
           |  |  | 114 | 	/**
 | 
        
           |  |  | 115 |  	* Retourne les mots-clés (tags) du contenu de l'application.
 | 
        
           |  |  | 116 |  	*/
 | 
        
           |  |  | 117 | 	public static function getMetaTags() {
 | 
        
           |  |  | 118 | 		$contenu = self::$parametres['sortie']['tags'];
 | 
        
           |  |  | 119 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 120 | 		return $sortie;
 | 
        
           |  |  | 121 | 	}
 | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 | 	/**
 | 
        
           |  |  | 124 |  	* Retourne le contenu du corps de l'application.
 | 
        
           |  |  | 125 |  	*/
 | 
        
           |  |  | 126 | 	public static function getContenuCorps() {
 | 
        
           |  |  | 127 | 		$contenu = self::$parametres['sortie']['corps'];
 | 
        
           |  |  | 128 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 129 | 		return $sortie;
 | 
        
           |  |  | 130 | 	}
 | 
        
           |  |  | 131 |   | 
        
           |  |  | 132 | 	/**
 | 
        
           |  |  | 133 |  	* Retourne le contenu de la tête de l'application.
 | 
        
           |  |  | 134 |  	*/
 | 
        
           |  |  | 135 | 	public static function getContenuTete() {
 | 
        
           |  |  | 136 | 		$contenu = self::$parametres['sortie']['tete'];
 | 
        
           |  |  | 137 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 138 | 		return $sortie;
 | 
        
           |  |  | 139 | 	}
 | 
        
           |  |  | 140 |   | 
        
           |  |  | 141 | 	/**
 | 
        
           |  |  | 142 |  	* Retourne le contenu du pied de l'application.
 | 
        
           |  |  | 143 |  	*/
 | 
        
           |  |  | 144 | 	public static function getContenuPied() {
 | 
        
           |  |  | 145 | 		$contenu = self::$parametres['sortie']['pied'];
 | 
        
           |  |  | 146 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 147 | 		return $sortie;
 | 
        
           |  |  | 148 | 	}
 | 
        
           |  |  | 149 |   | 
        
           |  |  | 150 | 	/**
 | 
        
           |  |  | 151 |  	* Retourne les éléments de navigation de l'application.
 | 
        
           |  |  | 152 |  	*/
 | 
        
           |  |  | 153 | 	public static function getContenuNavigation() {
 | 
        
           |  |  | 154 | 		$contenu = self::$parametres['sortie']['navigation'];
 | 
        
           |  |  | 155 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 156 | 		return $sortie;
 | 
        
           |  |  | 157 | 	}
 | 
        
           |  |  | 158 |   | 
        
           |  |  | 159 | 	/**
 | 
        
           |  |  | 160 |  	* Retourne les chronos pris dans l'appli
 | 
        
           |  |  | 161 |  	*/
 | 
        
           |  |  | 162 | 	public static function getChrono() {
 | 
        
           |  |  | 163 | 		$sortie = '';
 | 
        
           |  |  | 164 | 		if (Config::get('benchmark_chrono')) {
 | 
        
           |  |  | 165 | 			$chrono = Chronometre::afficherChrono();
 | 
        
           |  |  | 166 | 			$sortie = self::convertirEncodage($chrono);
 | 
        
           |  |  | 167 | 		}
 | 
        
           |  |  | 168 | 		return $sortie;
 | 
        
           |  |  | 169 | 	}
 | 
        
           |  |  | 170 |   | 
        
           |  |  | 171 | 	/**
 | 
        
           |  |  | 172 | 	 * Retourne les messages d'exceptions et d'erreurs.
 | 
        
           |  |  | 173 | 	 */
 | 
        
           |  |  | 174 | 	public static function getExceptions() {
 | 
        
           |  |  | 175 | 		$contenu = (Config::get('debogage')) ? GestionnaireException::getExceptions() : '';
 | 
        
           |  |  | 176 | 		$sortie = self::convertirEncodage($contenu);
 | 
        
           |  |  | 177 | 		return $sortie;
 | 
        
           |  |  | 178 | 	}
 | 
        
           |  |  | 179 |   | 
        
           |  |  | 180 | 	/**
 | 
        
           |  |  | 181 | 	 * Convertion du contenu de l'application (voir fichier config.ini : appli_encodage),
 | 
        
           |  |  | 182 | 	 * dans le format de sortie désiré (voir fichier config.ini : sortie_encodage).
 | 
        
           |  |  | 183 | 	 * Cette convertion a lieu seulement si les formats sont différents.
 | 
        
           |  |  | 184 | 	 */
 | 
        
           |  |  | 185 | 	private static function convertirEncodage($contenu) {
 | 
        
           |  |  | 186 | 		if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
 | 
        
           |  |  | 187 | 			$contenu = mb_convert_encoding($contenu, Config::get('sortie_encodage'), Config::get('appli_encodage'));
 | 
        
           |  |  | 188 | 		}
 | 
        
           |  |  | 189 | 		return $contenu;
 | 
        
           |  |  | 190 | 	}
 | 
        
           | 311 | jpm | 191 | }
 | 
        
           |  |  | 192 | ?>
 |