Subversion Repositories Sites.tela-botanica.org

Rev

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

Rev 376 Rev 380
1
<?php
1
<?php
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
3
// +------------------------------------------------------------------------------------------------------+
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 5.1                                                                                      |
4
// | PHP version 5.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org)                                    |
6
// | Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org)                                    |
7
// +------------------------------------------------------------------------------------------------------+
7
// +------------------------------------------------------------------------------------------------------+
8
// | This file is part of eflore_bp.                                                                         |
8
// | This file is part of eflore_bp.                                                                         |
9
// |                                                                                                      |
9
// |                                                                                                      |
10
// | eflore_bp is free software; you can redistribute it and/or modify                                       |
10
// | eflore_bp is free software; you can redistribute it and/or modify                                       |
11
// | it under the terms of the GNU General Public License as published by                                 |
11
// | it under the terms of the GNU General Public License as published by                                 |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
12
// | the Free Software Foundation; either version 2 of the License, or                                    |
13
// | (at your option) any later version.                                                                  |
13
// | (at your option) any later version.                                                                  |
14
// |                                                                                                      |
14
// |                                                                                                      |
15
// | eflore_bp is distributed in the hope that it will be useful,                                            |
15
// | eflore_bp is distributed in the hope that it will be useful,                                            |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
16
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
17
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                        |
18
// | GNU General Public License for more details.                                                         |
18
// | GNU General Public License for more details.                                                         |
19
// |                                                                                                      |
19
// |                                                                                                      |
20
// | You should have received a copy of the GNU General Public License                                    |
20
// | You should have received a copy of the GNU General Public License                                    |
21
// | along with Foobar; if not, write to the Free Software                                                |
21
// | along with Foobar; if not, write to the Free Software                                                |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
22
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
23
// +------------------------------------------------------------------------------------------------------+
23
// +------------------------------------------------------------------------------------------------------+
24
// CVS : $Id: RecueilDeDonnees.class.php,v 1.5 2007-07-25 17:45:19 jp_milcent Exp $
24
// CVS : $Id: RecueilDeDonnees.class.php,v 1.5 2007-07-25 17:45:19 jp_milcent Exp $
25
/**
25
/**
26
* eflore_bp - ReccueilDeDonnee.php
26
* eflore_bp - ReccueilDeDonnee.php
27
*
27
*
28
* Description :
28
* Description :
29
*
29
*
30
*@package eflore_bp
30
*@package eflore_bp
31
//Auteur original :
31
//Auteur original :
32
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
32
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
33
//Autres auteurs :
33
//Autres auteurs :
34
*@author        Aucun
34
*@author        Aucun
35
*@copyright     Tela-Botanica 1999-2007
35
*@copyright     Tela-Botanica 1999-2007
36
*@version       $Revision: 1.5 $ $Date: 2007-07-25 17:45:19 $
36
*@version       $Revision: 1.5 $ $Date: 2007-07-25 17:45:19 $
37
// +------------------------------------------------------------------------------------------------------+
37
// +------------------------------------------------------------------------------------------------------+
38
*/
38
*/
39
 
39
 
40
// +------------------------------------------------------------------------------------------------------+
40
// +------------------------------------------------------------------------------------------------------+
41
// |                                            ENTÊTE du PROGRAMME                                       |
41
// |                                            ENTÊTE du PROGRAMME                                       |
42
// +------------------------------------------------------------------------------------------------------+
42
// +------------------------------------------------------------------------------------------------------+
43
 
43
 
44
 
44
 
