Subversion Repositories eFlore/Applications.del

Rev

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

Rev Author Line No. Line
1020 aurelien 1
<?php
2
/**
3
 * Classe mère des scripts del
4
 *
5
 * @category	php 5.2
6
 * @package		del
7
 * @subpackage 	scripts
8
 * @author		Aurélien PERONNET <aurelien@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
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
 * @version		$Id$
13
 */
14
abstract class DelScript extends Script {
15
 
16
	private $Bdd = null;
17
	private $projetNom = null;
18
 
19
	public function getProjetNom() {
20
		return $this->projetNom;
21
	}
22
 
23
	protected function initialiserProjet($projetNom) {
24
		$this->projetNom = $projetNom;
25
	}
1569 jpm 26
 
1020 aurelien 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) {
1569 jpm 39
		foreach ($parametres as $key=> $value) {
40
			$tpl = str_replace('{'.$key.'}', rawurlencode($value), $tpl);
1020 aurelien 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
	}
1569 jpm 57
 
1020 aurelien 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);
114
		return $contenu;
115
	}
116
}
117
?>