* @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 $url lancée via RestClient renvoie une erreur"; trigger_error($m, E_USER_WARNING); } return $resultat; } } ?>