Subversion Repositories Applications.projet

Rev

Rev 390 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 390 Rev 431
1
<?php
1
<?php
2
 
2
 
3
class MigrationWiki extends ProjetService {
3
class MigrationWiki extends ProjetService {
4
	
4
	
5
	const dry_run = false;
5
	const dry_run = false;
6
	
-
 
7
	public function __construct($config, $demarrer_session= true) {
-
 
8
		parent::__construct($config, $demarrer_session);
-
 
9
		define('NL',"\n"); 
-
 
10
	}
-
 
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 {
18
			if($mode_fetch) { 
13
			if($mode_fetch) { 
19
				return $this->bdd->query($requete)->fetchAll($mode_fetch);
14
				return $this->bdd->query($requete)->fetchAll($mode_fetch);
20
			} else {
15
			} else {
21
				return $this->bdd->query($requete);
16
				return $this->bdd->query($requete);
22
			}
17
			}
23
		}
18
		}
24
	}
19
	}
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;	
23
			echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>';
29
		}
-
 
30
		return $this->bdd->query($requete)->fetchAll($mode_fetch);
-
 
31
	}
24
		}
-
 
25
 
32
	
26
		$retour = $this->bdd->query($requete)->fetchAll($mode_fetch);
-
 
27
		return $retour;
33
	public function getElement($uid){
28
	}
34
		
29
	
35
		$nom_admin = $this->config['appli']['nom_admin_wiki'];
30
	public function __construct($config, $demarrer_session= true) {
-
 
31
		parent::__construct($config, $demarrer_session);
-
 
32
		define('NL',"\n"); 
-
 
33
	}
36
		$mail_admin = $this->config['appli']['adresse_admin_wiki'];	
34
 
37
		$pass_admin = $this->config['appli']['pass_admin_wiki'];
35
	public function getElement($uid){
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
				
42
		foreach($wikinis_projets as $wikini) {
40
		foreach($wikinis_projets as $wikini) {
43
 
41
 
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;
44
				continue;
47
			}*/
45
			}
48
 
46
 
49
			$base = $wikini['gewi_bdd_nom'];
47
			$base = $wikini['gewi_bdd_nom'];
50
			$prefixe = $wikini['gewi_table_prefix'];
48
			$prefixe = $wikini['gewi_table_prefix'];
51
			
49
			
52
			$chemin_wiki_sur_site = $this->config['appli']['chemin_wikis_integres'];
50
			$chemin_wiki_sur_site = $this->config['appli']['chemin_wikis_integres'];
53
			//$chemin_wiki = $wikini['gewi_chemin'];
51
			$chemin_wiki = $wikini['gewi_chemin'];
54
			$chemin_wiki = '/home/aurelien/web/wikini/'.$wikini['gewi_code_alpha_wikini'];
-
 
55
			
52
			
56
			echo NL.'Traitement du wiki '.$chemin_wiki.NL;
53
			echo NL.'Traitement du wiki '.$chemin_wiki.NL;
57
			echo NL.$chemin_wiki.NL;
54
			echo NL.$chemin_wiki.NL;
58
			
55
			
59
			if(!file_exists($chemin_wiki)) {
56
			if(!file_exists($chemin_wiki)) {
60
				echo 'Impossible de migrer le wikini '.$wikini['gewi_code_alpha_wikini'].' : le dossier n\'existe pas'.NL.NL.NL.NL;
57
				echo 'Impossible de migrer le wikini '.$wikini['gewi_code_alpha_wikini'].' : le dossier n\'existe pas'.NL.NL.NL.NL;
61
				continue;
58
				continue;
62
			}
59
			}
63
			
60
			
64
			$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut'];
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'];	
-
 
65
			$pass_admin = $this->config['appli']['pass_admin_wiki'];
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->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin);	
72
				$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki);
-
 
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 {
76
			//} else {
77
				echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL;
-
 
78
			}
-
 
79
			
77
			//	echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL;
80
			$this->ajoutPageFormatees($chemin_wiki, $infos_admin);
78
			//}
81
		}
79
		}
82
	}
80
	}
83
 
81
 
84
	private function verifierPresenceTableTriple($base, $prefixe) {
82
	private function verifierPresenceTableTriple($base, $prefixe) {
85
		
83
		
86
		$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables
84
		$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables
87
		WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'triples"';
85
		WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'triples"';
88
				
86
				
89
		$resultat_presence_table = $this->executerRequete($requete_presence_table);
87
		$resultat_presence_table = $this->executerRequete($requete_presence_table);
90
		
88
		
91
		$presence_table = false;
89
		$presence_table = false;
92
		
90
		
93
		foreach($resultat_presence_table as $table_est_presente) {
91
		foreach($resultat_presence_table as $table_est_presente) {
94
			if($table_est_presente['table_existe'] >= 1) {
92
			if($table_est_presente['table_existe'] >= 1) {
95
				$presence_table = true;
93
				$presence_table = true;
96
				break;
94
				break;
97
			}
95
			}
98
		}
96
		}
99
		
97
		
100
		return $presence_table;
98
		return $presence_table;
101
	}
99
	}
102
 
100
 
