Subversion Repositories Applications.framework

Compare Revisions

Ignore whitespace Rev 476 → Rev 477

/trunk/framework/Script.php
10,7 → 10,7
* @copyright Copyright (c) 2010, 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
* @since 0.3
* @version $Id$
* @link /doc/framework/
*/
27,16 → 27,16
 
/** Inititulé des différents types de message. */
private static $msg_niveaux_txt = array('LOG', 'ERREUR','AVERTISSEMENT', 'INFO');
 
/**
* Le nom du script tel que passé dans la ligne de commande.
* @var string
*/
private $script_nom = null;
 
/**
* Paramêtres par défaut disponibles pour la ligne de commande
* le tableau se construit de la forme suivante :
* le tableau se construit de la forme suivante :
* - clé = nom du paramêtre '-foo'
* - value = contient un nouveau tableau composé de cette façon :
* - booléen: true si le paramêtre est obligatoire
50,10 → 50,10
private $parametres_autorises_defaut = array(
'-a' => array(true, true, 'Action à réaliser'),
'-v' => array(false, '1', 'Mode verbeux : 1 ou 2'));
 
/**
* Paramêtres autorisés par le script.
* le tableau est de la forme suivante :
* le tableau est de la forme suivante :
* - clé = nom du paramêtre '-foo'
* - value = contient un nouveau tableau composé de cette façon :
* - booléen: true si le paramêtre est obligatoire
65,68 → 65,86
* @var array
*/
protected $parametres_autorises = null;
 
/**
* Contient les valeurs des paramêtres récupérés de la ligne de commande :
* le tableau se construit de la forme suivnate :
* le tableau se construit de la forme suivnate :
* - clé = nom du paramêtre '-foo'
* - valeur = la valeur récupérée sur la ligne de commande
* @var array
*/
private $parametres_cli = null;
 
/**
* Contient le tableau des paramètres disponible après vérification :
* le tableau est de la forme suivante :
* le tableau est de la forme suivante :
* - clé = nom du paramêtre '-foo'
* - valeur = la valeur récupérée sur la ligne de commande
* @var array
*/
protected $parametres = null;
 
/** Tableau associatif permettant de stocker l'avancement dans une boucle.
* La clé est un md5 du message à afficher au démarrage de la boucle.
* @var array
* @var array
*/
private static $avancement = array();
 
/** Tableau des noms des paramètres à définir dans le fichier de config car obligatoirement nécessaire à cette classe.*/
private static $parametres_obligatoires = array('chemin_modules', 'log_script');
 
public function __construct($script_nom, $parametres_cli) {
$this->script_nom = $script_nom;
$this->parametres_cli = $parametres_cli;
 
Config::verifierPresenceParametres(self::$parametres_obligatoires);
 
$fichier_ini_script = $this->getScriptChemin().'config.ini';
Config::charger($fichier_ini_script);
 
$this->chargerParametresAutorises();
$this->chargerParametres();
}
 
private static function getMsgNiveauTxt($niveau) {
return self::$msg_niveaux_txt[$niveau];
}
 
protected function getScriptNom() {
return $this->script_nom;
}
 
/**
* Retour le chemin vers le dossier principal du script exécuter.
* Si le nom du script est au format : script/sous_script
* le chemin contiendra seulement "script" dans le chemin renvoyé.
* Si le nom du script est au format : script/sous-script-1/sous_script-2
* le chemin contiendra seulement "script/sous-script-1" dans le chemin renvoyé.
*
* @param type $doit_exister
* @return string
*/
protected function getScriptChemin($doit_exister = true) {
$chemin = Config::get('chemin_modules').$this->getScriptNom().DS;
$script_nom = $this->getScriptNom();
if (strpos($script_nom, DS)) {
$decompoScriptNom = explode(DS, $script_nom);
$script_nom = array_pop($decompoScriptNom);
$dossier_nom = implode(DS, $decompoScriptNom);
} else {
$dossier_nom = strtolower($script_nom);
}
$chemin = Config::get('chemin_modules').$dossier_nom.DS;
if (!file_exists($chemin) && $doit_exister) {
trigger_error("Erreur: le module '".$this->getScriptNom()."' n'existe pas ($chemin)\n", E_USER_ERROR);
trigger_error("Erreur: le module '$script_nom' n'existe pas ($chemin)\n", E_USER_ERROR);
}
return $chemin;
}
 
protected function getParametre($parametre) {
$retour = false;
if (!is_null($parametre)) {
$parametre = ltrim($parametre, '-');
 
if (isset($this->parametres[$parametre])) {
$retour = $this->parametres[$parametre];
} else {
135,9 → 153,9
}
return $retour;
}
 
abstract public function executer();
 
private function chargerParametresAutorises() {
foreach ($this->parametres_autorises_defaut as $c => $v) {
if (isset($this->parametres_autorises[$c])) {
147,7 → 165,7
}
}
}
 
private function chargerParametres() {
$parametres_cli = $this->parametres_cli;
 
179,17 → 197,17
}
}
}
 
