Subversion Repositories Applications.projet

Rev

Rev 390 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 390 Rev 431
Line 2... Line 2...
2
 
2
 
Line 3... Line 3...
3
class MigrationWiki extends ProjetService {
3
class MigrationWiki extends ProjetService {
Line 4... Line -...
4
	
-
 
5
	const dry_run = false;
-
 
6
	
-
 
7
	public function __construct($config, $demarrer_session= true) {
-
 
8
		parent::__construct($config, $demarrer_session);
-
 
9
		define('NL',"\n"); 
4
	
10
	}
5
	const dry_run = false;
11
	
6
	
12
	private function executerRequeteManip($requete, $mode_fetch = false) {
7
	private function executerRequeteManip($requete, $mode_fetch = false) {
13
		// Fonction de commodité pour afficher les requetes au lieu de les executer
8
		// Fonction de commodité pour afficher les requetes au lieu de les executer
14
		if (self::dry_run) {
9
		if (self::dry_run) {
15
			echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>';	
10
			echo str_replace('),','),'.NL, $requete);	
16
			return true;
11
			return true;
17
		} else {
12
		} else {
Line 23... Line 18...
23
		}
18
		}
24
	}
19
	}
Line 25... Line 20...
25
	
20
	
26
	private function executerRequete($requete, $mode_fetch = false) {
21
	private function executerRequete($requete, $mode_fetch = false) {
27
		if (self::dry_run) {
22
		if (self::dry_run) {
28
			echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'.NL.NL;	
-
 
29
		}
-
 
30
		return $this->bdd->query($requete)->fetchAll($mode_fetch);
23
			echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>';
Line -... Line 24...
-
 
24
		}
31
	}
25
 
-
 
26
		$retour = $this->bdd->query($requete)->fetchAll($mode_fetch);
Line 32... Line 27...
32
	
27
		return $retour;
33
	public function getElement($uid){
28
	}
34
		
29
	
-
 
30
	public function __construct($config, $demarrer_session= true) {
Line -... Line 31...
-
 
31
		parent::__construct($config, $demarrer_session);
-
 
32
		define('NL',"\n"); 
35
		$nom_admin = $this->config['appli']['nom_admin_wiki'];
33
	}
36
		$mail_admin = $this->config['appli']['adresse_admin_wiki'];	
34
 
Line 37... Line 35...
37
		$pass_admin = $this->config['appli']['pass_admin_wiki'];
35
	public function getElement($uid){
Line 38... Line 36...
38
 
36
		exit;
39
		$requete_projets_wikinis = 	'SELECT * FROM gen_wikini';
37
		$requete_projets_wikinis = 'SELECT * FROM gen_wikini';
40
		$wikinis_projets = $this->executerRequete($requete_projets_wikinis, PDO::FETCH_ASSOC);
38
		$wikinis_projets = $this->executerRequete($requete_projets_wikinis, PDO::FETCH_ASSOC);
41
				
39
				
Line 42... Line 40...
42
		foreach($wikinis_projets as $wikini) {
40
		foreach($wikinis_projets as $wikini) {
43
 
41
 
Line 44... Line 42...
44
			// test sur un wiki
42
			// test sur un wiki
45
			/*if($wikini['gewi_code_alpha_wikini'] != 'bibliobota') {
43
			if($wikini['gewi_code_alpha_wikini'] != 'relais') {
46
				continue;
-
 
Line 47... Line 44...
47
			}*/
44
				continue;
48
 
45
			}
Line 49... Line 46...
49
			$base = $wikini['gewi_bdd_nom'];
46
 
Line 61... Line 58...
61
				continue;
58
				continue;
62
			}
59
			}
Line 63... Line 60...
63
			
60
			
Line -... Line 61...
-
 
61
			$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut'];
-
 
62
			
-
 
63
			$nom_admin = $this->config['appli']['nom_admin_wiki'];
-
 
64
			$mail_admin = $this->config['appli']['adresse_admin_wiki'];	
64
			$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut'];
65
			$pass_admin = $this->config['appli']['pass_admin_wiki'];
Line 65... Line 66...
65
						
66
			
66
			$infos_admin = array('name' =>$nom_admin, 'email' => $mail_admin, 'password' => $pass_admin);
67
			$infos_admin = array('name' =>$nom_admin, 'email' => $mail_admin, 'password' => $pass_admin);
67
									
68
									
68
			if(!$this->verifierPresenceTableTriple($base, $prefixe)) {
69
			//if(!$this->verifierPresenceTableTriple($base, $prefixe)) {
69
				echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].NL;
70
				echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].NL;
70
				$this->creerTableTriple($base, $prefixe);
71
			//	$this->creerTableTriple($base, $prefixe);
71
				$this->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin);	
-
 
72
				$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki);
