Subversion Repositories Applications.framework

Rev

Rev 230 | Go to most recent revision | Details | 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
15
 * @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
16
 * @version	SVN : $Id$
17
 * @link		/doc/framework/
18
 */
19
 
20
class Cli {
21
 
22
	/**
23
	 * Execute la ligne de commande en récupérant le nom du script à lancer et ses paramètres.
24
	 * Instancie la classe du script à lancer et appelle la méthode executer().
25
	 * @return void
26
	 */
27
	public static function executer() {
28
		if ($_SERVER['argc'] < 2){
29
		   trigger_error("Erreur: vous n'avez pas indiqué le nom du script. Voir '".$_SERVER['argv'][0]." help'.\n", E_USER_ERROR);
30
		}
31
 
32
		// Récupération de la ligne de commande
33
		$argv = $_SERVER['argv'];
34
		// Nous dépilons le nom du fichier qui initialise le framework et appele cette méthode.
35
		array_shift($argv);
36
		// Nous dépilons le nom du script à lancer
37
		$script = array_shift($argv);
38
		// Récupération des paramètres d'execution du script
39
		$parametres = self::getParametres($argv);
40
 
41
		// Chargement du script à lancer
42
		$Script = Cli::charger($script, $parametres);
43
		if (!is_null($Script)) {
44
			$Script->executer();
45
		}
46
 
47
		// 	Affichage des exceptions et erreurs générées par le script
48
		echo GestionnaireException::getExceptions();
49
 
50
		// Fin d'execution
51
		exit(0);
52
	}
53
 
54
	private static function charger($script_nom, $parametres) {
55
		$Script = null;
56
 
57
		$classe_nom = implode('', array_map('ucfirst', explode('_', strtolower($script_nom))));
58
		$fichier_script = Config::get('chemin_modules').$script_nom.DS.$classe_nom.'.php';
59
 
60
		if (!file_exists($fichier_script)){
61
			trigger_error("Erreur : script '$fichier_script' inconnu!\n", E_USER_ERROR);
62
		} else {
63
			require_once $fichier_script;
64
			if (!class_exists( $classe_nom)) {
65
				trigger_error("Erreur: impossible de trouver la classe de la commande : $classe_nom\n", E_USER_ERROR);
66
			} else {
67
				$Script = new $classe_nom($script_nom, $parametres);
68
			}
69
		}
70
		return $Script;
71
	}
72
 
73
	private static function getParametres($argv) {
74
		$parametres = array();
75
		// Récupération des options
76
		while (count($argv)) {
77
			if (isset($argv[1]) && $argv[1]{0} != '-') {
78
				$param = array_shift($argv);
79
				$parametres[$param] = array_shift($argv);
80
			} elseif (!isset($argv[1]) || $argv[1]{0} == '-') {
81
				$parametres[array_shift($argv)] = null;
82
			} else {
83
				trigger_error("Erreur: valeur manquante pour le paramêtre '".$argv[0]."' \n", E_USER_ERROR);
84
			}
85
		}
86
		return $parametres;
87
	}
88
 
89
}
90
?>