CdP

NUKE2WordPress. Ecco il sorgente per migrare i dati da PhpNuke a WordPress

Come avevamo promesso,  abbiamo appena rilasciato il programma NUKE2Wordpress, per migrare i dati da Phpnuke 5.5 a WordPress 4.1.1.

Il codice non è ottimizzato e non é scritto in modo elegante. Abbiamo scritto le istruzioni man mano che ci rendevamo conto di come funzionano le tabelle di WordPress, fortemente de-normalizzate e quindi difficili da comprendere dall’analisi del disegno delle entità.

Con questo script siamo riusciti a trasportare gli utenti, gli amministratori, gli argomenti, gli articoli ed i commenti dal vecchio prodotto al nuovo. Chiaramente questo significa che il codice é in qualche modo realizzato non solo sulla struttura dati, ma anche sui dati stessi che noi avevamo dal 2002 al 22 marzo scorso. Inoltre le stesse tabelle della nostra versione di Nuke erano state da noi stessi modificate in passato, per implementare funzioni che ci interessavano.

Questo significa che lo script non sarà utilizzabile da altri senza un adeguamento alle proprie esigenze ed ai propri dati. Si tratta comunque di una buona base di partenza per effettuare, peraltro usata anche dagli amici di www.casaledicarinola.net  per migrare il proprio database Phpnuke 7.x a WordPress 4.1.1.

Supponiamo che a breve renderanno pubblico lo script adeguato alle loro esigenze.

Ci farebbe piacere linkare tutte le versioni modificate e migliorate dello script in questo articolo ,per costruire un piccolo repository utile per chiunque dovesse affrontare una migrazione simile, nel quale  cercare la versione dello script che meglio si adatta alle proprie esigenze.

 

Pietro Ricciardi

 

<html>
 <body>
<?php
/*===================================================================================================================================

writen by: 

Pietro Ricciardi pietro«dot»ricciardi«at»gmail«dot»com



NUKE2WordPress is used to migrate posts, autors, users, comments and topics from phpnuke 5.5 to wordpress 4.1.1

No WARRANTY for the use.


+++++++verify the execution with local copies of datbases
       see instuction in the next paragraph (in italian)


PLease nofify me of improvements you implements and credit me too
       
	   
SOFTWARE RILASCIATO SOTTO LICENZA GPL 

This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>
/*===================================================================================================================================






/*===================================================================================================================================

Testato per migrare da phpnuke 5.5. a WordPress 4.1.1


VALORIZZARE CORRETTAMENTE LE VARIABILI INIZIALI


ASSICURARSI CHE L'UTENTE CREATO DI DEFAULT COME AMMINISTRATORE DI WORDPRESS IN FASE DI INSTALLAZIONE ABBIA NOME E NIKNAME DIVERSO 
DA TUTTI GLI AUTORI DELLA TABELLA NUKE_AUTORS DI PHPNUKE.

ASSICURARSI CHE NON CI SIANO AUTORI DI PHPNUKE (NUKE_AUTORS) E USER (NUKE_USERS)CON LO STESSO NOME  <<<<<< se si cambiare il nome
all'utente con lo stesso nome dell'amministratore sulla tabella nuke_users

ATTENZIONE ... wordpress non ha contatore di letture. Per importare le letture fatte degli articoli su wordpress da nuke installare
il plugin WP Statistics ( https://wordpress.org/plugins/wp-statistics ) e disateriscre la parte di codice relativa alla tabella 
wp_statistics_pages... tenere presente che il programma assume che si usa coem Impostazioni permalink "Predefinito"

====================================================================================================================================*/


$servername = "[your database server]";
$username = "[your database username]";
$password = "[your username password]";
//database nuke
$dbname = "[your phpnuke5.5 database]";
//database wordpress
$dbname2 = "[your wordpress 4.1.1 database]";

//compreso slash finale - include final '/'
$sitoWordpes = "[full path of your wordpress installation home as http://www.mysite.com/]";



//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//
//^^^^^^^^^^ have you correctly modified the variables before? ^^^^^^^^^
//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


set_time_limit (0);
//ini_set('magic_quotes_runtime', 1);