72
			//	$this->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin);	
73
				$this->changerVersionWakkaConfig($chemin_wiki);
73
				$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki);
74
				
74
				$this->changerVersionWakkaConfig($chemin_wiki);
75
				echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].' effectuée '.NL.NL.NL.NL;
75
				echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].' effectuée '.NL.NL.NL.NL;
76
			} else {
-
 
77
				echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL;
-
 
78
			}
76
			//} else {
79
			
77
			//	echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL;
Line 80... Line 78...
80
			$this->ajoutPageFormatees($chemin_wiki, $infos_admin);
78
			//}
Line 148... Line 146...
148
		$requete_suppression_si_admin_present = 'DELETE FROM '.$base.'.'.$prefixe.'users '.
146
		$requete_suppression_si_admin_present = 'DELETE FROM '.$base.'.'.$prefixe.'users '.
149
												'WHERE name ="'.$infos_admin['name'].'"';
147
												'WHERE name ="'.$infos_admin['name'].'"';
Line 150... Line 148...
150
		
148
		
Line 151... Line 149...
151
		$this->executerRequeteManip($requete_suppression_si_admin_present);
149
		$this->executerRequeteManip($requete_suppression_si_admin_present);
152
		
150
		
153
		$requete_creation_admin = "insert into ".$base.'.'.$prefixe."users set ".
151
		$requete_creation_admin = "INSERT INTO ".$base.'.'.$prefixe."users SET ".
154
		"signuptime = now(), ".
152
		"signuptime = now(), ".
155
		"name = '".$infos_admin['name']."', ".
153
		"name = '".$infos_admin['name']."', ".
Line 156... Line 154...
156
		"email = '".$infos_admin['email']."', ".
154
		"email = '".$infos_admin['email']."', ".
157
		"password = md5('".$infos_admin['password']."')";
155
		"password = md5('".$infos_admin['password']."')";
Line 158... Line 156...
158
				
156
				
Line 159... Line 157...
159
		return $this->executerRequeteManip($requete_creation_admin);
157
		return $this->executerRequeteManip($requete_creation_admin);
Line 160... Line 158...
160
	}
158
	}
161
	
159
	
162
	private function changerVersionWakkaConfig($chemin_wikini) {
160
	private function changerVersionWakkaConfig($chemin_wikini) {
Line 163... Line 161...
163
 
161
 
164
		if(file_exists($chemin_wikini.'wakka.config.php')) { 
162
		if(file_exists($chemin_wikini.'/wakka.config.php')) { 
165
			
163
			
166
			$contenu_wakka_config = file_get_contents($chemin_wikini.'wakka.config.php');
164
			$contenu_wakka_config = file_get_contents($chemin_wikini.'/wakka.config.php');
167
			$contenu_wakka_config_maj = str_replace('"wikini_version" => "0.4.3"','"wikini_version" => "0.5.0"',$contenu_wakka_config);
165
			$contenu_wakka_config_maj = str_replace('"wikini_version" => "0.4.3"','"wikini_version" => "0.5.0"',$contenu_wakka_config);
Line 168... Line 166...
168
			$contenu_wakka_config_maj = str_replace("'wikini_version' => '0.4.3'","'wikini_version' => '0.5.0'",$contenu_wakka_config_maj);
166
			$contenu_wakka_config_maj = str_replace("'wikini_version' => '0.4.3'","'wikini_version' => '0.5.0'",$contenu_wakka_config_maj);
169
			
167
			
170
			if(self::dry_run) {
168
			if(self::dry_run) {
171
				echo 'Wakka Config mis à jour '.$contenu_wakka_config_maj.NL;
169
				echo 'Wakka Config mis à jour '.$contenu_wakka_config_maj.NL;
172
			} else {
170
			} else {
Line 173... Line 171...
173
				//file_put_contents($chemin_wikini.'wakka.config.php', $contenu_wakka_config_maj);
171
				file_put_contents($chemin_wikini.'/wakka.config.php', $contenu_wakka_config_maj);
Line 174... Line -...
174
			}
-
 
175
			
172
			}
-
 
173
			
176
			echo 'Changement de la version de wikini '.NL;
174
			echo 'Changement de la version de wikini '.NL;
177
		} else {
175
		} else {
178
			echo 'Attention ! le fichier '.$chemin_wikini.'wakka.config.php n\'existe pas '.NL;
176
			echo 'Attention ! le fichier '.$chemin_wikini.'/wakka.config.php n\'existe pas '.NL;
-
 
177
		}
179
		}
178
	}
180
	}
