Rev 1124 | 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;
}
}
?>