// Connessione al database phpnuke
$connNuke = new mysqli($servername, $username, $password, $dbname);
// Test connessione
if ($connNuke->connect_error) {
    die("Connessione a nuke fallita: " . $connNuke->connect_error);
}

// II Connessione al database phpnuke
$connNuke2 = new mysqli($servername, $username, $password, $dbname);
// Test connessione
if ($connNuke2->connect_error) {
    die("Connessione a nuke fallita: " . $connNuke->connect_error);
}


// Connessione al db wordpress
$conn2 = new mysqli($servername, $username, $password, $dbname2);
// Test Connessione
if ($conn2->connect_error) {
    die("Connessione a wordpress failed: " . $conn2->connect_error);
}

// Seconda connecssione al db wordpress  
$conn3 = new mysqli($servername, $username, $password, $dbname2);
// Test connessione
if ($conn3->connect_error) {
    die("Connessione a wordpress failed: " . $conn3->connect_error);
}


//Tolgo l'auto increment dalla tabella wp_users per portare gli utenti da nuke con il loro id
$query2 = "ALTER TABLE wp_users MODIFY COLUMN ID bigint(20) unsigned not null ";
if($conn2->query($query2)) {
    echo "<br>Autoextend eliminata<br>";
}


// Seleziono gli utenti da nuke
$sql = "SELECT uid, uname, pass, email, url, user_regdate, user_intrest FROM nuke_users WHERE uid<>1 order by uid";
$result = $connNuke->query($sql);

// 
if ($result->num_rows > 0) {
    echo "<br><br><h1>nuke users</h1><br><table><tr><th>AID</th><th>Name</th><th>Pass</th><th>Email</th><th>Url</th><th>RegDate</th><th>Interest</th></tr>";
    
	// scorro gli user di nuke
    while($row = $result->fetch_assoc()) {
		
		
		$year = substr($row["user_regdate"], 7, 10); 
		$month = substr($row["user_regdate"], 0,3);
		
		if ($month=='Jan'){$month='01';}
		if ($month=='Feb'){$month='02';}
		if ($month=='Mar'){$month='03';}
		if ($month=='Apr'){$month='04';}
		if ($month=='May'){$month='05';}
		if ($month=='Jun'){$month='06';}
		if ($month=='Jul'){$month='07';}
		if ($month=='Aug'){$month='08';}
		if ($month=='Sep'){$month='09';}
		if ($month=='Oct'){$month='10';}
		if ($month=='Nov'){$month='11';}
		if ($month=='Dec'){$month='12';}
		
		$day = substr($row["user_regdate"], 4,2);
		
		//imposto data nel formato che vuole wordpress
		$regdate = $year . '-' . $month . '-' . $day . ' 10:00:00';
		 
		$userId  = $row["uid"];
		$uname = $row["uname"];
		$pass = $row["pass"];
		$email = $row["email"];
		//$url = $row["$url"];
		
		//inserisco in wordpress l'utente letto da nuke
		$query2 = "INSERT  INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES  ('".$userId."', '".$uname."', '".$pass."', '".$uname."',     '".$email."', '"."', '".$regdate."', '"."', 0, '".$uname."'  )";							
		$conn2->query($query2);

		
		
		// inserisco nella tabella usermeta i metatag minimi necessari per censire gli utenti come subscriber di nuke
		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'nickname', '".$uname."'  )";
		$conn3->query($query3);
		
		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'first_name', '"."'  )";
		$conn3->query($query3);

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'last_name', '"."'  )";
		$conn3->query($query3);

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'description', '"."'  )";
		$conn3->query($query3);

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'rich_editing', 'true'  )";
		$conn3->query($query3);

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'comment_shortcuts', 'false'  )";
		$conn3->query($query3);		

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'admin_color', 'fresh'  )";
		$conn3->query($query3);	

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'use_ssl', '0'  )";
		$conn3->query($query3);	

		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'show_admin_bar_front', 'true'  )";
		$conn3->query($query3);	
		
		//questo parametro identifica l'utene con privilegi di subscriber... 
		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'wp_capabilities', 'a:1:{s:10:\"subscriber\";b:1;}'  )";
		$conn3->query($query3);		
		
		$query3 = "INSERT IGNORE INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$userId."', 'wp_user_level', '0'  )";
		$conn3->query($query3);			
		
        echo "<tr><td>".$row["uid"]."</td><td>".$row["uname"]."</td><td>".$row["pass"]."</td><td>".$row["email"]."</td><td>".$row["url"]."</td><td>".$regdate."</td><td>".$row["user_intrest"]."</td></tr>";
    }
    echo "</table><br><br><br>";
	
	
} 

