Subversion Repositories Applications.referentiel

Rev

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

Rev 30 Rev 33
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_demande'] = 'demanderTraitement';
-
 
51
		$donnees['url_action_rafraichir'] = 'afficherInterface';
51
		
52
		
52
		// Traitement de l'info sur le code du référentiel
53
		// Traitement de l'info sur le code du référentiel
53
		if (isset($this->referentiel)) {
54
		if (isset($this->referentiel)) {
54
			$donnees['ref'] = $this->referentiel;
55
			$donnees['ref'] = $this->referentiel;
55
			$resultat = $this->traitementDao->getTraitementsEnCours($this->referentiel);
56
			$resultat = $this->traitementDao->getTraitementsEnCours($this->referentiel);
56
			if ($resultat != false) {
57
			if ($resultat != false) {
57
				$donnees['traitements'] = $resultat; 
58
				$donnees['traitements_en_cours'] = $resultat; 
58
			} else {
59
			}
-
 
60
			
-
 
61
			// Recherche des traitements déjà effectué
-
 
62
			$resultat = $this->traitementDao->getTraitementsTermines($this->referentiel);
-
 
63
			if ($resultat != false) {
-
 
64
				// Ajout de l'url vers la fiche du traitement
-
 
65
				$this->url->setVariableRequete('module', 'Traitement');
-
 
66
				foreach ($resultat as &$traitement) {
-
 
67
					$this->url->setVariableRequete('id-t', $traitement['id_traitement']);
-
 
68
					$traitement['url'] = $this->url->getUrl();
-
 
69
					$this->url->unsetVariableRequete('id-t');
-
 
70
				}
59
				$this->addMessage("Aucun traitement en cours.");
71
				$this->url->unsetVariableRequete('module');
-
 
72
				$donnees['traitements_termines'] = $resultat;
60
			}
73
			}
61
		} else {
74
		} else {
62
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
75
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
63
		}
76
		}		
64
		
77
		
65
		$donnees['messages'] = $this->getMessages();
78
		$donnees['messages'] = $this->getMessages();
66
		$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);
79
		$this->setSortie(self::RENDU_CORPS, $this->getVue('form_traitement', $donnees), false);
67
	}
80
	}
68
	
81
	
69
	/**
82
	/**
70
	 * Lance l'ajout d'un traitement
83
	 * Lance l'ajout d'un traitement
71
	 */
84
	 */
72
	public function demanderTraitement() {
85
	public function demanderTraitement() {
73
		$this->ajouterTraitement();
86
		$this->ajouterTraitement();
74
		$this->afficherInterface();
87
		$this->afficherInterface();
75
	}
88
	}
76
	
89
	
77
	/**
90
	/**
78
	 * Lance l'ajout d'un traitement
91
	 * Lance l'ajout d'un traitement
79
	 */
92
	 */
80
	private function ajouterTraitement() {
93
	private function ajouterTraitement() {
81
		if (!isset($this->referentiel)) {
94
		if (!isset($this->referentiel)) {
82
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
95
			$this->addMessage("Aucun code de projet de référentiel n'est indiqué (Ex. bdnff).");
83
		} else {
96
		} else {
84
			// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.
97
			// TODO : vérifier qu'il n'y a pas déjà un traitement en cours pour ce projet.
85
			$resultat_traitement_en_cours = $this->traitementDao->getTraitementsEnCours($this->referentiel);
98
			$resultat_traitement_en_cours = $this->traitementDao->getTraitementsEnCours($this->referentiel);
86
			if ($resultat_traitement_en_cours) {
99
			if ($resultat_traitement_en_cours) {
87
				$this->addMessage("Un traitement est déjà en cours...");
100
				$this->addMessage("Un traitement est déjà en cours...");
88
			} else {
101
			} else {
89
				$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);
102
				$resultat = $this->traitementDao->ajouterTraitement($this->referentiel);
90
				if ($resultat != false) {
103
				if ($resultat != false) {
91
					$this->addMessage("Le traitement #'$resultat' a été ajouté.");
104
					$this->addMessage("Le traitement #'$resultat' a été ajouté.");
92
					$this->lancerScript();
105
					$this->lancerScript();
93
				} else {
106
				} else {
94
					$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
107
					$this->addMessage("Un problème est survenu lors de la tentative d'ajout du traitement.");
95
				}
108
				}
96
			}
109
			}
97
		}
110
		}
98
	}
111
	}
99
	
112
	
100
	/**
113
	/**
101
	 * Lance le script d'execution des traitements
114
	 * Lance le script d'execution des traitements
102
	 */
115
	 */
103
	private function lancerScript() {
116
	private function lancerScript() {
104
		$php = Config::get('chemin_bin_php');
117
		$php = Config::get('chemin_bin_php');
105
		$exe = Config::get('chemin_script');
118
		$exe = Config::get('chemin_script');
106
		$script = 'tests';
119
		$script = 'tests';
107
		$projet = $this->referentiel;
120
		$projet = $this->referentiel;
108
		$action = 'tout';
121
		$action = 'tout';
109
		$log = Config::get('chemin_script_log');
122
		$log = Config::get('chemin_script_log');
110
		$commande = "$php -f $exe $script -p $projet -a $action > $log &";
123
		$commande = "$php -f $exe $script -p $projet -a $action > $log &";
111
 
124
 
112
		$message_erreur_tpl = "%s\n.".
125
		$message_erreur_tpl = "%s\n.".
113
			"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
126
			"Il est nécessaire de configurer le lancement du script via une tache dans le cron.\n".
114
			"La commande à lancer est : <code>$commande</code>";
127
			"La commande à lancer est : <code>$commande</code>";
115
		if ($this->verifierSafeModeOff() === false) {
128
		if ($this->verifierSafeModeOff() === false) {
116
			$e = "Le safe_mode est actif sur ce serveur.";
129
			$e = "Le safe_mode est actif sur ce serveur.";
117
			$this->addMessage(sprintf($message_erreur_tpl, $e));
130
			$this->addMessage(sprintf($message_erreur_tpl, $e));
118
		} else if ($this->verifierAccesFonctionExec() === false) {
131
		} else if ($this->verifierAccesFonctionExec() === false) {
119
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
132
			$e = "La fonction 'exec()' fait partie des fonctions désactivées sur ce serveur (voir disable_functions).";
120
			$this->addMessage(sprintf($message_erreur_tpl, $e));
133
			$this->addMessage(sprintf($message_erreur_tpl, $e));
121
		} else {
134
		} else {
122
			Debug::printr($commande);
135
			//Debug::printr($commande);
123
			$this->addMessage("Lancement du script effectuant les traitements.");
136
			$this->addMessage("Lancement du script effectuant les traitements.");
124
			exec($commande);
137
			exec($commande);
125
		}
138
		}
126
	}
139
	}
127
	
140
	
128
	private function verifierSafeModeOff() {
141
	private function verifierSafeModeOff() {
129
		return ('1' == ini_get('safe_mode')) ? false : true;
142
		return ('1' == ini_get('safe_mode')) ? false : true;
130
	}
143
	}
131
	
144
	
132
	private function verifierAccesFonctionExec() {
145
	private function verifierAccesFonctionExec() {
133
		$disabled = explode(', ', ini_get('disable_functions'));
146
		$disabled = explode(', ', ini_get('disable_functions'));
134
		return !in_array('exec', $disabled);
147
		return !in_array('exec', $disabled);
135
	}
148
	}
136
	
149
	
137
}
150
}
138
?>
151
?>