179
	
181
	
180
	private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) {
Line 182... Line 181...
182
	private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) {
181
		
183
			
182
		echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL;	
184
		if(self::dry_run) {
-
 
185
			echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL;
-
 
186
			$copie_recursive = true;
-
 
187
		} else {
-
 
188
			if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { 
-
 
189
				$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest." 2>&1 " );
-
 
190
			}
-
 
191
		}
-
 
192
		
-
 
193
		return $copie_recursive;
-
 
194
	}
-
 
195
	
-
 
196
	private function ajoutPageFormatees($chemin_wikini, $utilisateur) {
-
 
197
		
-
 
198
		$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut'];
-
 
199
		require_once($chemin_base_wiki_defaut.'wakka_class.php');
-
 
200
		
-
 
201
		$nom_admin = $this->config['appli']['nom_admin_wiki'];
-
 
202
		
-
 
203
		$chemin_wikini = rtrim($chemin_wikini,'/');
-
 
204
		require_once($chemin_wikini.'/wakka.config.php');
-
 
205
		
-
 
206
		// la variable $wakkaConfig est contenu dans le fichier wakka.config.php
-
 
207
		$config = $wakkaConfig;
-
 
208
		
-
 
209
		$wiki = new Wiki($config);
-
 
210
		$wiki->SetGroupACL("admins", $nom_admin);
-
 
211
		
-
 
212
		$wiki->setUser($utilisateur);
-
 
213
					
-
 
214
		//insertion des pages de documentation et des pages standards 
-
 
215
		$d = dir($chemin_base_wiki_defaut.'/setup/doc/');
-
 
216
		
-
 
217
		while ($doc = $d->read()){
-
 
218
			
-
 
219
			if (is_dir($doc) || substr($doc, -4) != '.txt') {continue;}
-
 
220
			
-
 
221
			$pagecontent = implode ('', file($chemin_base_wiki_defaut.'/setup/doc/'.$doc));
-
 
222
			$pagecontent = mb_convert_encoding($pagecontent,'UTF-8','ISO-8859-15'); 
-
 
223
			if ($doc=='_root_page.txt'){
-
 
224
				$pagename = $config["root_page"];
-
 
225
			}else{
-
 
226
				$pagename = substr($doc,0,strpos($doc,'.txt'));
-
 
227
			}
-
 
228
			
-
 
229
			$base = $config['mysql_database'];
-
 
230
	
-
 
231
			$requete_existence_page = "Select tag from ".$base.".".$config['table_prefix']."pages where tag='$pagename'";
-
 
232
			$existence_page = $this->executerRequete($requete_existence_page);
-
 
233
			if (is_array($existence_page) && count($existence_page) > 0) {
-
 
234
				echo 'la page '.$pagename.' existe déjà '.NL;
-
 
235
			} else {
-
 
236
								
-
 
237
				echo 'Ajout de la page '.$pagename.NL;
-
 
238
				
-
 
239
				$requete_maj_pages_anciennes = "UPDATE ".$base.".".$config['table_prefix']."pages ".
-
 
240
					"SET ".
-
 
241
					"latest = 'N'".
-
 
242
					"WHERE tag = '$pagename'";
-
 
243
	
-
 
244
				$reussite = $this->executerRequeteManip($requete_maj_pages_anciennes);
-
 
245
				
-
 
246
				$requete_insertion_page = "INSERT INTO ".$base.".".$config['table_prefix']."pages ".
-
 
247
					"SET tag = '$pagename', ".
-
 
248
					"body = ".$this->bdd->quote($pagecontent).", ".
-
 
249
					"user = '".$nom_admin."', ".
-
 
250
					"owner = '".$nom_admin."', " .
-
 
251
					"time = now(), ".
-
 
252
					"latest = 'Y'";
-
 
253
	
-
 
254
				$reussite = $this->executerRequeteManip($requete_insertion_page);
-
 
255
				
-
 
256
				if(!$reussite) {
-
 
257
					echo 'echec de l\'ajout de la page '.$pagename.NL;	
-
 
258
				} else {
-
 
259
				
-
 
260
					// mise à jour des liens entre pages
-
 
261
					$wiki->SetPage($wiki->LoadPage($pagename,"",0));
183
		if(self::dry_run) {
262
					$wiki->ClearLinkTable();
184
			$copie_recursive = true;