//reimposto l'autoincrement sulla tabella users di wordpress
$query2 = "ALTER TABLE wp_users MODIFY COLUMN ID bigint(20) unsigned not null AUTO_INCREMENT";
if($conn2->query($query2)) 
{
	echo "<br>Autoextend reinserita<br>";
}



// Seleziono i nuke_authors da nuke
$sql = "SELECT aid, name, url, email, pwd FROM nuke_authors";
$resultAut = $connNuke->query($sql);

	
if ($resultAut->num_rows > 0) {

	echo "<br><br><h1>nuke authors</h1><br><table><tr><th>AID</th><th>Name</th><th>url</th><th>Email</th><th>pwd</th></tr>";

	//scorro gli autori inseriti in nuke
	while($rowAut = $resultAut->fetch_assoc()) {

		
		$userId  = $rowAut["aid"];
		$uname  = $rowAut["name"];
		$url  = $rowAut["url"];
		$email  = $rowAut["email"];
		$pass = $rowAut["pwd"];
		
		$pass = mysql_real_escape_string($pass);
		$uname = mysql_real_escape_string($uname);
		$userId = mysql_real_escape_string($userId);
		
		//Inserisco tutti gli amministratori come se fossero stati censiti dal primo giorno di vita del portale (22/3/2002)....
		$regdate = '2002-03-22 10:00:00';
				
		//inserisco in wordpress l'autore letto da nuke
		$query2 = "INSERT  INTO wp_users (user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) 
		                         VALUES  ('".$userId."', '".$pass."', '".$uname."', '".$email."', '"."', '".$regdate."', '"."', 0, '".$uname."'  )";							
		$conn2->query($query2);
	
	
		//ricavo l'id che la funzione autoincrement ha associato all'autore inserito
		$res = $conn2->query( "SELECT LAST_INSERT_ID()" );
		$newRow = $res->fetch_assoc();
		$newId = $newRow["LAST_INSERT_ID()"];
	
	
		//in user_meta inserisco gli attributi che differenzioano gli autori dal normale utente 
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'nickname', '".$uname."'  )";
		$conn3->query($query3);

		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'first_name', ''  )";
		$conn3->query($query3);

		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'last_name', ''  )";
		$conn3->query($query3);

		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'description', ''  )";
		$conn3->query($query3);
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'rich_editing', 'true'  )";
		$conn3->query($query3);
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'comment_shortcuts', 'false'  )";
		$conn3->query($query3);
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'admin_color', 'fresh'  )";
		$conn3->query($query3);		
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'use_ssl', '0'  )";
		$conn3->query($query3);		
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'show_admin_bar_front', 'true'  )";
		$conn3->query($query3);		
		
		// la stringa seguente indentifica un amministratore a differenza del valore preso per users...
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'wp_capabilities', 'a:1:{s:13:\"administrator\";b:1;}'  )";
		$conn3->query($query3);		
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'wp_user_level', '10'  )";
		$conn3->query($query3);		
		
		//query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'dismissed_wp_pointers', 'wp360_locks,wp390_widgets,wp410_dfw'  )";
		//$conn3->query($query3);
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'show_welcome_panel', '0'  )";
		$conn3->query($query3);		
		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'session_tokens', 'a:1:{s:64:\"bb3ffbe75d7fcd1345e50fb01ddd65cc4ca605853f332e3d0a007d84985b195c\";a:4:{s:10:\"expiration\";i:1425589995;s:2:\"ip\";s:9:\"127.0.0.1\";s:2:\"ua\";s:109:\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36\";s:5:\"login\";i:1425417195;}}'  )";
		$conn3->query($query3);		
		
		//verificare se 0 corretto.... su reverse mi risulterebbe 26 ma nn ne sono convinto 🙂 
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'wp_dashboard_quick_press_last_post_id', '0'  )";
		$conn3->query($query3);		
		
		//dovrebbe essere al conf. della dashboard ... si puó omettere, ma ormai sono in preda ad allucinazioni da overdose di dati 😀 
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'meta-box-order_dashboard', 'a:4:{s:6:\"normal\";s:19:\"dashboard_right_now\";s:4:\"side\";s:21:\"dashboard_quick_press\";s:7:\"column3\";s:18:\"dashboard_activity\";s:7:\"column4\";s:17:\"dashboard_primary\";}'  )";
		$conn3->query($query3);

		//anche questo si potrebbe omettere 
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'managenav-menuscolumnshidden', 'a:4:{i:0;s:11:\"link-target\";i:1;s:11:\"css-classes\";i:2;s:3:\"xfn\";i:3;s:11:\"description\";}'  )";
		$conn3->query($query3);
				
		//ed anche questo
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'metaboxhidden_nav-menus', 'a:2:{i:0;s:8:\"add-post\";i:1;s:12:\"add-post_tag\";}'  )";
		$conn3->query($query3);
				
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'wp_user-settings', 'editor=html'  )";
		$conn3->query($query3);
				
		//credo aggiunto da plugins		
		$query3 = "INSERT  INTO wp_usermeta (user_id, meta_key, meta_value) VALUES ('".$newId."', 'wp_user-settings-time', '1423143797'  )";
		$conn3->query($query3);
				
		echo "<tr><td>".$userId."</td><td>".$uname."</td><td>".$url."</td><td>".$email."</td><td>".$pass."</td></tr><br><br><br>";		
				
	}
	echo "</table><br><br><br>";
	
}



