Overview

Packages

  • Framework
  • PHP

Classes

  • Application
  • Chronometre
  • Config
  • Controleur
  • Debug
  • GestionnaireException
  • I18n
  • Log
  • Modele
  • Registre
  • SquelettePhp
  • Url

Functions

  • autoloadAppliDefaut
  • autoloadFw
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  1: <?php
  2: // declare(encoding='UTF-8');
  3: /**
  4:  * Classe Controleur, coeur d'une application, c'est normalement la seule classe d'une application
  5:  * qui devrait être appelée de l'extérieur.
  6:  * Elle est abstraite donc doit obligatoirement être étendue.
  7:  *
  8:  * @category    PHP 5.2
  9:  * @package     Framework
 10:  * @author      Aurélien PERONNET <aurelien@tela-botanica.org>
 11:  * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
 12:  * @copyright   Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
 13:  * @license     GNU-GPL-v3 <http://www.gnu.org/licenses/gpl.html>
 14:  * @license     CECILL-v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
 15:  */
 16: abstract class Controleur {
 17:     /** Variable statique indiquant que les tableaux _GET et _POST ont déjà été encodé au format de l'appli. */
 18:     private static $encodage = false;
 19: 
 20:     /** Registre global, normalement accessible partout */
 21:     private $registre;
 22: 
 23:     /**
 24:      * Constructeur par défaut
 25:      */
 26:     public function __construct() {
 27:         $this->registre = Registre::getInstance();
 28:         $this->registre->set('base_chemin_modele', Config::get('chemin_modeles'));
 29:         $this->registre->set('base_chemin_squelette', Config::get('chemin_squelettes'));
 30:         $this->registre->set('base_chemin_controleur', Config::get('chemin_controleurs'));
 31:         $this->registre->set('base_url_application', new Url(Config::get('url_base')));
 32:         $this->verifierEtReencoderTableauRequete();
 33:     }
 34: 
 35:     /**
 36:     * Charge un modele donné et le rend disponible sous la forme $this->nom_modele
 37:     *
 38:     * @param string $nom_modele le nom du modèle à  charger
 39:     *
 40:     * @return boolean false si le chargement a échoué, sinon true.
 41:     */
 42:     final protected function chargerModele($nom_modele) {
 43:         $sortie = true;
 44:         $modele = $this->getModele($nom_modele);
 45:         if ($modele !== false) {
 46:             $this->$nom_modele = new $nom_modele;
 47:         } else {
 48:             $sortie = false;
 49:         }
 50:         return $sortie;
 51:     }
 52: 
 53:     /**
 54:     * Retourne un modele donné
 55:     *
 56:     * @param string $nom_modele le nom du fichier modèle à charger sans son extension
 57:     * @param String $ext        l'extension du fichier du modèel (par défaut : ".php"
 58:     *
 59:     * @return mixed false si le chargement a échoué, sinon l'objet du modèle demandé.
 60:     */
 61:     final protected function getModele($nom_modele, $ext = '.php') {
 62:         $sortie = false;
 63:         $chemin_modele = $this->registre->get('base_chemin_modele').$nom_modele.$ext;
 64:         if (file_exists($chemin_modele)) {
 65:             include_once $chemin_modele;
 66:             if (class_exists($nom_modele)) {
 67:                 $sortie = new $nom_modele;
 68:             }
 69:         }
 70:         return $sortie;
 71:     }
 72: 
 73:     /**
 74:      * Fonction prenant en paramètre le nom d'un squelette et un tableau associatif de données,
 75:      * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
 76:      *
 77:      * @param String $nom_squelette le nom du squelette sans son extension
 78:      * @param Array  $donnees       un tableau associatif contenant les variables a injecter dans la vue
 79:      * @param String $ext           l'extension du fichier du squelette (par défaut : ".tpl.html"
 80:      *
 81:      * @return boolean false si la vue n'existe pas, sinon la chaine résultat.
 82:      */
 83:     final protected function getVue($nom_squelette, $donnees = array(), $ext = '.tpl.html') {
 84:         $donnees = $this->preTraiterDonnees($donnees);
 85:         $chemin_squelette = ($this->registre->get('base_chemin_squelette')).$nom_squelette.$ext;
 86:         $sortie = SquelettePhp::analyser($chemin_squelette, $donnees);
 87: 
 88:         return $sortie;
 89:     }
 90: 
 91:     /**
 92:      * Fonction prenant en paramètre un tableau de données et effectuant un traitement dessus.
 93:      * Cette fonction est à surcharger dans les classes filles pour automatiser un traitement
 94:      * avant chaque chargement de vue.
 95:      *
 96:      * @param Array $donnees Le tableau de données à traiter
 97:      *
 98:      * @return Array $donnees Le tableau de données traité
 99:      */
100:     protected function preTraiterDonnees($donnees) {
101:         return $donnees;
102:     }
103: 
104:     /**
105:      * Procédure vérifiant l'encodage des tableaux $_GET et $_POST et les transcodant dans l'encodage de l'application
106:      */
107:     protected function verifierEtReencoderTableauRequete() {
108:         if (self::$encodage == false && Config::get('sortie_encodage') != Config::get('appli_encodage')) {
109:             $_POST = $this->encoderTableau($_POST, Config::get('appli_encodage'), Config::get('sortie_encodage'));
110:             $_GET = $this->encoderTableau($_GET, Config::get('appli_encodage'), Config::get('sortie_encodage'));
111:             self::$encodage = true;
112:         }
113: 
114:         // traitement des magic quotes
115:         $this->verifierEtTraiterSlashTableauRequete();
116:     }
117: 
118:     /**
119:      * Procédure vérifiant l'activation des magic quotes et remplace les slash dans les tableaux de requete
120:      */
121:     private function verifierEtTraiterSlashTableauRequete() {
122: 
123:         if ( get_magic_quotes_gpc() ) {
124: 
125:             if (!function_exists('stripslashes_deep')) {
126:                 function stripslashes_deep( $value ) {
127: 
128:                 return ( is_array($value) )
129:                     ? array_map('stripslashes_deep', $value)
130:                     : stripslashes($value);
131: 
132:                 } // end of 'stripslashes_deep()'
133: 
134:                 $_GET = array_map('stripslashes_deep', $_GET);
135:                 $_POST = array_map('stripslashes_deep', $_POST);
136:                 $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
137:             }
138:         }
139:     }
140: 
141:     /**
142:      * Fonction récursive transcodant toutes les valeurs d'un tableau de leur encodage d'entrée vers un encodage de sortie donné
143:      * @param $tableau Array Un tableau de données à encoder
144:      * @param $encodage_sortie String l'encodage vers lequel on doit transcoder
145:      * @param $encodage_entree String l'encodage original des chaines du tableau (optionnel)
146:      * @return Array Le tableau encodé dans l'encodage de sortie
147:      *
148:      */
149:     final protected function encoderTableau($tableau, $encodage_sortie, $encodage_entree = null) {
150:         if (is_array($tableau)) {
151:             foreach ($tableau as $cle => $valeur) {
152:                 if (is_array($valeur)) {
153:                     $tableau[$cle] = $this->encoderTableau($valeur, $encodage_sortie, $encodage_entree);
154:                 } else {
155:                     $tableau[$cle] = mb_convert_encoding($valeur, $encodage_sortie, $encodage_entree);
156:                 }
157:             }
158:         }
159:         return $tableau;
160:     }
161: }
162: ?>
TBFramework - v0.2 API documentation generated by ApiGen 2.8.0