Sacar los foros PHPBB de un PHP-Nuke

Después de varios ataques al PHP-Nuke de la web de El Rincón del C me decidí a usar un gestor de contenidos creado a medida y escrito desde cero (manías que tiene uno). Uno de los problemas a los que me enfrenté fue recuperar la información los foros, que usaban una versión de PHPBB integrada en PHP-Nuke. Quería seguir usando PHPBB así que no me ha quedado más remedio que separar el PHPBB del PHP-Nuke. He seguido estos pasos (sacados más o menos de aquí):

  1. Instalar desde cero unos foros PHPBB con la última versión 2.x (la 3.0 está en fase beta en el momento de escribir este post).
  2. Borrar las tablas: Auth-access, Topics, Categories, Forums, Users, Posts, Posts_text.
  3. Desde la base de datos “vieja” exportar estas tablas y volcarlas a la nueva instalación (ojo con los prefijos de las tablas). Exportar la estructura y los datos.

Hay gente que dice tener problemas con las contraseñas, pero parace que en este caso no ha habido ninguno.

Sí que he tenido algunos problemas por la estructura de la base de datos. Por ejemplo en la tabla phpbb_users faltaban dos campos: ‘user_login_tries’, ‘user_last_login_try’. Esto lo he solucionado añadíendolos a mano:

alter table phpbb_users add  `user_login_tries` smallint(5) unsigned NOT NULL default '0'
alter table phpbb_users add   `user_last_login_try` int(11) NOT NULL default '0'

También he encontrado un problema con las fechas de registro que tenían este formato:

Nov 10, 2000

y estaba almacenado en un campo con tipo varchar en lugar de estar en formato timestamp (y almacenado en un campo tipo int).

Para solucionar esto he creado un script llamado index2.php:

$sql = "select user_id, user_regdate from phpbb_users where 1";
$usuarios_query = $bd->Execute($sql);
while (!$usuarios_query->EOF)
{
	$fechaOriginal = $usuarios_query->fields['user_regdate'];
	$mesTexto = substr($fechaOriginal, 0, 3);
	$dia = substr($fechaOriginal, 4, 2);
	$agno = substr($fechaOriginal, 8, 4);
	switch($mesTexto)
	{
		case 'Jan': $mes = 1;break;
		case 'Feb': $mes = 2;break;
		case 'Mar': $mes = 3;break;
		case 'Apr': $mes = 4;break;
		case 'May': $mes = 5;break;
		case 'Jun': $mes = 6;break;
		case 'Jul': $mes = 7;break;
		case 'Aug': $mes = 8;break;
		case 'Sep': $mes = 9;break;
		case 'Oct': $mes = 10;break;
		case 'Nov': $mes = 11;break;
		case 'Dec': $mes = 12;break;
	}		
	$fechaModificadaTimestamp = mktime(0, 0,0, $mes, $dia, $agno);
	$fechaModificada = date("d m Y", $fechaModificadaTimestamp);
	echo "
$fechaOriginal -> $dia $mes $agno -> $fechaModificada"; $actualizaSql = "update phpbb_users set user_regdate='" . $fechaModificadaTimestamp . "' where user_id='" . $usuarios_query->fields['user_id'] . "'"; $bd->Execute($actualizaSql); $usuarios_query->moveNext(); }

Ojo, que este script usa un API de fabricación propia, habría que hacerle alguna modificación para que funcionara sin necesidad de usar ningún API. ¿Alguien se anima?

Después de esto ya sólo queda cambiar el tipo del campo de varchar a int.