//Tolgo l'auto increment dalla tabella wp_terms per portare i topics  da nuke con il loro id
$query4 = "ALTER TABLE wp_terms MODIFY COLUMN ID bigint(20) unsigned  not null ";
if($conn2->query($query4)) {
    echo "<br>Autoextend eliminata<br>";
}
	
//Tolgo l'auto increment dalla tabella wp_term_taxonomy per portare i topics  da nuke con il loro id
$query4 = "ALTER TABLE wp_term_taxonomy MODIFY COLUMN term_taxonomy_id bigint(20) unsigned  not null ";
if($conn2->query($query4)) {
    echo "<br>Autoextend eliminata<br>";
}


// Seleziono i nuke_topics da nuke
$sqlTopics = "SELECT topicid, topicname, topictext FROM nuke_topics";
$resultTopics = $connNuke->query($sqlTopics);

	
if ($resultTopics->num_rows > 0) {
	
	
	echo "<br><br><h1>wp terms (topics)</h1><br><table><tr><th>ID</th><th>Name</th><th>descrizione</th></tr>";
	
	//scorro i topics di nuke
    while($rowTopics = $resultTopics->fetch_assoc()) {
	
		$topicId    = $rowTopics["topicid"];
		$topicName  = $rowTopics["topicname"];
		$topicText  = $rowTopics["topictext"];
	
		$topicName = mysql_real_escape_string($topicName);
		$topicText = mysql_real_escape_string($topicText);
	
	
		//inserisco in wordpress il topic letto da nuke
		$query2 = "INSERT  INTO wp_terms (term_id, name, slug) VALUES  ('".$topicId."', '".$topicText."', '".$topicName."'  )";							
		$conn2->query($query2);


		//Calcolo il numero di articoli per il topic corrente, da inserire nella term_taxonomy di wordpress
		$sqlArticoliPerTopic = "SELECT count(*) as numeroArticoli  FROM nuke_stories where topic =".$topicId." ";
		$resultNumArt = $connNuke2->query($sqlArticoliPerTopic);
		$contaArticoliRow = $resultNumArt->fetch_assoc();
		$numArticoli = $contaArticoliRow["numeroArticoli"];
		
		//per attivare il topic devo inserire il record nella tassonomia
		$query2 = "INSERT  INTO wp_term_taxonomy (term_taxonomy_id, term_id, taxonomy, description, parent, count) VALUES  ('".$topicId."', '".$topicId."', 'category', ' ', '0', '".$numArticoli."'  )";							
		$conn2->query($query2);
		
		
		
		echo "<tr><th>".$topicId."</th><th>".$topicName."</th><th>".$topicText."</th></tr>";
				
	}
	echo "</table><br><br><br>";
}

