New file |
0,0 → 1,273 |
<?php |
|
class MigrationWiki extends ProjetService { |
|
const dry_run = false; |
|
public function __construct($config, $demarrer_session= true) { |
parent::__construct($config, $demarrer_session); |
define('NL',"\n"); |
} |
|
private function executerRequeteManip($requete, $mode_fetch = false) { |
// Fonction de commodité pour afficher les requetes au lieu de les executer |
if (self::dry_run) { |
echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'; |
return true; |
} else { |
if($mode_fetch) { |
return $this->bdd->query($requete)->fetchAll($mode_fetch); |
} else { |
return $this->bdd->query($requete); |
} |
} |
} |
|
private function executerRequete($requete, $mode_fetch = false) { |
if (self::dry_run) { |
echo '<pre>'.str_replace('),','),'.NL, $requete).'</pre>'.NL.NL; |
} |
return $this->bdd->query($requete)->fetchAll($mode_fetch); |
} |
|
public function getElement($uid){ |
|
$nom_admin = $this->config['appli']['nom_admin_wiki']; |
$mail_admin = $this->config['appli']['adresse_admin_wiki']; |
$pass_admin = $this->config['appli']['pass_admin_wiki']; |
|
$requete_projets_wikinis = 'SELECT * FROM gen_wikini'; |
$wikinis_projets = $this->executerRequete($requete_projets_wikinis, PDO::FETCH_ASSOC); |
|
foreach($wikinis_projets as $wikini) { |
|
// test sur un wiki |
/*if($wikini['gewi_code_alpha_wikini'] != 'bibliobota') { |
continue; |
}*/ |
|
$base = $wikini['gewi_bdd_nom']; |
$prefixe = $wikini['gewi_table_prefix']; |
|
$chemin_wiki_sur_site = $this->config['appli']['chemin_wikis_integres']; |
//$chemin_wiki = $wikini['gewi_chemin']; |
$chemin_wiki = '/home/aurelien/web/wikini/'.$wikini['gewi_code_alpha_wikini']; |
|
echo NL.'Traitement du wiki '.$chemin_wiki.NL; |
echo NL.$chemin_wiki.NL; |
|
if(!file_exists($chemin_wiki)) { |
echo 'Impossible de migrer le wikini '.$wikini['gewi_code_alpha_wikini'].' : le dossier n\'existe pas'.NL.NL.NL.NL; |
continue; |
} |
|
$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut']; |
|
$infos_admin = array('name' =>$nom_admin, 'email' => $mail_admin, 'password' => $pass_admin); |
|
if(!$this->verifierPresenceTableTriple($base, $prefixe)) { |
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].NL; |
$this->creerTableTriple($base, $prefixe); |
$this->ajouterUtilisateurAdmin($base,$prefixe, $infos_admin); |
$this->copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki); |
$this->changerVersionWakkaConfig($chemin_wiki); |
|
echo 'migration du wiki '.$wikini['gewi_code_alpha_wikini'].' effectuée '.NL.NL.NL.NL; |
} else { |
echo 'wiki dejà à jour '.$wikini['gewi_code_alpha_wikini'].NL.NL.NL.NL; |
} |
|
$this->ajoutPageFormatees($chemin_wiki, $infos_admin); |
} |
} |
|
private function verifierPresenceTableTriple($base, $prefixe) { |
|
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'triples"'; |
|
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
|
$presence_table = false; |
|
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
|
return $presence_table; |
} |
|
private function creerTableTriple($base, $prefixe) { |
|
echo 'Création de la table triple '.NL; |
|
$requete_creation_table = 'CREATE TABLE '.$base.'.'.$prefixe.'triples (' . |
' id int(10) unsigned NOT NULL auto_increment,' . |
' resource varchar(255) NOT NULL default \'\',' . |
' property varchar(255) NOT NULL default \'\',' . |
' value text NOT NULL default \'\',' . |
' PRIMARY KEY (id),' . |
' KEY resource (resource),' . |
' KEY property (property)' . |
') TYPE=MyISAM'; |
|
return $this->executerRequeteManip($requete_creation_table); |
} |
|
private function verifierPresenceTableUsers($base, $prefixe) { |
|
$requete_presence_table = 'SELECT COUNT(*) as table_existe FROM information_schema.tables |
WHERE TABLE_SCHEMA = "'.$base.'" AND TABLE_NAME = "'.$prefixe.'users"'; |
|
$resultat_presence_table = $this->executerRequete($requete_presence_table); |
|
$presence_table = false; |
|
foreach($resultat_presence_table as $table_est_presente) { |
if($table_est_presente['table_existe'] >= 1) { |
$presence_table = true; |
break; |
} |
} |
|
return $presence_table; |
} |
|
private function ajouterUtilisateurAdmin($base, $prefixe, $infos_admin) { |
|
if(!$this->verifierPresenceTableUsers($base, $prefixe)) { |
echo 'Impossible d\'ajouter l\'adminwiki : '.$prefixe.'_users n\'existe_pas'.NL; |
return; |
} |
|
echo 'Ajout de l\'utilisateur wikiAdmin '.NL; |
|
$requete_suppression_si_admin_present = 'DELETE FROM '.$base.'.'.$prefixe.'users '. |
'WHERE name ="'.$infos_admin['name'].'"'; |
|
$this->executerRequeteManip($requete_suppression_si_admin_present); |
|
$requete_creation_admin = "insert into ".$base.'.'.$prefixe."users set ". |
"signuptime = now(), ". |
"name = '".$infos_admin['name']."', ". |
"email = '".$infos_admin['email']."', ". |
"password = md5('".$infos_admin['password']."')"; |
|
return $this->executerRequeteManip($requete_creation_admin); |
} |
|
private function changerVersionWakkaConfig($chemin_wikini) { |
|
if(file_exists($chemin_wikini.'wakka.config.php')) { |
|
$contenu_wakka_config = file_get_contents($chemin_wikini.'wakka.config.php'); |
$contenu_wakka_config_maj = str_replace('"wikini_version" => "0.4.3"','"wikini_version" => "0.5.0"',$contenu_wakka_config); |
$contenu_wakka_config_maj = str_replace("'wikini_version' => '0.4.3'","'wikini_version' => '0.5.0'",$contenu_wakka_config_maj); |
|
if(self::dry_run) { |
echo 'Wakka Config mis à jour '.$contenu_wakka_config_maj.NL; |
} else { |
//file_put_contents($chemin_wikini.'wakka.config.php', $contenu_wakka_config_maj); |
} |
|
echo 'Changement de la version de wikini '.NL; |
} else { |
echo 'Attention ! le fichier '.$chemin_wikini.'wakka.config.php n\'existe pas '.NL; |
} |
} |
|
private function copierFichiersWikini($chemin_base_wiki_defaut, $chemin_wiki_dest) { |
|
if(self::dry_run) { |
echo 'copie de '.$chemin_base_wiki_defaut.' vers '.$chemin_wiki_dest.NL; |
$copie_recursive = true; |
} else { |
if(trim($chemin_base_wiki_defaut) != '/' && trim($chemin_wiki_dest) != '/') { |
$copie_recursive = shell_exec( " cp -Rf -a ".$chemin_base_wiki_defaut."* ".$chemin_wiki_dest." 2>&1 " ); |
} |
} |
|
return $copie_recursive; |
} |
|
private function ajoutPageFormatees($chemin_wikini, $utilisateur) { |
|
$chemin_base_wiki_defaut = $this->config['appli']['chemin_wiki_defaut']; |
require_once($chemin_base_wiki_defaut.'wakka_class.php'); |
|
$nom_admin = $this->config['appli']['nom_admin_wiki']; |
|
$chemin_wikini = rtrim($chemin_wikini,'/'); |
require_once($chemin_wikini.'/wakka.config.php'); |
|
// la variable $wakkaConfig est contenu dans le fichier wakka.config.php |
$config = $wakkaConfig; |
|
$wiki = new Wiki($config); |
$wiki->SetGroupACL("admins", $nom_admin); |
|
$wiki->setUser($utilisateur); |
|
//insertion des pages de documentation et des pages standards |
$d = dir($chemin_base_wiki_defaut.'/setup/doc/'); |
|
while ($doc = $d->read()){ |
|
if (is_dir($doc) || substr($doc, -4) != '.txt') {continue;} |
|
$pagecontent = implode ('', file($chemin_base_wiki_defaut.'/setup/doc/'.$doc)); |
$pagecontent = mb_convert_encoding($pagecontent,'UTF-8','ISO-8859-15'); |
if ($doc=='_root_page.txt'){ |
$pagename = $config["root_page"]; |
}else{ |
$pagename = substr($doc,0,strpos($doc,'.txt')); |
} |
|
$base = $config['mysql_database']; |
|
$requete_existence_page = "Select tag from ".$base.".".$config['table_prefix']."pages where tag='$pagename'"; |
$existence_page = $this->executerRequete($requete_existence_page); |
if (is_array($existence_page) && count($existence_page) > 0) { |
echo 'la page '.$pagename.' existe déjà '.NL; |
} else { |
|
echo 'Ajout de la page '.$pagename.NL; |
|
$requete_maj_pages_anciennes = "UPDATE ".$base.".".$config['table_prefix']."pages ". |
"SET ". |
"latest = 'N'". |
"WHERE tag = '$pagename'"; |
|
$reussite = $this->executerRequeteManip($requete_maj_pages_anciennes); |
|
$requete_insertion_page = "INSERT INTO ".$base.".".$config['table_prefix']."pages ". |
"SET tag = '$pagename', ". |
"body = ".$this->bdd->quote($pagecontent).", ". |
"user = '".$nom_admin."', ". |
"owner = '".$nom_admin."', " . |
"time = now(), ". |
"latest = 'Y'"; |
|
$reussite = $this->executerRequeteManip($requete_insertion_page); |
|
if(!$reussite) { |
echo 'echec de l\'ajout de la page '.$pagename.NL; |
} else { |
|
// mise à jour des liens entre pages |
$wiki->SetPage($wiki->LoadPage($pagename,"",0)); |
$wiki->ClearLinkTable(); |
$wiki->StartLinkTracking(); |
$wiki->TrackLinkTo($pagename); |
$wiki->StopLinkTracking(); |
$wiki->WriteLinkTable(); |
$wiki->ClearLinkTable(); |
} |
} |
} |
} |
} |
?> |