Rev 24 | Rev 30 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** Classe Controleur du module Test.** TODO : refactoriser l'ensemble des tests!** @package Referentiel* @category Php5.2* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>* @copyright 2010 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version SVN: $Id$*/class Test extends AppliControleur {private $referentiel = null;private $traitementDao = null;public function __construct() {parent::__construct();// Récupération de paramêtresif (isset($_GET['ref'])) { // code du projet courrant$this->referentiel = strtolower($_GET['ref']);}// Chargement des DAO nécessaires$this->traitementDao = new TraitementDao();}//+----------------------------------------------------------------------------------------------------------------+// Méthodes/*** Fonction d'affichage par défaut, elle appelle la liste des administrateurs*/public function executerActionParDefaut() {return $this->afficherInterface();}/*** Affiche le formulaire de demande de traitement*/public function afficherInterface() {$donnees = array();$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));$donnees['url_form'] = $this->url->getUrl();$donnees['url_module'] = 'Test';$donnees['url_action'] = 'demanderTraitement';// Traitement de l'info sur le code du référentielif (isset($this->referentiel)) {$donnees['ref'] = $this->referentiel;$resultat = $this->traitementDao->getTraitementsEnCours($this->referentiel);if ($resultat != false) {$donnees['traitements'] = $resultat;} else {$this->addMessage("Un problème est survenu lors de la tentative de récupération des traitements en cours.");}} else {$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");}$donnees['messages'] = $this->getMessages();$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);}/*** Lance l'ajout d'un traitement*/public function demanderTraitement() {$this->ajouterTraitement();$this->afficherInterface();}/*** Lance l'ajout d'un traitement*/private function ajouterTraitement() {if (!isset($this->referentiel)) {$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");} else {// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);if ($resultat != false) {$this->addMessage("Le traitement #'$resultat' a été ajouté.");$this->lancerScript();} else {$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");}}}/*** Lance le script d'execution des traitements*/private function lancerScript() {$php = Config::get('chemin_bin_php');$exe = Config::get('chemin_script');$script = 'tests';$projet = $this->referentiel;$action = 'tout';$log = Config::get('chemin_script_log');$commande = "$php -f $exe $script -p $projet -a $action > $log &";$message_erreur_tpl = "%s\n."."Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n"."La commande à lancer est : <code>$commande</code>";if ($this->verifierSafeModeOff() === false) {$e = "Le safe_mode est actif sur ce serveur.";$this->addMessage(sprintf($message_erreur_tpl, $e));} else if ($this->verifierAccesFonctionExec() === false) {$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";$this->addMessage(sprintf($message_erreur_tpl, $e));} else {Debug::printr($commande);$this->addMessage("Lancement du script effectuant les traitements.");exec($commande);}}private function verifierSafeModeOff() {return ('1' == ini_get('safe_mode')) ? false : true;}private function verifierAccesFonctionExec() {$disabled = explode(', ', ini_get('disable_functions'));return !in_array('exec', $disabled);}}?>