Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 122 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// declare(encoding='UTF-8');
/**
 * EfloreScript est une classe abstraite qui doit être implémenté par les classes éxecutant des scripts
 * en ligne de commande pour les projets d'eFlore.
 *
 * @category    PHP 5.2
 * @package             Eflore/Scripts
 * @author              Jean-Pascal MILCENT <jpm@tela-botanica.org>
 * @copyright   Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
 * @license             http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
 * @license             http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
 * @since               0.3
 * @version             $Id$
 * @link                /doc/framework/
 */
abstract class EfloreScript extends Script {

        private $Bdd = null;
        private $projetNom = null;
        protected $conteneur; // mélange cracra, n'était pas utilisé jusqu'à présent (2014-09-29)

        public function __construct($script_nom, $parametres_cli) {
                parent::__construct($script_nom, $parametres_cli);
                $this->conteneur = new Conteneur();
        }

        public function getProjetNom() {
                return $this->projetNom;
        }

        protected function initialiserProjet($projetNom) {
                $this->projetNom = $projetNom;
                $this->chargerConfigDuProjet();
        }

        //+------------------------------------------------------------------------------------------------------+
        // 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.
        */
        protected function getBdd() {
                if (! isset($this->Bdd)) {
                        $this->Bdd = new Bdd();
                }
                return $this->Bdd;
        }

        //+------------------------------------------------------------------------------------------------------+
        // Méthodes communes aux projets d'eFlore

        protected function chargerConfigDuProjet() {
                $fichierIni = $this->getScriptChemin().$this->getProjetNom().'.ini';
                if (file_exists($fichierIni)) {
                        Config::charger($fichierIni);
                } else {
                        $m = "Veuillez configurer le projet en créant le fichier '{$this->projetNom}.ini' ".
                                "dans le dossier du module de script du projet à partir du fichier '{$this->projetNom}.defaut.ini'.";
                        throw new Exception($m);
                }
        }

        protected function chargerStructureSql() {
                $contenuSql = $this->recupererContenu(Config::get('chemins.structureSql'));
                $this->executerScripSql($contenuSql);
        }

        protected function executerScripSql($sql) {
                $requetes = Outils::extraireRequetes($sql);
                foreach ($requetes as $requete) {
                        $this->getBdd()->requeter($requete);
                }
        }

        protected function recupererContenu($chemin) {
                $contenu = file_get_contents($chemin);
                if ($contenu === false){
                        throw new Exception("Impossible d'ouvrir le fichier SQL : $chemin");
                }
                return $contenu;
        }

        protected function stopperLaBoucle($limite = false) {
                $stop = false;
                if ($limite) {
                        static $ligneActuelle = 1;
                        if ($limite == $ligneActuelle++) {
                                $stop = true;
                        }
                }
                return $stop;
        }

        /**
         * Consulte une URL et retourne le résultat (ou déclenche une erreur), en
         * admettant qu'il soit au format JSON
         *
         * @param string $url l'URL du service
         */
        protected function chargerDonnees($url, $decoderJSON = true) {
                $resultat = $this->conteneur->getRestClient()->consulter($url);
                $entete = $this->conteneur->getRestClient()->getReponseEntetes();

                // Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_data
                if (isset($entete['wrapper_data'])) {
                        if ($decoderJSON) {
                                $resultat = json_decode($resultat, true);
                                $this->entete = (isset($resultat['entete'])) ? $resultat['entete'] : null;
                        }
                } else {
                        $m = "L'url <a href=\"$url\">$url</a> lancée via RestClient renvoie une erreur";
                        trigger_error($m, E_USER_WARNING);
                }
                return $resultat;
        }
}
?>