// Gestion de l'excédant de paramêtres
if (count($parametres_cli)) {
trigger_error("Erreur: trop de paramêtres\n", E_USER_ERROR);
}
}
/**
 
/**
* Affiche un message d'erreur formaté.
* Si le paramétre de verbosité (-v) vaut 1 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
*
*
* @param string le message d'erreur avec des %s.
* @param array le tableau des paramêtres à insérer dans le message d'erreur.
* @return void.
197,12 → 215,12
protected function traiterErreur($message, $tab_arguments = array()) {
$this->traiterMessage($message, $tab_arguments, self::MSG_ERREUR);
}
/**
 
/**
* Affiche un message d'avertissement formaté.
* Si le paramétre de verbosité (-v) vaut 1, le message est écrit dans le fichier de log.
* Si le paramétre de verbosité (-v) vaut 2 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
*
*
* @param string le message d'erreur avec des %s.
* @param array le tableau des paramêtres à insérer dans le message d'erreur.
* @return void.
210,12 → 228,12
protected function traiterAvertissement($message, $tab_arguments = array()) {
$this->traiterMessage($message, $tab_arguments, self::MSG_AVERTISSEMENT);
}
/**
 
/**
* Retourne un message d'information formaté.
* Si le paramétre de verbosité (-v) vaut 1 ou 2 , le message est écrit dans le fichier de log.
* Si le paramétre de verbosité (-v) vaut 3 ou plus, le message est écrit dans le fichier de log et afficher dans la console.
*
*
* @param string le message d'information avec des %s.
* @param array le tableau des paramêtres à insérer dans le message d'erreur.
* @return void.
223,10 → 241,10
protected function traiterInfo($message, $tab_arguments = array()) {
$this->traiterMessage($message, $tab_arguments, self::MSG_INFO);
}
/**
 
/**
* Retourne un message formaté en le stockant dans un fichier de log si nécessaire.
*
*
* @param string le message d'erreur avec des %s.
* @param array le tableau des paramêtres à insérer dans le message d'erreur.
* @param int le niveau de verbosité à dépasser pour afficher les messages.
241,10 → 259,10
}
}
}
/**
 
/**
* Retourne un message d'information formaté.
*
*
* @param string le message d'information avec des %s.
* @param array le tableau des paramêtres à insérer dans le message d'erreur.
* @return string le message d'erreur formaté.
256,11 → 274,11
$log = $prefixe.$texte."\n";
return $log;
}
/**
 
/**
* Utiliser cette méthode dans une boucle pour afficher un message suivi du nombre de tour de boucle effectué.
* Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
*
* Vous devrez vous même gérer le retour à la ligne à la sortie de la boucle.
*
* @param string le message d'information.
* @param int le nombre de départ à afficher.
* @return void le message est affiché dans la console.
269,18 → 287,18
if (! isset(self::$avancement[$message])) {
self::$avancement[$message] = $depart;
echo "$message : ";
 
$actuel =& self::$avancement[$message];
echo $actuel++;
} else {
$actuel =& self::$avancement[$message];
 
// Cas du passage de 99 (= 2 caractères) à 100 (= 3 caractères)
$passage = 0;
if (strlen((string) ($actuel - 1)) < strlen((string) ($actuel))) {
$passage = 1;
$passage = 1;
}
 
echo str_repeat(chr(8), (strlen((string) $actuel) - $passage));
echo $actuel++;
}
/trunk/framework/Cli.php
56,16 → 56,17
exit(0);
}
 
private static function charger($script_nom, $parametres) {
private static function charger($script_nom_original, $parametres) {
$Script = null;
Config::verifierPresenceParametres(self::$parametres_obligatoires);
 
if (strpos($script_nom, DS)) {
$decompoScriptNom = explode(DS, $script_nom);
 
if (strpos($script_nom_original, DS)) {
$decompoScriptNom = explode(DS, $script_nom_original);
$script_nom = array_pop($decompoScriptNom);
$dossier_nom = implode(DS, $decompoScriptNom);
} else {
$dossier_nom = strtolower($script_nom);
$dossier_nom = strtolower($script_nom_original);
}
 
$classe_nom = self::obtenirNomClasse($script_nom);
78,7 → 79,7
if (!class_exists( $classe_nom)) {
trigger_error("Erreur: impossible de trouver la classe de la commande : $classe_nom\n", E_USER_ERROR);
} else {
$Script = new $classe_nom($script_nom, $parametres);
$Script = new $classe_nom($script_nom_original, $parametres);
}
}
return $Script;