Subversion Repositories Applications.referentiel

Rev

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

Rev Author Line No. Line
6 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * Classe Controleur générale partagée par les différents modules de l'application.
5
 *
6
 * @package		Referentiel
7
 * @category	Php5.2
8
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
 * @copyright	2010 Tela-Botanica
10
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @version		SVN: $Id$
13
 */
14
abstract class AppliControleur extends Controleur {
15
 
16
	const RENDU_TETE = 'tete';
17
	const RENDU_CORPS = 'corps';
18
	const RENDU_PIED = 'pied';
19
 
20
	// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
21
	protected $url = null;
26 jpm 22
	private $parametres = array();
23
	private $sortie = array();
24
	private $messages = null;
6 jpm 25
 
26 jpm 26
	//+----------------------------------------------------------------------------------------------------------------+
27
	// Constructeur
28
 
6 jpm 29
	public function __construct()  {
30
		$registre = Registre::getInstance();
31
		$this->parametres = $registre->get('parametres');
32
		$this->url = $this->parametres['url'];
33
		parent::__construct();
34
	}
35
 
26 jpm 36
	//+----------------------------------------------------------------------------------------------------------------+
37
	// Accesseurs
38
 
6 jpm 39
	/**
26 jpm 40
	 * Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
41
	 */
42
	public function getSortie() {
43
		return $this->sortie;
44
	}
45
 
46
	/**
6 jpm 47
	 * Attribue à la bonne position de sortie un contenu.
48
	 */
49
	protected function setSortie($position, $contenu, $fusionner = false) {
50
		if ($this->verifierExistencePosition($position)) {
51
			if ($fusionner) {
52
				$this->sortie[$position] .= $contenu;
53
			} else {
54
				$this->sortie[$position] = $contenu;
55
			}
56
		}
57
	}
58
 
59
	/**
26 jpm 60
	 * Retourne le tableau des messages
61
	 */
62
	protected function getMessages() {
63
		return $this->messages;
64
	}
65
	/**
66
	 * Ajoute un message
67
	 */
68
	protected function addMessage($message) {
69
		if ('' != $message) {
70
			$this->messages[] = $message;
71
		}
72
	}
73
 
74
 
75
	//+----------------------------------------------------------------------------------------------------------------+
76
	// Méthodes
77
 
78
	/**
6 jpm 79
	 * Vérifie l'existence de la position indiquée pour son utilisation dans le tableau de sortie.
80
	 * @param string la position à tester.
81
	 * @return bool true si la position est valide, sinon false.
82
	 */
83
	private function verifierExistencePosition($position) {
84
		$existe = true;
85
		if ($position != self::RENDU_TETE &&
86
			$position != self::RENDU_CORPS &&
87
			$position != self::RENDU_PIED) {
88
			trigger_error("La position '$position' n'est pas une valeur prédéfinie.", E_USER_WARNING);
89
			$existe = false;
90
		}
91
		return $existe;
92
	}
93
 
94
	/**
95
	 * Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
96
	 */
97
	protected function executerAction($ClasseModule, $action) {
98
		$module = new $ClasseModule();
99
		$module->$action();
100
		$this->fusionnerSortie($module->getSortie());
101
 
102
	}
103
 
104
	/**
105
	 * Fusionne un tableau de sortie par défaut avec le tableau passé en paramêtre.
106
	 * @param array le tableau à fusionner
107
	 */
108
	private function fusionnerSortie($sortie) {
109
		$this->sortie = array_merge($this->sortie, $sortie);
110
	}
111
 
112
	protected function postraiterDonnees(&$tableau) {
113
		if (count($tableau) > 0) {
114
			foreach ($tableau as $cle => &$valeur) {
115
				if ($valeur == '') {
116
					$valeur = '&nbsp;';
117
				} else if (is_string($valeur)) {
33 jpm 118
					$valeur = $this->remplacerEsperluette($valeur);
6 jpm 119
				} else if (is_array($valeur)) {
120
					$this->postraiterDonnees($valeur);
121
				}
122
			}
123
		}
124
	}
33 jpm 125
 
126
	protected function traiterEsperluette(&$tableau) {
127
		if (count($tableau) > 0) {
128
			foreach ($tableau as $cle => &$valeur) {
129
				if (is_string($valeur)) {
130
					$valeur = $this->remplacerEsperluette($valeur);
131
				} else if (is_array($valeur)) {
132
					$this->traiterEsperluette($valeur);
133
				}
134
			}
135
		}
136
	}
137
 
138
	private function remplacerEsperluette($txt) {
139
		$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
140
		return $txt;
141
	}
142
 
6 jpm 143
}