Subversion Repositories Applications.referentiel

Rev

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

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