//reimposto l'autoincrement sulla tabella users di wordpress
$query2 = "ALTER TABLE wp_terms MODIFY COLUMN ID bigint(20) unsigned  not null AUTO_INCREMENT";
if($conn2->query($query2)) 
{
	echo "<br>Autoextend reinserita<br>";
}

//reimposto l'autoincrement sulla tabella users di wordpress
$query2 = "ALTER TABLE wp_term_taxonomy MODIFY COLUMN term_taxonomy_id bigint(20) unsigned  not null AUTO_INCREMENT";
if($conn2->query($query2)) 
{
	echo "<br>Autoextend reinserita<br>";
}


//---------------------------------------------------------------qui la parte complessa... la gestione dei post (nuke_Stories) -------------------------
// 
// Attenzione, la versione 5.5 di nuke ha gli articoli divisi in 2 l'occhiello e il corpo. per inserirli in wp
// concateno i due contenuti.
//
// Nelle versioni successive di nuke non é piú cosí quindi va modificata la select da nuke e eliminata la concatenazione prima delel insert
// se necessario andrebbe tagliata la stringa dopo un numero prefissato di parole per aggiungere il tag more di wp
//
//-----------------------------------------------------------------------------------------------------------------------------------------------------



//Tolgo l'auto increment dalla tabella wp_posts per portare gli articoli da nuke con lo stesso id
$query2 = "ALTER TABLE wp_posts MODIFY COLUMN ID bigint(20)  unsigned  not null ";
if($conn2->query($query2)) {
    echo "<br>Autoextend eliminata<br>";
}


// Seleziono i posts da nuke_stories (ATTENZIONE --- LA CONCAT NELLA QUERY SEGUENTE POTREBBE DOVER ESSERE MODIFICATA PER ALTRE VERSIONI DI PHPNUKE DIVERSE DALLA 5.5)
// ALTRA NOTA: La versione di php_nuke usava un plugin per le foto, é probabile che alcuni di questi campi non li abbiate... asta eliminarli dalla query...
$sql = "SELECT `sid`, `catid`, `aid`, `title`, `time`, concat(`hometext`,' <!--more--> ',`bodytext`) as articolo, 
               `comments`, `counter`, `topic`, `informant`, `notes`, `ihome`, `has_media`, `alanguage`, `acomm`, `haspoll`, `pollID`, `score`, `ratings` FROM `nuke_stories` order by `sid` ";
$result = $connNuke->query($sql);

