Subversion Repositories eFlore/Applications.del

Rev

Rev 1020 | Rev 1621 | Go to most recent revision | 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ées
                        extract($donnees);
                        // Démarage de la bufferisation de sortie
                        ob_start();
                        // Si les tags courts sont activés
                        if ((bool) @ini_get('short_open_tag') === true) {
                                // Simple inclusion du squelette
                                include $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 buffer
                                echo 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 contenu
                return $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;
        }
}
?>