Subversion Repositories Applications.referentiel

Rev

Rev 26 | Rev 33 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 26 Rev 30
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe Controleur du module Test.
4
 * Classe Controleur du module Test.
5
 * 
5
 * 
6
 * TODO : refactoriser l'ensemble des tests!
6
 * TODO : refactoriser l'ensemble des tests!
7
 *
7
 *
8
 * @package		Referentiel
8
 * @package		Referentiel
9
 * @category	Php5.2
9
 * @category	Php5.2
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @copyright	2010 Tela-Botanica
11
 * @copyright	2010 Tela-Botanica
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @version		SVN: $Id$
14
 * @version		SVN: $Id$
15
 */
15
 */
16
class Test extends AppliControleur {
16
class Test extends AppliControleur {
17
	
17
	
18
	private $referentiel = null;
18
	private $referentiel = null;
19
	private $traitementDao = null;
19
	private $traitementDao = null;
20
	
20
	
21
	public function __construct()  {
21
	public function __construct()  {
22
		parent::__construct();
22
		parent::__construct();
23
		
23
		
24
		// Récupération de paramêtres
24
		// Récupération de paramêtres
25
		if (isset($_GET['ref'])) { // code du projet courrant
25
		if (isset($_GET['ref'])) { // code du projet courrant
26
			$this->referentiel = strtolower($_GET['ref']);
26
			$this->referentiel = strtolower($_GET['ref']);
27
		}
27
		}
28
		
28
		
29
		// Chargement des DAO nécessaires
29
		// Chargement des DAO nécessaires
30
		$this->traitementDao = new TraitementDao();
30
		$this->traitementDao = new TraitementDao();
31
	}
31
	}
32
	
32
	
33
	//+----------------------------------------------------------------------------------------------------------------+
33
	//+----------------------------------------------------------------------------------------------------------------+
34
	// Méthodes
34
	// Méthodes
35
	/**
35
	/**
36
	 * Fonction d'affichage par défaut, elle appelle la liste des administrateurs
36
	 * Fonction d'affichage par défaut, elle appelle la liste des administrateurs
37
	 */
37
	 */
38
	public function executerActionParDefaut() {
38
	public function executerActionParDefaut() {
39
		return $this->afficherInterface();
39
		return $this->afficherInterface();
40
	}
40
	}
41
	
41
	
42
	/**
42
	/**
43
	 * Affiche le formulaire de demande de traitement
43
	 * Affiche le formulaire de demande de traitement
44
	 */
44
	 */
45
	public function afficherInterface() {
45
	public function afficherInterface() {
46
		$donnees = array();
46
		$donnees = array();
47
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
47
		$this->url->unsetVariablesRequete(array('module', 'action', 'ref'));
48
		$donnees['url_form'] = $this->url->getUrl();
48
		$donnees['url_form'] = $this->url->getUrl();
49
		$donnees['url_module'] = 'Test';
49
		$donnees['url_module'] = 'Test';
50
		$donnees['url_action'] = 'demanderTraitement';
50
		$donnees['url_action'] = 'demanderTraitement';
51
		
51
		
52
		// Traitement de l'info sur le code du référentiel
52
		// Traitement de l'info sur le code du référentiel
53
		if (isset($this->referentiel)) {
53
		if (isset($this->referentiel)) {
54
			$donnees['ref'] = $this->referentiel;
54
			$donnees['ref'] = $this->referentiel;
55
			$resultat = $this->traitementDao->getTraitementsEnCours($this->referentiel);
55
			$resultat = $this->traitementDao->getTraitementsEnCours($this->referentiel);
56
			if ($resultat != false) {
56
			if ($resultat != false) {
57
				$donnees['traitements'] = $resultat; 
57
				$donnees['traitements'] = $resultat; 
58
			} else {
58
			} else {
59
				$this->addMessage("Un problème est survenu lors de la tentative de récupération des traitements en cours.");
59
				$this->addMessage("Aucun traitement en cours.");
60
			}
60
			}
61
		} else {
61
		} else {
62
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
62
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
63
		}
63
		}
64
		
64
		
65
		$donnees['messages'] = $this->getMessages();
65
		$donnees['messages'] = $this->getMessages();
66
		$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);
66
		$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);
67
	}
67
	}
68
	
68
	
69
	/**
69
	/**
70
	 * Lance l'ajout d'un traitement
70
	 * Lance l'ajout d'un traitement
71
	 */
71
	 */
