Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 1117 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
66 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * EfloreScript est une classe abstraite qui doit être implémenté par les classes éxecutant des scripts
5
 * en ligne de commande pour les projets d'eFlore.
6
 *
7
 * @category	PHP 5.2
8
 * @package		Eflore/Scripts
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
11
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
13
 * @since 		0.3
14
 * @version		$Id$
15
 * @link		/doc/framework/
16
 */
17
abstract class EfloreScript extends Script {
18
 
19
	private $Bdd = null;
20
	private $projetNom = null;
1125 mathias 21
	protected $conteneur; // mélange cracra, n'était pas utilisé jusqu'à présent (2014-09-29)
66 jpm 22
 
1125 mathias 23
	public function __construct($script_nom, $parametres_cli) {
24
		parent::__construct($script_nom, $parametres_cli);
25
		$this->conteneur = new Conteneur();
26
	}
27
 
66 jpm 28
	public function getProjetNom() {
29
		return $this->projetNom;
30
	}
31
 
32
	protected function initialiserProjet($projetNom) {
33
		$this->projetNom = $projetNom;
34
		$this->chargerConfigDuProjet();
35
	}
36
 
37
	//+------------------------------------------------------------------------------------------------------+
38
	// Méthodes d'accès aux objets du Framework
39
	/**
40
	* Méthode de connection à la base de données sur demande.
41
	* Tous les scripts n'ont pas besoin de s'y connecter.
42
	*/
43
	protected function getBdd() {
44
		if (! isset($this->Bdd)) {
45
			$this->Bdd = new Bdd();
46
		}
47
		return $this->Bdd;
48
	}
49
 
50
	//+------------------------------------------------------------------------------------------------------+
51
	// Méthodes communes aux projets d'eFlore
52
 
53
	protected function chargerConfigDuProjet() {
122 jpm 54
		$fichierIni = $this->getScriptChemin().$this->getProjetNom().'.ini';
55
		if (file_exists($fichierIni)) {
56
			Config::charger($fichierIni);
57
		} else {
58
			$m = "Veuillez configurer le projet en créant le fichier '{$this->projetNom}.ini' ".
59
				"dans le dossier du module de script du projet à partir du fichier '{$this->projetNom}.defaut.ini'.";
60
			throw new Exception($m);
66 jpm 61
		}
62
	}
63
 
64
	protected function chargerStructureSql() {
65
		$contenuSql = $this->recupererContenu(Config::get('chemins.structureSql'));
103 jpm 66
		$this->executerScripSql($contenuSql);
67
	}
68
 
69
	protected function executerScripSql($sql) {
70
		$requetes = Outils::extraireRequetes($sql);
66 jpm 71
		foreach ($requetes as $requete) {
72
			$this->getBdd()->requeter($requete);
73
		}
74
	}
75
 
67 jpm 76
	protected function recupererContenu($chemin) {
77
		$contenu = file_get_contents($chemin);
78
		if ($contenu === false){
79
			throw new Exception("Impossible d'ouvrir le fichier SQL : $chemin");
80
		}
81
		return $contenu;
82
	}
83
 
107 jpm 84
	protected function stopperLaBoucle($limite = false) {
66 jpm 85
		$stop = false;
107 jpm 86
		if ($limite) {
87
			static $ligneActuelle = 1;
88
			if ($limite == $ligneActuelle++) {
89
				$stop = true;
90
			}
66 jpm 91
		}
92
		return $stop;
93
	}
1125 mathias 94
 
95
	/**
96
	 * Consulte une URL et retourne le résultat (ou déclenche une erreur), en
97
	 * admettant qu'il soit au format JSON
98
	 *
99
	 * @param string $url l'URL du service
100
	 */
101
	protected function chargerDonnees($url, $decoderJSON = true) {
102
		$resultat = $this->conteneur->getRestClient()->consulter($url);
103
		$entete = $this->conteneur->getRestClient()->getReponseEntetes();
104
 
105
		// Si le service meta-donnees fonctionne correctement, l'entete comprend la clé wrapper_data
106
		if (isset($entete['wrapper_data'])) {
107
			if ($decoderJSON) {
108
				$resultat = json_decode($resultat, true);
109
				$this->entete = (isset($resultat['entete'])) ? $resultat['entete'] : null;
110
			}
111
		} else {
112
			$m = "L'url <a href=\"$url\">$url</a> lancée via RestClient renvoie une erreur";
113
			trigger_error($m, E_USER_WARNING);
114
		}
115
		return $resultat;
116
	}
66 jpm 117
}
118
?>