103
	private function creerTableTriple($base, $prefixe) {
101
	private function creerTableTriple($base, $prefixe) {
104
		
102
		
105
		echo 'Création de la table triple '.NL;
103
		echo 'Création de la table triple '.NL;
106
		
104
		
107
		$requete_creation_table = 'CREATE TABLE '.$base.'.'.$prefixe.'triples (' . 
105
		$requete_creation_table = 'CREATE TABLE '.$base.'.'.$prefixe.'triples (' . 
108
			' id int(10) unsigned NOT NULL auto_increment,' . 
106
			' id int(10) unsigned NOT NULL auto_increment,' . 
109
			' resource varchar(255) NOT NULL default \'\',' . 
107
			' resource varchar(255) NOT NULL default \'\',' . 
110
			' property varchar(255) NOT NULL default \'\',' . 
108
			' property varchar(255) NOT NULL default \'\',' . 
111
			' value text NOT NULL default \'\',' . 
109
			' value text NOT NULL default \'\',' . 
112
			' PRIMARY KEY  (id),' . 
110
			' PRIMARY KEY  (id),' . 
113
			' KEY resource (resource),' . 
111
			' KEY resource (resource),' . 
114
			' KEY property (property)' . 
112
			' KEY property (property)' . 
115
			') TYPE=MyISAM';
113
			') TYPE=MyISAM';
116
 
114
 
117
		return $this->executerRequeteManip($requete_creation_table);
115
		return $this->executerRequeteManip($requete_creation_table);
118
	}
116
	}
119
	
117
	
120
	private function verifierPresenceTableUsers($base, $prefixe) {
118
	private function verifierPresenceTableUsers($base, $prefixe) {
121
		
119
		
122
		$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables
120
		$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables
123
		WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'users"';
121
		WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'users"';
124
				
122
				
125
		$resultat_presence_table = $this->executerRequete($requete_presence_table);
123
		$resultat_presence_table = $this->executerRequete($requete_presence_table);
126
		
124
		
127
		$presence_table = false;
125
		$presence_table = false;
128
		
126
		
129
		foreach($resultat_presence_table as $table_est_presente) {
127
		foreach($resultat_presence_table as $table_est_presente) {
130
			if($table_est_presente['table_existe'] >= 1) {
128
			if($table_est_presente['table_existe'] >= 1) {
131
				$presence_table = true;
129
				$presence_table = true;
132
				break;
130
				break;
133
			}
131
			}
134
		}
132
		}
135
		
133
		
136
		return $presence_table;
134
		return $presence_table;
137
	}
135
	}
138
	
136
	
139
	private function ajouterUtilisateurAdmin($base, $prefixe, $infos_admin) {
137
	private function ajouterUtilisateurAdmin($base, $prefixe, $infos_admin) {
140
		
138
		
141
		if(!$this->verifierPresenceTableUsers($base, $prefixe)) {
139
		if(!$this->verifierPresenceTableUsers($base, $prefixe)) {
142
			echo 'Impossible d\'ajouter l\'adminwiki : '.$prefixe.'_users n\'existe_pas'.NL;
140
			echo 'Impossible d\'ajouter l\'adminwiki : '.$prefixe.'_users n\'existe_pas'.NL;
143
			return;	
141
			return;	
144
		}
142
		}
145
		
143
		
146
		echo 'Ajout de l\'utilisateur wikiAdmin '.NL;
144
		echo 'Ajout de l\'utilisateur wikiAdmin '.NL;
147
		
145
		
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'].'"';
150
		
148
		
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']."', ".
156
		"email = '".$infos_admin['email']."', ".
154
		"email = '".$infos_admin['email']."', ".
157
		"password = md5('".$infos_admin['password']."')";
155
		"password = md5('".$infos_admin['password']."')";
158
				
156
				
159
		return $this->executerRequeteManip($requete_creation_admin);
157
		return $this->executerRequeteManip($requete_creation_admin);
160
	}
158
	}
161
	
159
	
162
	private function changerVersionWakkaConfig($chemin_wikini) {
160
	private function changerVersionWakkaConfig($chemin_wikini) {
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);
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 {
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);
174
			}
172
			}
175
			
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;
179
		}
177
		}
180
	}
178
	}
181
	
179
	
182
	private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) {
180
	private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) {
183
			
-
 
184
		if(self::dry_run) {
181
		
-
 
182
		echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL;	
185
			echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL;
183
		if(self::dry_run) {
186
			$copie_recursive = true;
184
			$copie_recursive = true;
187
		} else {
185
		} else {
188
			if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { 
186
			if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { 
-
 
187
				echo " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest."/ 2>&1 ";
189
				$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest." 2>&1 " );
188
				$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest."/ 2>&1 " );
190
			}
189
			}
191
		}
190
		}
192
		
191
		
193
		return $copie_recursive;
192
		return $copie_recursive;
194
	}
193
	}
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));
-
 
262
					$wiki->ClearLinkTable();
-
 
263
					$wiki->StartLinkTracking();
-
 
264
					$wiki->TrackLinkTo($pagename);
-
 
265
					$wiki->StopLinkTracking();
-
 
266
					$wiki->WriteLinkTable();
-
 
267
					$wiki->ClearLinkTable();
-
 
268
				}
-
 
269
			}
-
 
270
		}	
-
 
271
	}
-
 
272
}
194
}
273
?>
195
?>