72
	public function demanderTraitement() {
72
	public function demanderTraitement() {
73
		$this->ajouterTraitement();
73
		$this->ajouterTraitement();
74
		$this->afficherInterface();
74
		$this->afficherInterface();
75
	}
75
	}
76
	
76
	
77
	/**
77
	/**
78
	 * Lance l'ajout d'un traitement
78
	 * Lance l'ajout d'un traitement
79
	 */
79
	 */
80
	private function ajouterTraitement() {
80
	private function ajouterTraitement() {
81
		if (!isset($this->referentiel)) {
81
		if (!isset($this->referentiel)) {
82
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
82
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
83
		} else {
83
		} else {
84
			// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.
84
			// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.
85
			$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);
85
			$resultat_traitement_en_cours = $this->traitementDao->getTraitementsEnCours($this->referentiel);
86
			if ($resultat != false) {
86
			if ($resultat_traitement_en_cours) {
87
				$this->addMessage("Le traitement #'$resultat' a été ajouté.");
87
				$this->addMessage("Un traitement est déjà en cours...");
88
				$this->lancerScript();
-
 
89
			} else {
88
			} else {
-
 
89
				$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);
-
 
90
				if ($resultat != false) {
-
 
91
					$this->addMessage("Le traitement #'$resultat' a été ajouté.");
-
 
92
					$this->lancerScript();
-
 
93
				} else {
90
				$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
94
					$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
-
 
95
				}
91
			}
96
			}
92
		}
97
		}
93
	}
98
	}
94
	
99
	
95
	/**
100
	/**
96
	 * Lance le script d'execution des traitements
101
	 * Lance le script d'execution des traitements
97
	 */
102
	 */
98
	private function lancerScript() {
103
	private function lancerScript() {
99
		$php = Config::get('chemin_bin_php');
104
		$php = Config::get('chemin_bin_php');
100
		$exe = Config::get('chemin_script');
105
		$exe = Config::get('chemin_script');
101
		$script = 'tests';
106
		$script = 'tests';
102
		$projet = $this->referentiel;
107
		$projet = $this->referentiel;
103
		$action = 'tout';
108
		$action = 'tout';
104
		$log = Config::get('chemin_script_log');
109
		$log = Config::get('chemin_script_log');
105
		$commande = "$php -f $exe $script -p $projet -a $action > $log &";
110
		$commande = "$php -f $exe $script -p $projet -a $action > $log &";
106
 
111
 
107
		$message_erreur_tpl = "%s\n.".
112
		$message_erreur_tpl = "%s\n.".
108
			"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
113
			"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
109
			"La commande à lancer est : <code>$commande</code>";
114
			"La commande à lancer est : <code>$commande</code>";
110
		if ($this->verifierSafeModeOff() === false) {
115
		if ($this->verifierSafeModeOff() === false) {
111
			$e = "Le safe_mode est actif sur ce serveur.";
116
			$e = "Le safe_mode est actif sur ce serveur.";
112
			$this->addMessage(sprintf($message_erreur_tpl, $e));
117
			$this->addMessage(sprintf($message_erreur_tpl, $e));
113
		} else if ($this->verifierAccesFonctionExec() === false) {
118
		} else if ($this->verifierAccesFonctionExec() === false) {
114
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
119
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
115
			$this->addMessage(sprintf($message_erreur_tpl, $e));
120
			$this->addMessage(sprintf($message_erreur_tpl, $e));
116
		} else {
121
		} else {
117
			Debug::printr($commande);
122
			Debug::printr($commande);
118
			$this->addMessage("Lancement du script effectuant les traitements.");
123
			$this->addMessage("Lancement du script effectuant les traitements.");
119
			exec($commande);
124
			exec($commande);
120
		}
125
		}
121
	}
126
	}
122
	
127
	
123
	private function verifierSafeModeOff() {
128
	private function verifierSafeModeOff() {
124
		return ('1' == ini_get('safe_mode')) ? false : true;
129
		return ('1' == ini_get('safe_mode')) ? false : true;
125
	}
130
	}
126
	
131
	
127
	private function verifierAccesFonctionExec() {
132
	private function verifierAccesFonctionExec() {
128
		$disabled = explode(', ', ini_get('disable_functions'));
133
		$disabled = explode(', ', ini_get('disable_functions'));
129
		return !in_array('exec', $disabled);
134
		return !in_array('exec', $disabled);
130
	}
135
	}
131
	
136
	
132
}
137
}
133
?>
138
?>