Subversion Repositories eFlore/Applications.del

Rev

Rev 1621 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1621 Rev 1682
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
3
 * Classe mère des scripts del
3
 * Classe mère des scripts DEL
4
 *
4
 *
5
 * @category	php 5.2
5
 * @category	php 5.4
6
 * @package		del
6
 * @package		DEL
7
 * @subpackage 	scripts
7
 * @subpackage	Scripts
8
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
8
 * @author		Aurélien PERONNET <aurelien@tela-botanica.org>
9
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
9
 * @copyright	Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
10
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
 * @license		CeCILL v2 http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
11
 * @license		GNU-GPL http://www.gnu.org/licenses/gpl.html
12
 * @version		$Id$
-
 
13
 */
12
 */
14
abstract class DelScript extends Script {
13
abstract class DelScript extends Script {
Line 15... Line -...
15
 
-
 
16
	private $Bdd = null;
14
 
Line 17... Line 15...
17
	private $projetNom = null;
15
	private $projetNom = null;
18
 
16
 
19
	public function getProjetNom() {
17
	public function getProjetNom() {
Line 20... Line 18...
20
		return $this->projetNom;
18
		return $this->projetNom;
21
	}
19
	}
22
 
20
 
23
	protected function initialiserProjet($projetNom) {
-
 
24
		$this->projetNom = $projetNom;
-
 
25
	}
-
 
26
 
-
 
27
	//+------------------------------------------------------------------------------------------------------+
-
 
28
	// Méthodes d'url
-
 
29
	/**
-
 
30
	* Formate une url à partir d'un template contenant des paramètres à remplacer sous la forme {monParametre}.
-
 
31
	* Le tableau associatif de paramètres doit contenir en clé le paramêtre (monParametre) sans les accolades,
-
 
32
	* la valeur correspondante sera la valeur de remplacement.
-
 
33
	* Par défaut, les parametres suivant sont pris en compte par cette méthode :
-
 
34
	*  - {projet} : le code du référentiel courrant ou définit dans le constructeur de l'objet métier.
-
 
35
	*
-
 
36
	* @param String $tpl le squelette d'url à formater.
-
 
37
	* @param Array $parametres le tableau de parametres (sans accolades pour les clés).*/
-
 
38
	public function formaterUrl($tpl, Array $parametres) {
-
 
39
		foreach ($parametres as $key=> $value) {
-
 
40
			$tpl = str_replace('{'.$key.'}', rawurlencode($value), $tpl);
-
 
41
		}
-
 
42
		return $tpl;
-
 
43
	}
-
 
44
 
-
 
45
	//+------------------------------------------------------------------------------------------------------+
-
 
46
	// Méthodes d'accès aux objets du Framework
-
 
47
	/**
-
 
48
	* Méthode de connection à la base de données sur demande.
-
 
49
	* Tous les scripts n'ont pas besoin de s'y connecter.
-
 
50
	*/
-
 
51
	public function getBdd() {
-
 
52
		if (! isset($this->Bdd)) {
-
 
53
			$this->Bdd = new Bdd();
-
 
54
		}
-
 
55
		return $this->Bdd;
-
 
56
	}
-
 
57
 
-
 
58
	//+----------------------------------------------------------------------------------------------------------------+
-
 
59
	// GESTION DES SQUELETTES PHP
-
 
60
 
-
 
61
	/**
-
 
62
	 * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
-
 
63
	 * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
-
 
64
	 *
-
 
65
	 * @param String $fichier	le chemin du fichier du squelette
-
 
66
	 * @param Array  $donnees	un tableau associatif contenant les variables a injecter dans le squelette.
-
 
67
	 *
-
 
68
	 * @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
-
 
69
	 */
-
 
70
	public function traiterSquelettePhp($fichier, Array $donnees = array()) {
-
 
71
		$sortie = false;
-
 
72
		if (file_exists($fichier)) {
-
 
73
			// Extraction des variables du tableau de données
-
 
74
			extract($donnees);
-
 
75
			// Démarage de la bufferisation de sortie
-
 
76
			ob_start();
-
 
77
			// Si les tags courts sont activés
-
 
78
			if ((bool) @ini_get('short_open_tag') === true) {
-
 
79
				// Simple inclusion du squelette
-
 
80
				include $fichier;
-
 
81
			} else {
-
 
82
				// Sinon, remplacement des tags courts par la syntaxe classique avec echo
-
 
83
				$html_et_code_php = self::traiterTagsCourts($fichier);
-
 
84
				// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
-
 
85
				$html_et_code_php = '?>'.$html_et_code_php;
-
 
86
				// Interprétation du html et du php dans le buffer
-
 
87
				echo eval($html_et_code_php);
-
 
88
			}
-
 
89
			// Récupèration du contenu du buffer
-
 
90
			$sortie = ob_get_contents();
-
 
91
			// Suppression du buffer
-
 
92
			@ob_end_clean();
-
 
93
		} else {
-
 
94
			$msg = "Le fichier du squelette '$fichier' n'existe pas.";
-
 
95
			trigger_error($msg, E_USER_WARNING);
-
 
96
		}
-
 
97
		// Retourne le contenu
-
 
98
		return $sortie;
-
 
99
	}
-
 
100
 
-
 
101
	/**
-
 
102
	 * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
-
 
103
	 *
-
 
104
	 * @param String $chemin_squelette le chemin du fichier du squelette
-
 
105
	 *
-
 
106
	 * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
-
 
107
	 */
-
 
108
	private function traiterTagsCourts($chemin_squelette) {
-
 
109
		$contenu = file_get_contents($chemin_squelette);
-
 
110
		// Remplacement de tags courts par un tag long avec echo
-
 
111
		$contenu = str_replace('<?=', '<?php echo ',  $contenu);
-
 
112
		// Ajout systématique d'un point virgule avant la fermeture php
-
 
113
		$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
21
	protected function initialiserProjet($projetNom) {
114
		return $contenu;
22
		$this->projetNom = $projetNom;
115
	}
23
	}