Subversion Repositories Applications.framework

Rev

Rev 387 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
214 jpm 1
<?php
2
// declare(encoding='UTF-8');
3
/**
4
 * CLI permet de récupérer les paramètres passés en ligne de commande pour instancier une classe héritant de la classe abstraite
5
 * Script.
6
 * Elle va déclencher l'éxecution du script via l'appel de la méthode executer().
7
 * C'est une Singleton.
8
 *
9
 * @category	PHP 5.2
10
 * @package	Framework
11
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @author		Delphine CAUQUIL <delphine@tela-botanica.org>
13
 * @copyright	Copyright (c) 2010, Tela Botanica (accueil@tela-botanica.org)
14
 * @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
241 jpm 15
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
387 jpm 16
 * @since 		0.3
241 jpm 17
 * @version	$Id: Cli.php 477 2014-03-25 10:39:28Z jpm $
214 jpm 18
 * @link		/doc/framework/
19
 */
20
 
21
class Cli {
387 jpm 22
 
241 jpm 23
	/** Tableau des noms des paramètres à définir dans le fichier de config car obligatoirement nécessaire à cette classe.*/
24
	private static $parametres_obligatoires = array('chemin_modules');
387 jpm 25
 
26
 
214 jpm 27
	/**
28
	 * Execute la ligne de commande en récupérant le nom du script à lancer et ses paramètres.
29
	 * Instancie la classe du script à lancer et appelle la méthode executer().
30
	 * @return void
31
	 */
32
	public static function executer() {
33
		if ($_SERVER['argc'] < 2){
34
		   trigger_error("Erreur: vous n'avez pas indiqué le nom du script. Voir '".$_SERVER['argv'][0]." help'.\n", E_USER_ERROR);
35
		}
387 jpm 36
 
214 jpm 37
		// Récupération de la ligne de commande
38
		$argv = $_SERVER['argv'];
39
		// Nous dépilons le nom du fichier qui initialise le framework et appele cette méthode.
387 jpm 40
		array_shift($argv);
214 jpm 41
		// Nous dépilons le nom du script à lancer
42
		$script = array_shift($argv);
43
		// Récupération des paramètres d'execution du script
44
		$parametres = self::getParametres($argv);
387 jpm 45
 
214 jpm 46
		// Chargement du script à lancer
47
		$Script = Cli::charger($script, $parametres);
48
		if (!is_null($Script)) {
49
			$Script->executer();
50
		}
387 jpm 51
 
214 jpm 52
		// 	Affichage des exceptions et erreurs générées par le script
53
		echo GestionnaireException::getExceptions();
387 jpm 54
 
214 jpm 55
		// Fin d'execution
56
		exit(0);
57
	}
387 jpm 58
 
477 jpm 59
	private static function charger($script_nom_original, $parametres) {
214 jpm 60
		$Script = null;
241 jpm 61
		Config::verifierPresenceParametres(self::$parametres_obligatoires);
387 jpm 62
 
477 jpm 63
 
64
		if (strpos($script_nom_original, DS)) {
65
			$decompoScriptNom = explode(DS, $script_nom_original);
387 jpm 66
			$script_nom = array_pop($decompoScriptNom);
67
			$dossier_nom = implode(DS, $decompoScriptNom);
68
		} else {
477 jpm 69
			$dossier_nom = strtolower($script_nom_original);
387 jpm 70
		}
71
 
244 jpm 72
		$classe_nom = self::obtenirNomClasse($script_nom);
266 jpm 73
		$fichier_script = Config::get('chemin_modules').$dossier_nom.DS.$classe_nom.'.php';
387 jpm 74
 
214 jpm 75
		if (!file_exists($fichier_script)){
76
			trigger_error("Erreur : script '$fichier_script' inconnu!\n", E_USER_ERROR);
77
		} else {
78
			require_once $fichier_script;
79
			if (!class_exists( $classe_nom)) {
80
				trigger_error("Erreur: impossible de trouver la classe de la commande : $classe_nom\n", E_USER_ERROR);
81
			} else {
477 jpm 82
				$Script = new $classe_nom($script_nom_original, $parametres);
214 jpm 83
			}
84
		}
85
		return $Script;
86
	}
387 jpm 87
 
244 jpm 88
	private static function obtenirNomClasse($script_nom) {
89
		$nom_classe = implode('', array_map('ucfirst', explode('_', strtolower($script_nom))));
90
		return $nom_classe;
91
	}
387 jpm 92
 
214 jpm 93
	private static function getParametres($argv) {
94
		$parametres = array();
95
		// Récupération des options
96
		while (count($argv)) {
97
			if (isset($argv[1]) && $argv[1]{0} != '-') {
98
				$param = array_shift($argv);
99
				$parametres[$param] = array_shift($argv);
100
			} elseif (!isset($argv[1]) || $argv[1]{0} == '-') {
101
				$parametres[array_shift($argv)] = null;
102
			} else {
103
				trigger_error("Erreur: valeur manquante pour le paramêtre '".$argv[0]."' \n", E_USER_ERROR);
104
			}
105
		}
106
		return $parametres;
107
	}
108
}
109
?>