Rev 1020 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** Classe mère des scripts del** @category php 5.2* @package del* @subpackage scripts* @author Aurélien PERONNET <aurelien@tela-botanica.org>* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version $Id$*/abstract class DelScript extends Script {private $Bdd = null;private $projetNom = null;public function getProjetNom() {return $this->projetNom;}protected function initialiserProjet($projetNom) {$this->projetNom = $projetNom;}//+------------------------------------------------------------------------------------------------------+// Méthodes d'url/*** Formate une url à partir d'un template contenant des paramètres à remplacer sous la forme {monParametre}.* Le tableau associatif de paramètres doit contenir en clé le paramêtre (monParametre) sans les accolades,* la valeur correspondante sera la valeur de remplacement.* Par défaut, les parametres suivant sont pris en compte par cette méthode :* - {projet} : le code du référentiel courrant ou définit dans le constructeur de l'objet métier.** @param String $tpl le squelette d'url à formater.* @param Array $parametres le tableau de parametres (sans accolades pour les clés).*/public function formaterUrl($tpl, Array $parametres) {foreach($parametres as $key=> $value) {$tpl = str_replace('{'.$key.'}',rawurlencode($value),$tpl);}return $tpl;}//+------------------------------------------------------------------------------------------------------+// Méthodes d'accès aux objets du Framework/*** Méthode de connection à la base de données sur demande.* Tous les scripts n'ont pas besoin de s'y connecter.*/public function getBdd() {if (! isset($this->Bdd)) {$this->Bdd = new Bdd();}return $this->Bdd;}//+----------------------------------------------------------------------------------------------------------------+// GESTION DES SQUELETTES PHP/*** Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,* en extrait les variables, charge le squelette et retourne le résultat des deux combinés.** @param String $fichier le chemin du fichier du squelette* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette.** @return boolean false si le squelette n'existe pas, sinon la chaine résultat.*/public function traiterSquelettePhp($fichier, Array $donnees = array()) {$sortie = false;if (file_exists($fichier)) {// Extraction des variables du tableau de donnéesextract($donnees);// Démarage de la bufferisation de sortieob_start();// Si les tags courts sont activésif ((bool) @ini_get('short_open_tag') === true) {// Simple inclusion du squeletteinclude $fichier;} else {// Sinon, remplacement des tags courts par la syntaxe classique avec echo$html_et_code_php = self::traiterTagsCourts($fichier);// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval$html_et_code_php = '?>'.$html_et_code_php;// Interprétation du html et du php dans le bufferecho eval($html_et_code_php);}// Récupèration du contenu du buffer$sortie = ob_get_contents();// Suppression du buffer@ob_end_clean();} else {$msg = "Le fichier du squelette '$fichier' n'existe pas.";trigger_error($msg, E_USER_WARNING);}// Retourne le contenureturn $sortie;}/*** Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.** @param String $chemin_squelette le chemin du fichier du squelette** @return string le contenu du fichier du squelette php avec les tags courts remplacés.*/private function traiterTagsCourts($chemin_squelette) {$contenu = file_get_contents($chemin_squelette);// Remplacement de tags courts par un tag long avec echo$contenu = str_replace('<?=', '<?php echo ', $contenu);// Ajout systématique d'un point virgule avant la fermeture php$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);return $contenu;}}?>