Subversion Repositories Applications.framework

Rev

Rev 158 | Rev 165 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 aurelien 1
<?php
105 aurelien 2
// declare(encoding='UTF-8');
5 aurelien 3
/**
151 jpm 4
 * Classe Controleur, coeur d'une application, c'est normalement la seule classe d'une application
129 aurelien 5
 * qui devrait être appelée de l'extérieur.
151 jpm 6
 * Elle est abstraite donc doit obligatoirement être étendue.
129 aurelien 7
 *
151 jpm 8
 * @category	php5
9
 * @package		Framework
10
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
11
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @copyright	2009 Tela-Botanica
13
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
15
 * @version		SVN: $$Id: Controleur.php 162 2010-03-05 09:05:37Z aurelien $$
16
 * @link		/doc/framework/
129 aurelien 17
 *
18
 */
80 jpm 19
abstract class Controleur {
120 aurelien 20
	/**
21
	 * Registre global, normalement accessible partout
22
	 */
23
	private $registre;
24
 
25
	/**
26
	 * Constructeur par défaut
27
	 */
141 jpm 28
	public function __construct() {
120 aurelien 29
		if (Config::existe('fw_html_errors')) {
30
			ini_set('html_errors', Config::get('fw_html_errors'));
31
		}
32
 
33
		$this->registre = Registre::getInstance();
34
		$this->registre->set('base_chemin_modele', Config::get('chemin_modeles'));
35
		$this->registre->set('base_chemin_squelette', Config::get('chemin_squelettes'));
36
		$this->registre->set('base_chemin_controleur', Config::get('chemin_controleurs'));
37
		$this->registre->set('base_url_application', new Url(Config::get('url_base')));
162 aurelien 38
		$this->registre->set('sortie_encodage', new Url(Config::get('sortie_encodage')));
39
		$this->registre->set('appli_encodage', new Url(Config::get('appli_encodage')));
120 aurelien 40
	}
41
 
42
	/**
43
	* Charge un modele donné et le rend disponible sous la forme $this->nom_modele
44
	*
45
	* @param string $nom_modele le nom du modèle à charger
46
	*
162 aurelien 47
	* @return boolean false si le chargement a échoué, rien sinon
120 aurelien 48
	*/
49
	final protected function chargerModele($nom_modele) {
162 aurelien 50
 
51
		$chemin_modele = ($this->registre->get('base_chemin_modele')).$nom_modele.'.php';
52
 
53
		if (!file_exists($chemin_modele)) {
54
			throw new Exception('Impossible de charger le fichier de modèle '.$chemin_modele);
55
			return false;
120 aurelien 56
		}
162 aurelien 57
 
58
		include_once $chemin_modele;
59
 
60
		if (!class_exists($nom_modele)) {
61
			throw new Exception('Impossible de charger la classe '.$nom_modele.' dans le dossier '.$chemin_modele);
62
			return false;
120 aurelien 63
		}
162 aurelien 64
 
65
		$this->$nom_modele = new $nom_modele;
120 aurelien 66
	}
162 aurelien 67
 
120 aurelien 68
	/**
69
	 * Fonction prenant en paramètre le nom d'un squelette et un tableau associatif de données,
151 jpm 70
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
120 aurelien 71
	 *
72
	 * @param String $nom_squelette le nom du squelette
73
	 * @param Array  $donnees	   un tableau associatif contenant les variables a injecter dans la vue
74
	 *
151 jpm 75
	 * @return boolean false si la vue n'existe pas, sinon la chaine résultat.
120 aurelien 76
	 */
151 jpm 77
	final protected function getVue($nom_squelette, $donnees = array()) {
162 aurelien 78
 
120 aurelien 79
		$chemin_squelette = ($this->registre->get('base_chemin_squelette')).$nom_squelette.'.tpl.html';
152 jpm 80
		$sortie = SquelettePhp::analyser($chemin_squelette, $donnees);
162 aurelien 81
 
82
		if($this->registre->get('sortie_encodage') != $this->registre->get('appli_encodage')) {
83
			$sortie = mb_convert_encoding($sortie, $this->registre->get('sortie_encodage'), $this->registre->get('appli_encodage'));
84
		}
85
 
151 jpm 86
		return $sortie;
87
	}
162 aurelien 88
 
151 jpm 89
	/**
90
	 * Fonction prenant en paramètre le nom d'un squelette et un tableau associatif de données,
162 aurelien 91
	 * en extrait les variables, charge le squelette et crée une variable de classe portant le nom du squelette
151 jpm 92
	 * contenant les deux combinés.
93
	 *
94
	 * @param String $nom_squelette le nom du squelette
95
	 * @param Array  $donnees	   un tableau associatif contenant les variables a injecter dans la vue
96
	 *
97
	 * @return boolean false si la vue n'existe pas, sinon true.
98
	 */
99
	final protected function chargerVue($nom_squelette, $donnees = array()) {
162 aurelien 100
 
101
		$donnees = $this->preTraiterDonnees($donnees);
102
 
151 jpm 103
		$sortie = false;
104
		$rendu = $this->getVue($nom_squelette, $donnees);
105
		if ($rendu !== false) {
106
			// Création d'une variable de classe contenant le rendu
107
			$this->$nom_squelette = $rendu;
108
			$sortie = true;
120 aurelien 109
		}
151 jpm 110
		return $sortie;
120 aurelien 111
	}
162 aurelien 112
 
113
	public function preTraiterDonnees($donnees) {
114
		return $donnees;
115
	}
5 aurelien 116
}
117
?>