New file |
0,0 → 1,118 |
<?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; |
} |
} |
?> |