// 
if ($result->num_rows > 0) {
	
		
	echo "<br><br><h1>WP POSTS (articoli)</h1><br>";
	
	//scorro i gli articoli di nuke
    while($rowPosts = $result->fetch_assoc()) {
		
		$sid    = $rowPosts["sid"];
		$catId  = $rowPosts["catid"];
		$aid  = $rowPosts["aid"];
		$title  = $rowPosts["title"];
		$time  = $rowPosts["time"];
		$articolo  = $rowPosts["articolo"];
		$comments =  $rowPosts["comments"];
		$counter  = $rowPosts["counter"];
		$topic = $rowPosts["topic"];
		$informant = $rowPosts["informant"];
		$notes = $rowPosts["notes"];
		$ihome = $rowPosts["ihome"];
		$has_media = $rowPosts["has_media"];
		$alanguage = $rowPosts["alanguage"];
		$acomm = $rowPosts["acomm"];
		$haspoll = $rowPosts["haspoll"];
		$pollID = $rowPosts["pollID"];
		$score = $rowPosts["score"];
		$ratings = $rowPosts["ratings"];
		
		
		$articolo = mysql_real_escape_string($articolo);
		$title = mysql_real_escape_string($title);
		
		
		$sqlAutore = "SELECT ID FROM wp_users where user_login='".$aid."'";
		$resultAutore = $conn2->query($sqlAutore);
		$autRow = $resultAutore->fetch_assoc();
		$idAutore = $autRow["ID"];
	
		
		//inserisco in wordpress il post letto da nuke
		$queryInsPost = "INSERT  INTO wp_posts (id, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, 
		                                        ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, 
												post_parent, guid, menu_order, post_type, post_mime_type, comment_count  ) 
										VALUES  ('".$sid."', '".$idAutore."', '".$time."', '".$time."', '".$articolo."', '".$title."', '', 'publish', 'closed',
												'open', '', '".$title."', '', '', '".$time."', '".$time."', '',
												'', '".$sitoWordpes."?p=".$sid."', '0', 'post', '', '".$comments."' )";		
				   
		if($conn2->query($queryInsPost))
		{
			//Associo le categorie al post
			$queryInsCatPost ="INSERT  INTO wp_term_relationships (object_id, term_taxonomy_id, term_order)
														VALUES    ('".$sid."', '".$topic."', 0 )";
														
			if($conn3->query($queryInsCatPost))
			{
				echo "<br>INSERITO ------> sid=:'".$sid."' &nbsp; Topic=:'".$topic."' &nbsp; aid=:'".$aid."' &nbsp; Title=:'".$title."' &nbsp; ";
				
			}
			
			//In POst Meta inserisco i dati relativi alle letture dell'articolo per il plugin baw-post-views-count
			$queryInsReads ="INSERT  INTO wp_postmeta (post_id, meta_key, meta_value)
											VALUES    ('".$sid."', '_count-views_all', '".$counter."' )";
														
			if($conn3->query($queryInsReads))
			{
				//echo "<br>... ";
				
			}
			$queryInsReads ="INSERT  INTO wp_postmeta (post_id, meta_key, meta_value)
											VALUES    ('".$sid."', '_count-views_day-20150320', '".$counter."' )";
														
			if($conn3->query($queryInsReads))
			{
				//echo "<br>... ";
				
			}
			$queryInsReads ="INSERT  INTO wp_postmeta (post_id, meta_key, meta_value)
											VALUES    ('".$sid."', '_count-views_week-201512', '".$counter."' )";
														
			if($conn3->query($queryInsReads))
			{
				//echo "<br>... ";
				
			}
			$queryInsReads ="INSERT  INTO wp_postmeta (post_id, meta_key, meta_value)
											VALUES    ('".$sid."', '_count-views_month-201503', '".$counter."' )";
														
			if($conn3->query($queryInsReads))
			{
				//echo "<br>... ";
				
			}
			$queryInsReads ="INSERT  INTO wp_postmeta (post_id, meta_key, meta_value)
											VALUES    ('".$sid."', '_count-views_year-2015', '".$counter."' )";
														
			if($conn3->query($queryInsReads))
			{
				//echo "<br>... ";
				
			}
			
		
		}	
		else
		{
			echo "<br><b>Errore insert articolo n. ".$sid.": </b>" . $conn2->error . "<br><br>";
			
		}	
		
	}
		

}


//Rimetto l'auto increment dalla tabella wp_posts 
$query2 = "ALTER TABLE wp_posts MODIFY COLUMN ID bigint(20) unsigned  not null AUTO_INCREMENT";
if($conn2->query($query2)) {
    echo "<br>Autoextend ricreata<br>";
}



//Rimetto l'auto increment dalla tabella wp_posts 
$query2 = "ALTER TABLE wp_comments MODIFY COLUMN comment_ID bigint(20) unsigned  not null";
if($conn2->query($query2)) {
    echo "<br>Autoextend rimossa<br>";
}