45
// +------------------------------------------------------------------------------------------------------+
45
// +------------------------------------------------------------------------------------------------------+
46
// |                                            CORPS du PROGRAMME                                        |
46
// |                                            CORPS du PROGRAMME                                        |
47
// +------------------------------------------------------------------------------------------------------+
47
// +------------------------------------------------------------------------------------------------------+
48
class Wikini extends aModule {
48
class Wikini extends aModule {
49
	
49
	
50
	private $bdd_principale = SC_BDD_NOM_PRINCIPALE;
50
	private $bdd_principale = SC_BDD_NOM_PRINCIPALE;
51
	private $bdd_options = array('debug' => 3);
51
	private $bdd_options = array('debug' => 3);
52
	private $bdd_dsn = SC_DSN_PRINCIPAL;
52
	private $bdd_dsn = SC_DSN_PRINCIPAL;
53
	private $connexion = null;
53
	private $connexion = null;
54
	private $sites = array('http://www.tela-botanica.org', 'http://www.outils-reseaux.org');
54
	private $sites = array('http://www.tela-botanica.org', 'http://www.outils-reseaux.org');
55
	
55
	
56
	public function __construct()
56
	public function __construct()
57
	{
57
	{
58
		$this->connexion = DB::connect($this->bdd_dsn, $this->bdd_options);
58
		$this->connexion = DB::connect($this->bdd_dsn, $this->bdd_options);
59
		if (PEAR::isError($this->connexion)) {
59
		if (PEAR::isError($this->connexion)) {
60
			$e = $this->connexion->getMessage();
60
			$e = $this->connexion->getMessage();
61
			trigger_error($e, E_USER_ERROR);
61
			trigger_error($e, E_USER_ERROR);
62
		}
62
		}
63
		parent::__construct();
63
		parent::__construct();
64
	}
64
	}
65
	
65
	
66
	// La méthode executer est appellé par défaut
66
	// La méthode executer est appellé par défaut
67
	public function executer()
67
	public function executer()
68
	{ 
68
	{ 
69
		$this->poursuivreVers('config_fichier');
69
		$this->poursuivreVers('config_fichier');
70
	}
70
	}
-
 
71
	
-
 
72
	private function rechercherWikini($chemin = null, $methode)
-
 
73
	{
-
 
74
		if (isset($chemin)) {
-
 
75
			if (preg_match('/wakka\.config\.php$/', $chemin)) {
-
 
76
				$this->$methode($chemin);
-
 
77
			} else if (is_dir($chemin)) {
-
 
78
				// Nettoyage et ajout d'un slash final
-
 
79
				$chemin = rtrim(trim($chemin), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
-
 
80
				// Nous vérifions que le dossier indiqué est un dossier de wikini
-
 
81
				$fichier = $chemin.'wakka.config.php';
-
 
82
				$this->$methode($fichier);
-
 
83
				// Nous regardons si le dossier indiqué contient d'autres dossiers wikini
-
 
84
				foreach (scandir($chemin) as $dossier) {
-
 
85
					if (is_dir($chemin.$dossier.DIRECTORY_SEPARATOR) && $dossier != '..' &&  $dossier != '.') {
-
 
86
						$fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php';
-
 
87
						$this->$methode($fichier);
-
 
88
					}
-
 
89
				}
-
 
90
			} else {
-
 
91
				trigger_error('Le chemin suivant n\'est ni un dossier, ni un fichier wakka.config.php :'.$chemin, E_USER_WARNING);
-
 
92
			}
-
 
93
		}
-
 
94
	}
71
	
95
	
72
	public function executerConfigFichier()
96
	public function executerConfigFichier()
73
	{
97
	{
74
		// Initialisation des variables
98
		// Initialisation des variables
75
		$this->setChrono('debut');
99
		$this->setChrono('debut');
76
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
100
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
77
		
101
		
78
		// Gestion de l'url de l'envoie de mail
102
		// Gestion de l'url de l'envoie de mail
79
		$url = clone $GLOBALS['_SCRIPT_']['url'];
103
		$url = clone $GLOBALS['_SCRIPT_']['url'];
80
		$url->addQueryString('module', 'wikini');
104
		$url->addQueryString('module', 'wikini');
81
		$url->addQueryString('action', 'maj_fichier');
105
		$url->addQueryString('action', 'config_fichier_maj');
82
		$aso_donnees['url'] = $url->getUrl();
106
		$aso_donnees['url'] = $url->getUrl();
83
			
107
			
84
		// Attribution des données pour remplir le squelette
108
		// Attribution des données pour remplir le squelette
85
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
109
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
86
		$this->setChrono('fin');
110
		$this->setChrono('fin');
87
	}
111
	}
88
	
112
	
89
	public function executerMajFichier()
113
	public function executerConfigFichierMaj()
90
	{
114
	{
91
		// Initialisation des variables
115
		// Initialisation des variables
92
		$this->setChrono('debut');
116
		$this->setChrono('debut');
93
		$asso_donnees = array();
-
 
94
		
117
		
95
		// Récupération des infos pour conpléter le squelette du courriel
-
 
96
		if (isset($_POST['sc_chemin'])) {
118
		// Récupération des infos pour conpléter le squelette du courriel
97
			$chemin = $_POST['sc_chemin'];
-
 
-
 
119
		$this->rechercherWikini($_POST['sc_chemin'], 'modifierConfigFichier');
98
			if (is_dir($chemin)) {
120
		
99
				foreach (scandir($chemin) as $dossier) {
-
 
100
					if (file_exists($fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php')) {
121
		// Nous ajoutons une action à éxecuter avant de rendre la main
101
						$arrFile = file($fichier);
-
 
102
						$handle = fopen($fichier, 'w');
-
 
-
 
122
		$this->poursuivreVers('config_fichier');
103
						if($handle != false){
123
		
104
							// Set counters
-
 
105
							$currentLine = 0;
-
 
106
							$cntFile = count($arrFile);// Nombre de ligne
-
 
107
							// Write contents, inserting $item as first item
-
 
108
							while ($currentLine <= $cntFile){
-
 
109
							    if (isset($arrFile[$currentLine])) {
-
 
110
								    foreach ($_POST as $cle => $val) {
-
 
111
								    	if ($val != '') {
-
 
112
								    		if(preg_match('/"'.preg_replace('/^sc_/', '', $cle).'" =>/', $arrFile[$currentLine])) {
-
 
113
								    			$arrFile[$currentLine] = preg_replace('/=> ".*"/', '=> "'.$val.'"', $arrFile[$currentLine]);
-
 
114
									    	}
-
 
115
								    	}
-
 
116
								    } 
-
 
117
								    fwrite($handle, $arrFile[$currentLine]);
-
 
118
								    if (preg_match('/^\?>$/', $arrFile[$currentLine])) {
124
		// Fin de l'action
119
								    	fclose($handle); 
-
 
120
								    	$currentLine = $cntFile;
-
 
121
								    }
-
 
122
							    }
-
 
123
							    $currentLine++;
125
		$this->setChrono('fin');
124
							}						
-
 
125
	    				} else {
-
 
126
	    					trigger_error('Fichier '.$fichier.' impossible à ouvrir', E_USER_WARNING);
-
 
-
 
126
	}
-
 
127
	
-
 
128
	private function modifierConfigFichier($fichier)
-
 
129
	{
-
 
130
		if (file_exists($fichier)) {
-
 
131
			$aso_donnees = array();
-
 
132
			$arrFile = file($fichier);
-
 
133
			$handle = fopen($fichier, 'w');
-
 
134
			if($handle != false){
-
 
135
				// Définition des compteurs
-
 
136
				$currentLine = 0;
-
 
137
				$cntFile = count($arrFile);// Nombre de ligne
-
 
138
				// Write contents, inserting $item as first item
-
 
139
				while ($currentLine <= $cntFile){
-
 
140
				    if (isset($arrFile[$currentLine])) {
-
 
141
					    foreach ($_POST as $cle => $val) {
-
 
142
					    	if ($val != '') {
-
 
143
					    		if(preg_match('/"'.preg_replace('/^sc_/', '', $cle).'" =>/', $arrFile[$currentLine])) {
-
 
144
					    			$arrFile[$currentLine] = preg_replace('/=> ".*"/', '=> "'.$val.'"', $arrFile[$currentLine]);
127
	    				}
145
						    	}
-
 
146
					    	}
-
 
147
					    } 
-
 
148
					    fwrite($handle, $arrFile[$currentLine]);
-
 
149
					    if (preg_match('/^\?>$/', $arrFile[$currentLine])) {
-
 
150
					    	fclose($handle); 
-
 
151
					    	$currentLine = $cntFile;
-
 
152
					    }
128
	
153
				    }
129
					}
154
				    $currentLine++;
130
				}
155
				}						
131
			} else {
156
			} else {
-
 
157
				trigger_error('Fichier '.$fichier.' impossible à ouvrir', E_USER_WARNING);
-
 
158
			}
132
				trigger_error('Le chemin suivant n\'est pas un dossier :'.$chemin, E_USER_WARNING);
159
			// Attribution des données pour remplir le squelette
133
			}
-
 
134
		}
-
 
135
		
-
 
136
		// Attribution des données pour remplir le squelette
-
 
137
		$this->getRegistre()->set('squelette_donnees', $asso_donnees);
-
 
138
		$this->setChrono('fin');
-
 
139
 
-
 
140
		// Nous ajoutons une action à éxecuter avant de rendre la main
160
			$this->getRegistre()->set('squelette_donnees', $aso_donnees);
141
		$this->poursuivreVers('config_fichier');
161
		}
142
	}
162
	}
143
	
163
	
144
	public function executerSupprimerUtilisateur()
164
	public function executerSupprimerUtilisateur()
145
	{
165
	{
146
		// Initialisation des variables
166
		// Initialisation des variables
147
		$this->setChrono('debut');
167
		$this->setChrono('debut');
148
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
168
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
149
		
169
		
150
		// Gestion de l'url de l'envoie de mail
170
		// Gestion de l'url de l'envoie de mail
151
		$url = clone $GLOBALS['_SCRIPT_']['url'];
171
		$url = clone $GLOBALS['_SCRIPT_']['url'];
152
		$url->addQueryString('module', 'wikini');
172
		$url->addQueryString('module', 'wikini');
153
		$url->addQueryString('action', 'maj_utilisateur');
173
		$url->addQueryString('action', 'supprimer_utilisateur_maj');
154
		$aso_donnees['url'] = $url->getUrl();
174
		$aso_donnees['url'] = $url->getUrl();
155
			
175
			
156
		// Attribution des données pour remplir le squelette
176
		// Attribution des données pour remplir le squelette
157
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
177
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
158
		$this->setChrono('fin');
178
		$this->setChrono('fin');
159
	}
179
	}
160
	
180
	
161
	public function executerMajUtilisateur()
181
	public function executerSupprimerUtilisateurMaj()
162
	{
182
	{
163
		// Initialisation des variables
183
		// Initialisation des variables
164
		$this->setChrono('debut');
184
		$this->setChrono('debut');
165
		$asso_donnees = array();
-
 
166
		
185
		
167
		// Récupération des infos pour conpléter le squelette du courriel
186
		// Récupération des infos pour conpléter le squelette du courriel
-
 
187
		$this->rechercherWikini($_POST['sc_chemin'], 'modifierSupprimerUtilisateur');
-
 
188
		
168
		if (isset($_POST['sc_chemin'])) {
189
		// Nous ajoutons une action à éxecuter avant de rendre la main
-
 
190
		$this->poursuivreVers('supprimer_utilisateur');
169
			$chemin = $_POST['sc_chemin'];
191
		
170
			if (is_dir($chemin)) {
192
		// Fin de l'action
171
				foreach (scandir($chemin) as $dossier) {
-
 
-
 
193
		$this->setChrono('fin');
172
					if (file_exists($fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php')) {
194
	}
-
 
195
	
173
						
196
	private function modifierSupprimerUtilisateur($fichier)
174
					}
197
	{
175
					if (file_exists($fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php')) {
198
		if (file_exists($fichier)) {
-
 
199
			// Initialisation de variables
176
						// Initialisation de variables
200
			$aso_donnees = array();
177
						$wakka_config = array();
201
			$wakka_config = array();
178
						$requetes = array();
202
			$requetes = array();
179
						
203
			
180
						// Récupération de la config du wikini
204
			// Récupération de la config du wikini
181
						$tab_fichier = file($fichier);
205
			$tab_fichier = file($fichier);
182
						foreach ($tab_fichier as $ligne_num => $ligne) {
206
			foreach ($tab_fichier as $ligne_num => $ligne) {
183
					    	if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {
207
		    	if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {
184
					    		//trigger_error(print_r($match, true), E_USER_NOTICE);
208
		    		//trigger_error(print_r($match, true), E_USER_NOTICE);
185
					    		$wakka_config[$match[1]] = $match[2];
209
		    		$wakka_config[$match[1]] = $match[2];
186
						    }
210
			    }
187
						}
211
			}
188
						//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
212
			//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
189
						if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {
213
			if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {
190
							// Connexion à la base de données
214
				// Connexion à la base de données
191
							$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];
215
				$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];
192
							$this->connexion = DB::connect($dsn, $this->bdd_options);
216
				$this->connexion = DB::connect($dsn, $this->bdd_options);
193
							if (PEAR::isError($this->connexion)) {
217
				if (PEAR::isError($this->connexion)) {
194
								$e = $this->connexion->getMessage();
218
					$e = $this->connexion->getMessage();
195
								trigger_error($e, E_USER_ERROR);
219
					trigger_error($e, E_USER_ERROR);
196
							}
220
				}
197
							
221
				
198
							// Traitement de la chaine utilisateur
222
				// Traitement de la chaine utilisateur
199
							$tab_utilisateurs = explode(',', trim($_POST['sc_utilisateur']));
223
				$tab_utilisateurs = explode(',', trim($_POST['sc_utilisateur']));
200
							$chaine_utilisateur = '';
224
				$chaine_utilisateur = '';
201
							foreach ($tab_utilisateurs as $utilisateur) {
225
				foreach ($tab_utilisateurs as $utilisateur) {
202
								$chaine_utilisateur .= '"'.trim($utilisateur).'", ';
226
					$chaine_utilisateur .= '"'.trim($utilisateur).'", ';
203
							}
227
				}
204
							$chaine_utilisateur = trim($chaine_utilisateur, ', ');
228
				$chaine_utilisateur = trim($chaine_utilisateur, ', ');
205
							
229
				
206
							// Suppression de l'utilisateur
230
				// Suppression de l'utilisateur
207
							
231
				
208
							$requete = 	'DELETE FROM '.$wakka_config['table_prefix'].'users '.
232
				$requete = 	'DELETE FROM '.$wakka_config['table_prefix'].'users '.
209
										'WHERE name IN ('.$chaine_utilisateur.')';
233
							'WHERE name IN ('.$chaine_utilisateur.')';
210
							$requetes[] = $requete."\n";
234
				$requetes[] = $requete."\n";
211
							$res = $this->connexion->query($requete);
235
				$res = $this->connexion->query($requete);
212
							if (PEAR::isError($res)) {
236
				if (PEAR::isError($res)) {
213
								$requetes[] = $res->getMessage().$res->getDebugInfo();
237
					$requetes[] = $res->getMessage().$res->getDebugInfo();
214
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
238
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
215
							}
239
				}
216
							
240
				
217
							// Stockage des requetes
241
				// Stockage des requetes
218
							if (count($requetes) > 0 ) {
242
				if (count($requetes) > 0 ) {
219
								$aso_donnees['wikinis'][] = array( 	'dossier' => $dossier,
243
					$aso_donnees['wikinis'][] = array( 	'dossier' => $fichier,
220
																	'nom' => $wakka_config['wakka_name'],
244
														'nom' => $wakka_config['wakka_name'],
221
																	'version' =>  $wakka_config['wikini_version'], 
245
														'version' =>  $wakka_config['wikini_version'], 
222
																	'requetes' => $requetes);
-
 
223
							}
-
 
224
						} else {
-
 
225
							trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
-
 
226
						}
-
 
227
					}
246
														'requetes' => $requetes);
228
				}
247
				}
229
			} else {
248
			} else {
230
				trigger_error('Le chemin suivant n\'est pas un dossier :'.$chemin, E_USER_WARNING);
249
				trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
-
 
250
			}
-
 
251
			// Attribution des données pour remplir le squelette
231
			}
252
			$this->getRegistre()->set('squelette_donnees', $aso_donnees);
232
		}
-
 
233
		
-
 
234
		// Attribution des données pour remplir le squelette
-
 
235
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
-
 
236
		$this->setChrono('fin');
-
 
237
 
-
 
238
		// Nous ajoutons une action à éxecuter avant de rendre la main
-
 
239
		$this->poursuivreVers('supprimer_utilisateur');
253
		}
240
	}
254
	}
241
	
255
	
242
	public function executerConfigBdd()
256
	public function executerConfigBdd()
243
	{
257
	{
244
		// Initialisation des variables
258
		// Initialisation des variables
245
		$this->setChrono('debut');
259
		$this->setChrono('debut');
246
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
260
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
247
		
261
		
248
		// Gestion de l'url de l'envoie de mail
262
		// Gestion de l'url de l'envoie de mail
249
		$url = clone $GLOBALS['_SCRIPT_']['url'];
263
		$url = clone $GLOBALS['_SCRIPT_']['url'];
250
		$url->addQueryString('module', 'wikini');
264
		$url->addQueryString('module', 'wikini');
251
		$url->addQueryString('action', 'maj_bdd');
265
		$url->addQueryString('action', 'config_bdd_maj');
252
		$aso_donnees['url'] = $url->getUrl();
266
		$aso_donnees['url'] = $url->getUrl();
253
			
267
		
254
		// Attribution des données pour remplir le squelette
268
		// Attribution des données pour remplir le squelette
255
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
269
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
-
 
270
			
-
 
271
		// Fin de l'action
256
		$this->setChrono('fin');
272
		$this->setChrono('fin');
257
	}
273
	}
258
	
274
	
259
	public function executerMajBdd()
275
	public function executerConfigBddMaj()
260
	{
276
	{
261
		// Initialisation des variables
277
		// Initialisation des variables
262
		$this->setChrono('debut');
278
		$this->setChrono('debut');
263
		$asso_donnees = array();
-
 
264
		
279
		
265
		// Récupération des infos pour conpléter le squelette du courriel
280
		// Récupération des infos pour conpléter le squelette du courriel
-
 
281
		$this->rechercherWikini($_POST['sc_chemin'], 'modifierConfigBdd');
-
 
282
		
266
		if (isset($_POST['sc_chemin'])) {
283
		// Nous ajoutons une action à éxecuter avant de rendre la main
-
 
284
		$this->poursuivreVers('config_bdd');
267
			$chemin = $_POST['sc_chemin'];
285
		
268
			if (is_dir($chemin)) {
286
		// Fin de l'action
269
				foreach (scandir($chemin) as $dossier) {
-
 
-
 
287
		$this->setChrono('fin');
270
					if (file_exists($fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php')) {
288
	}
-
 
289
	
271
						
290
	private function modifierConfigBdd($fichier)
272
					}
291
	{
273
					if (file_exists($fichier = $chemin.$dossier.DIRECTORY_SEPARATOR.'wakka.config.php')) {
292
		if (file_exists($fichier)) {
-
 
293
			// Initialisation de variables
274
						// Initialisation de variables
294
			$aso_donnees = array();
275
						$wakka_config = array();
295
			$wakka_config = array();
276
						$requetes = array();
296
			$requetes = array();
277
						
297
			
278
						// Récupération de la config du wikini
298
			// Récupération de la config du wikini
279
						$tab_fichier = file($fichier);
299
			$tab_fichier = file($fichier);
280
						foreach ($tab_fichier as $ligne_num => $ligne) {
300
			foreach ($tab_fichier as $ligne_num => $ligne) {
281
					    	if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {
301
		    	if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {
282
					    		//trigger_error(print_r($match, true), E_USER_NOTICE);
302
		    		//trigger_error(print_r($match, true), E_USER_NOTICE);
283
					    		$wakka_config[$match[1]] = $match[2];
303
		    		$wakka_config[$match[1]] = $match[2];
284
						    }
304
			    }
285
						}
305
			}
286
						//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
306
			//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
287
						if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {
307
			if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {
288
							// Connexion à la base de données
308
				// Connexion à la base de données
289
							$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];
309
				$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];
290
							$this->connexion = DB::connect($dsn, $this->bdd_options);
310
				$this->connexion = DB::connect($dsn, $this->bdd_options);
291
							if (PEAR::isError($this->connexion)) {
311
				if (PEAR::isError($this->connexion)) {
292
								$e = $this->connexion->getMessage();
312
					$e = $this->connexion->getMessage();
293
								trigger_error($e, E_USER_ERROR);
313
					trigger_error($e, E_USER_ERROR);
294
							}
314
				}
295
							
315
				
296
							// Mise à jour des droits
316
				// Mise à jour des droits
297
							$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
317
				$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
298
										'SET list = "'.$wakka_config['default_write_acl'].'" '.
318
							'SET list = "'.$wakka_config['default_write_acl'].'" '.
299
										'WHERE privilege = "write" ';
319
							'WHERE privilege = "write" ';
300
							$requetes[] = $requete."\n";
320
				$requetes[] = $requete."\n";
301
							$res = $this->connexion->query($requete);
321
				$res = $this->connexion->query($requete);
302
							if (PEAR::isError($res)) {
322
				if (PEAR::isError($res)) {
303
								$requetes[] = $res->getMessage().$res->getDebugInfo();
323
					$requetes[] = $res->getMessage().$res->getDebugInfo();
304
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
324
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
305
							}
325
				}
306
 
326
 
307
							$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
327
				$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
308
										'SET list = "'.$wakka_config['default_read_acl'].'" '.
328
							'SET list = "'.$wakka_config['default_read_acl'].'" '.
309
										'WHERE privilege = "read" ';
329
							'WHERE privilege = "read" ';
310
							$requetes[] = $requete."\n";
330
				$requetes[] = $requete."\n";
311
							$res = $this->connexion->query($requete);
331
				$res = $this->connexion->query($requete);
312
							if (PEAR::isError($res)) {
332
				if (PEAR::isError($res)) {
313
								$requetes[] = $res->getMessage().$res->getDebugInfo();
333
					$requetes[] = $res->getMessage().$res->getDebugInfo();
314
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
334
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
315
							}
335
				}
316
 
336
 
317
							$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
337
				$requete = 	'UPDATE '.$wakka_config['table_prefix'].'acls '.
318
										'SET list = "'.$wakka_config['default_comment_acl'].'" '.
338
							'SET list = "'.$wakka_config['default_comment_acl'].'" '.
319
										'WHERE privilege = "comment" ';
339
							'WHERE privilege = "comment" ';
320
							$requetes[] = $requete."\n";
340
				$requetes[] = $requete."\n";
321
							$res = $this->connexion->query($requete);
341
				$res = $this->connexion->query($requete);
322
							if (PEAR::isError($res)) {
342
				if (PEAR::isError($res)) {
323
								$requetes[] = $res->getMessage().$res->getDebugInfo();
343
					$requetes[] = $res->getMessage().$res->getDebugInfo();
324
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
344
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
325
							}
345
				}
326
							
346
				
327
							$requete = 	'DELETE FROM '.$wakka_config['table_prefix'].'acls '.
347
				$requete = 	'DELETE FROM '.$wakka_config['table_prefix'].'acls '.
328
										'WHERE page_tag = "ParametresUtilisateur"';
348
							'WHERE page_tag = "ParametresUtilisateur"';
329
							$requetes[] = $requete."\n";
349
				$requetes[] = $requete."\n";
330
							$res = $this->connexion->query($requete);
350
				$res = $this->connexion->query($requete);
331
							if (PEAR::isError($res)) {
351
				if (PEAR::isError($res)) {
332
								$requetes[] = $res->getMessage().$res->getDebugInfo();
352
					$requetes[] = $res->getMessage().$res->getDebugInfo();
333
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
353
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
334
							}
354
				}
335
							
355
				
336
							$requete = 	'INSERT INTO '.$wakka_config['table_prefix'].'acls '.
356
				$requete = 	'INSERT INTO '.$wakka_config['table_prefix'].'acls '.
337
										'VALUES ("ParametresUtilisateur", "write", "*") ';
357
							'VALUES ("ParametresUtilisateur", "write", "*") ';
338
							$requetes[] = $requete."\n";
358
				$requetes[] = $requete."\n";
339
							$res = $this->connexion->query($requete);
359
				$res = $this->connexion->query($requete);
340
							if (PEAR::isError($res)) {
360
				if (PEAR::isError($res)) {
341
								$requetes[] = $res->getMessage().$res->getDebugInfo();
361
					$requetes[] = $res->getMessage().$res->getDebugInfo();
342
								trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
362
					trigger_error($res->getMessage().$res->getDebugInfo(), E_USER_WARNING);
343
							}
363
				}
344
							
364
				
345
							
365
				
346
							// Stockage des requetes
366
				// Stockage des requetes
347
							if (count($requetes) > 0 ) {
367
				if (count($requetes) > 0 ) {
348
								$aso_donnees['wikinis'][] = array( 	'dossier' => $dossier,
368
					$aso_donnees['wikinis'][] = array( 	'dossier' => $fichier,
349
																	'nom' => $wakka_config['wakka_name'],
-
 
350
																	'version' =>  $wakka_config['wikini_version'], 
-
 
351
																	'requetes' => $requetes);
-
 
352
							}
-
 
353
						} else {
-
 
354
							trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
369
														'nom' => $wakka_config['wakka_name'],
355
						}
370
														'version' =>  $wakka_config['wikini_version'], 
356
					}
371
														'requetes' => $requetes);
357
				}
372
				}
-
 
373
			} else {
-
 
374
				trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
358
			} else {
375
			}
-
 
376
			// Attribution des données pour remplir le squelette
-
 
377
			$this->getRegistre()->set('squelette_donnees', $aso_donnees);
-
 
378
		}
-
 
379
	}
-
 
380
	
-
 
381
	public function executerNettoyage()
-
 
382
	{
-
 
383
		// Initialisation des variables
-
 
384
		$this->setChrono('debut');
-
 
385
		$aso_donnees = $this->getRegistre()->get('squelette_donnees');
-
 
386
		
-
 
387
		// Gestion de l'url de l'envoie de mail
-
 
388
		$url = clone $GLOBALS['_SCRIPT_']['url'];
359
				trigger_error('Le chemin suivant n\'est pas un dossier :'.$chemin, E_USER_WARNING);
389
		$url->addQueryString('module', 'wikini');
360
			}
390
		$url->addQueryString('action', 'nettoyage_maj');
361
		}
391
		$aso_donnees['url'] = $url->getUrl();
362
		
392
 
363
		// Attribution des données pour remplir le squelette
393
		// Attribution des données pour remplir le squelette
364
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
394
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
365
		$this->setChrono('fin');
395
		$this->setChrono('fin');
366
 
-
 
367
		// Nous ajoutons une action à éxecuter avant de rendre la main
-
 
368
		$this->poursuivreVers('config_bdd');
-
 
369
	}
396
	}
370
	
397
	
371
	public function executerNettoyage()
398
	public function executerNettoyageMaj()
372
	{
399
	{
373
		// Initialisation des variables
400
		// Initialisation des variables
374
		$this->setChrono('debut');
401
		$this->setChrono('debut');
375
		$aso_donnees = array();
-
 
376
		
402
		
377
		$res = $this->connexion->query('SHOW TABLES');
-
 
378
		if (PEAR::isError($res)) {
-
 
379
			die($res->getMessage());
-
 
380
		}
-
 
381
		$tab_tables = array();
-
 
382
		$ligne = '';
403
		// Récupération des infos pour conpléter le squelette du courriel
383
		while ($res->fetchInto($ligne)) {
-
 
384
			$tab_tables[] = $ligne[0];
-
 
-
 
404
		$this->rechercherWikini($_POST['sc_chemin'], 'lancerNettoyage');
-
 
405
 
-
 
406
		// Nous ajoutons une action à éxecuter avant de rendre la main
-
 
407
		$this->poursuivreVers('nettoyage');
-
 
408
				
-
 
409
		// Fin de l'action
-
 
410
		$this->setChrono('fin');
-
 
411
	}
-
 
412
	
-
 
413
	public function lancerNettoyage($fichier)
385
		}
414
	{
-
 
415
		if (file_exists($fichier)) {
-
 
416
			// Initialisation de variables
386
 
417
			$aso_donnees = array();
-
 
418
			$wakka_config = array();
-
 
419
			$requetes = array();
387
		foreach ($tab_tables as $table) {
420
			
-
 
421
			// Récupération de la config du wikini
388
			$requetes = array();
422
			$tab_fichier = file($fichier);
389
			// Referrers
423
			foreach ($tab_fichier as $ligne_num => $ligne) {
390
			if (preg_match('/_referrers$/', $table)) {
424
		    	if(preg_match('/"(.*)"\s*=>\s*"(.*)"\s*,/', $ligne, $match)) {
-
 
425
		    		//trigger_error(print_r($match, true), E_USER_NOTICE);
-
 
426
		    		$wakka_config[$match[1]] = $match[2];
-
 
427
			    }
-
 
428
			}
391
				$site_nbre = count($this->sites);
429
			//trigger_error(print_r($wakka_config, true), E_USER_NOTICE);
-
 
430
			if (isset($wakka_config['mysql_user']) && isset($wakka_config['mysql_password']) && isset($wakka_config['mysql_host']) && isset($wakka_config['mysql_database'])) {
392
				$site_0 = $this->sites[0];
431
				// Connexion à la base de données
393
				$requete = 	'DELETE FROM '.$table.' '.
432
				$dsn = 'mysql://'.$wakka_config['mysql_user'].':'.$wakka_config['mysql_password'].'@'.$wakka_config['mysql_host'].'/'.$wakka_config['mysql_database'];
394
							'WHERE referrer NOT LIKE "'.$site_0.'%" ';
433
				$this->connexion = DB::connect($dsn, $this->bdd_options);
-
 
434
				if (PEAR::isError($this->connexion)) {
395
				for ($i = 1; $i < $site_nbre; $i++) {
435
					$e = $this->connexion->getMessage();
396
					$requete .= 'AND referrer NOT LIKE "'.$this->sites[$i].'%" ';
-
 
397
				}
436
					trigger_error($e, E_USER_ERROR);
398
				$requetes[] = $requete."\n";
437
				}
399
				$res = $this->connexion->query($requete);
438
				$res = $this->connexion->query('SHOW TABLES');
400
				if (PEAR::isError($res)) {
439
				if (PEAR::isError($res)) {
401
					die($res->getMessage());
440
					die($res->getMessage());
402
				}
441
				}
-
 
442
				$tab_tables = array();
-
 
443
				$ligne = '';
-
 
444
				while ($res->fetchInto($ligne)) {
-
 
445
					$tab_tables[] = $ligne[0];
403
			}
446
				}
-
 
447
				
-
 
448
				// Ajout des nouveaux referrers à ceux par défaut
-
 
449
				if (!empty($_POST['sc_referrers'])) {
-
 
450
					$this->sites = array_merge(preg_split("~,~",  $_POST['sc_referrers'], -1, PREG_SPLIT_NO_EMPTY), $this->sites);
-
 
451
				}
-
 
452
				
-
 
453
				foreach ($tab_tables as $table) {
-
 
454
					$requetes = array();
-
 
455
					// Referrers
-
 
456
					if (preg_match('/_referrers$/', $table)) {
-
 
457
						$site_nbre = count($this->sites);
-
 
458
						$site_0 = $this->sites[0];
-
 
459
						$requete = 	'DELETE FROM '.$table.' '.
-
 
460
									'WHERE referrer NOT LIKE "'.$site_0.'%" ';
-
 
461
						for ($i = 1; $i < $site_nbre; $i++) {
-
 
462
							$requete .= 'AND referrer NOT LIKE "'.$this->sites[$i].'%" ';
-
 
463
						}
-
 
464
						$requetes[] = $requete."\n";
-
 
465
						$res = $this->connexion->query($requete);
-
 
466
						if (PEAR::isError($res)) {
-
 
467
							die($res->getMessage());
-
 
468
						}
-
 
469
					}
404
 
470
		
405
			// Pages : commentaires
471
					// Pages : commentaires
406
			if (preg_match('/_pages$/', $table)) {
472
					if (preg_match('/_pages$/', $table)) {
407
				$requete = 	'SELECT tag FROM '.$table.' '.
473
						$requete = 	'SELECT tag FROM '.$table.' '.
408
							'WHERE tag LIKE "Comment%" ';
474
									'WHERE tag LIKE "Comment%" ';
409
				$requetes[] = $requete."\n";
475
						$requetes[] = $requete."\n";
410
				$aso_pages = $this->connexion->getAll($requete, null, DB_FETCHMODE_ASSOC);
476
						$aso_pages = $this->connexion->getAll($requete, null, DB_FETCHMODE_ASSOC);
411
				if (PEAR::isError($aso_pages)) {
477
						if (PEAR::isError($aso_pages)) {
412
					die($aso_pages->getMessage());
478
							die($aso_pages->getMessage());
413
				}
479
						}
414
				if (count($aso_pages) > 0) {
480
						if (count($aso_pages) > 0) {
415
					$tab_pages = array();
481
							$tab_pages = array();
416
					foreach ($aso_pages as $page) {
482
							foreach ($aso_pages as $page) {
417
						if (preg_match('/^Comment\d+$/', $page['tag'])){
483
								if (preg_match('/^Comment\d+$/', $page['tag'])){
418
							$tab_pages[] = $page['tag'];
484
									$tab_pages[] = $page['tag'];
-
 
485
								}
-
 
486
							}
-
 
487
							if (count($tab_pages) > 0) {
-
 
488
								$requete = 	'DELETE FROM '.$table.' '.
-
 
489
											'WHERE tag IN ("'.implode('","', $tab_pages).'") ';
-
 
490
								$requetes[] = $requete."\n";
-
 
491
								$res = $this->connexion->query($requete);
-
 
492
								if (PEAR::isError($res)) {
-
 
493
									die($res->getMessage());
-
 
494
								}
-
 
495
							}
419
						}
496
						}
420
					}
497
					}
-
 
498
					
-
 
499
					// ACLs : commentaires
421
					if (count($tab_pages) > 0) {
500
					if (preg_match('/_acls$/', $table)) {
422
						$requete = 	'DELETE FROM '.$table.' '.
501
						$requete = 	'DELETE FROM '.$table.' '.
423
									'WHERE tag IN ("'.implode('","', $tab_pages).'") ';
502
									'WHERE page_tag LIKE "Comment%" ';
-
 
503
						$requetes[] = $requete."\n";
-
 
504
						$res = $this->connexion->query($requete);
-
 
505
						if (PEAR::isError($res)) {
-
 
506
							die($res->getMessage());
-
 
507
						}
-
 
508
						
-
 
509
						$requete = 	'UPDATE '.$table.' '.
-
 
510
									'SET list = "+" '.
-
 
511
									'WHERE privilege = "comment" ';
424
						$requetes[] = $requete."\n";
512
						$requetes[] = $requete."\n";
425
						$res = $this->connexion->query($requete);
513
						$res = $this->connexion->query($requete);
426
						if (PEAR::isError($res)) {
514
						if (PEAR::isError($res)) {
427
							die($res->getMessage());
515
							die($res->getMessage());
428
						}
516
						}
429
					}
517
					}
-
 
518
					// Stockage des requetes
-
 
519
					if (count($requetes) > 0 ) {
-
 
520
						$aso_donnees['wikinis'][] = array( 	'dossier' => $fichier,
-
 
521
															'nom' => $wakka_config['wakka_name'],
-
 
522
															'version' =>  $wakka_config['wikini_version'], 
-
 
523
															'requetes' => $requetes);
-
 
524
					}
430
				}
525
				}
431
			}
526
			}
432
			
-
 
433
			// ACLs : commentaires
-
 
434
			if (preg_match('/_acls$/', $table)) {
-
 
435
				$requete = 	'DELETE FROM '.$table.' '.
-
 
436
							'WHERE page_tag LIKE "Comment%" ';
-
 
437
				$requetes[] = $requete."\n";
-
 
438
				$res = $this->connexion->query($requete);
527
			// Attribution des données pour remplir le squelette
439
				if (PEAR::isError($res)) {
-
 
440
					die($res->getMessage());
-
 
441
				}
-
 
442
				
-
 
443
				$requete = 	'UPDATE '.$table.' '.
-
 
444
							'SET list = "+" '.
-
 
445
							'WHERE privilege = "comment" ';
-
 
446
				$requetes[] = $requete."\n";
-
 
447
				$res = $this->connexion->query($requete);
-
 
448
				if (PEAR::isError($res)) {
-
 
449
					die($res->getMessage());
-
 
450
				}
-
 
451
			}
-
 
452
			// Stockage des requetes
-
 
453
			if (count($requetes) > 0 ) {
-
 
454
				$aso_table['nom'] = $table;
-
 
455
				$aso_table['requetes'] = $requetes;
-
 
456
				$aso_donnees['tables'][] = $aso_table;
528
			$this->getRegistre()->set('squelette_donnees', $aso_donnees);
457
			}
-
 
458
		}
529
		}
459
 
-
 
460
		// Attribution des données pour remplir le squelette
-
 
461
		$this->getRegistre()->set('squelette_donnees', $aso_donnees);
-
 
462
		$this->setChrono('fin');
-
 
463
	}
530
	}
464
}
531
}
465
 
532
 
466
/* +--Fin du code ----------------------------------------------------------------------------------------+
533
/* +--Fin du code ----------------------------------------------------------------------------------------+
467
*
534
*
468
* $Log: RecueilDeDonnees.class.php,v $
535
* $Log: RecueilDeDonnees.class.php,v $
469
* Revision 1.5  2007-07-25 17:45:19  jp_milcent
536
* Revision 1.5  2007-07-25 17:45:19  jp_milcent
470
* Corrections des champs obligatoires.
537
* Corrections des champs obligatoires.
471
*
538
*
472
* Revision 1.4  2007-07-24 14:31:57  jp_milcent
539
* Revision 1.4  2007-07-24 14:31:57  jp_milcent
473
* Ajout dans les fichiers de configuration de l'hôte smtp.
540
* Ajout dans les fichiers de configuration de l'hôte smtp.
474
*
541
*
475
* Revision 1.3  2007-07-11 13:11:06  jp_milcent
542
* Revision 1.3  2007-07-11 13:11:06  jp_milcent
476
* Ajout de la vérification des donnés du formulaire côté serveur.
543
* Ajout de la vérification des donnés du formulaire côté serveur.
477
*
544
*
478
* Revision 1.2  2007-07-10 16:47:30  jp_milcent
545
* Revision 1.2  2007-07-10 16:47:30  jp_milcent
479
* Ajout de l'identification et améliorations diverses.
546
* Ajout de l'identification et améliorations diverses.
480
*
547
*
481
* Revision 1.1  2007-07-09 19:29:26  jp_milcent
548
* Revision 1.1  2007-07-09 19:29:26  jp_milcent
482
* Ajout du module Recueil de données
549
* Ajout du module Recueil de données
483
*
550
*
484
* Revision 1.1  2007-07-09 15:45:59  jp_milcent
551
* Revision 1.1  2007-07-09 15:45:59  jp_milcent
485
* Début ajout du module de Reccueil de Données.
552
* Début ajout du module de Reccueil de Données.
486
*
553
*
487
*
554
*
488
* +-- Fin du code ----------------------------------------------------------------------------------------+
555
* +-- Fin du code ----------------------------------------------------------------------------------------+
489
*/
556
*/
490
?>
557
?>