// Seleziono i commenti da nuke_commentss 
$sql = "SELECT  `tid`, `pid`, `sid`, `date`, `name`, `email`, `url`, `host_name`, `subject`, `comment`, `score`, `reason`, `visib`  FROM `nuke_comments`  order by `tid` ";
$resultComm = $connNuke->query($sql);
if ($resultComm->num_rows > 0) 
{
	//scorro i commenti in di nuke
    while($rowComment = $resultComm->fetch_assoc()) 
	{
		//id commento
		$tid   = $rowComment["tid"];
		//id commento padre
		$pid   = $rowComment["pid"];
		//id articolo
		$sid   = $rowComment["sid"];
		$date   = $rowComment["date"];
		$name   = $rowComment["name"];
		$email   = $rowComment["email"];
		
		//ip utente
		$host_name   = $rowComment["host_name"];
		
		//non usato in wordpress
		$subject   = $rowComment["subject"];
		$subject = mysql_real_escape_string($subject);
		
		//commento
		$comment   = $rowComment["comment"];
		$comment = mysql_real_escape_string($comment);
		
		$score   = $rowComment["score"];
		$reason   = $rowComment["reason"];
		$visib   = $rowComment["visib"];
		
		
		//select id user da con nome
		$res = $conn2->query( "SELECT ID from wp_users where user_login = '".$name."'" );
		$newRow = $res->fetch_assoc();
		$idUser = $newRow["ID"];
		
		$sqlInsertComments = "insert into  `wp_comments` (`comment_ID`, `comment_post_ID`, `comment_author`, `comment_author_email`, `comment_author_url`, `comment_author_IP`, `comment_date`, `comment_date_gmt`, `comment_content`, `comment_karma`, `comment_approved`, `comment_agent`, `comment_type`, `comment_parent`, `user_id`)
		                                         VALUES  ('".$tid."' , '".$sid."', '".$name."', '".$email."', '', '".$host_name."', '".$date."', '".$date."', '".$comment."',  '0', '1',  '', '', '".$pid."', '".$idUser."')";
									  
		if($conn3->query($sqlInsertComments))
		{
			echo "<br>INSERITO ------> tid=:'".$tid."' &nbsp; Comment=:'".$comment."' &nbsp; ";
			//echo mysql_error();
			
		}
		else
		{
			echo "<br><b>Errore insert commento n. ".$tid.": </b>" . $conn3->error . "<br><br>";
			
		}
		
	}
}

//Rimetto l'auto increment dalla tabella wp_posts 
$query2 = "ALTER TABLE wp_comments MODIFY COLUMN comment_ID bigint(20) unsigned  not null auto_increment";
if($conn2->query($query2)) {
    echo "<br>Autoextend rimossa<br>";
}


	
$connNuke->close();
$conn2->close();
$conn3->close();
?>
 </body>
</html>



 

 

 

© Riproduzione riservata

Share This:

3 comments for “NUKE2WordPress. Ecco il sorgente per migrare i dati da PhpNuke a WordPress

  1. Pietro Ricciardi
    25 Marzo 2015 at 15:18

    Uno dei problemi che si verifica con una simile migrazione é che i vecchi url origineranno un errore 404 dalle ricerche fatte dai motori di ricerca. Questo comporta un degrado del page rank.
    Abbiamo realizzato un programmino che risolve questo problema, ancora in fase di test. Lo rilasceremo sotto Gpl appena possibile.

  2. giuseppe napoletano
    26 Marzo 2015 at 14:38

    Bravo Pietro, questo script sembra funzionare! Peccato che mi ha bruciato 1285 articoli e relativi commenti.

    • Pietro Ricciardi
      26 Marzo 2015 at 14:43

      Ciao Peppe,
      Tu usi una versione di Phpnuke successiva alla 5.5 su cui l’ho testato io, quindi ci sono sicuramente delle differenze, inoltre devi verificare in locale quali articoli non ha migrato.
      Probabilmente il problema potrebbe essere relativo all’uso dei caratteri apice, doppio apice.
      Nel caso in cui ci sono campi (ad esempio descrizione di topics o descrizioni brevi dei topics) che contengono questi caratteri, bisogna passare il loro contenuto ad una funzione che ci inserisca il carattere \ prima, altrimenti le stringhe risultano tagliate e il record può non essere inserito nel database…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *