Cómo integrar los Foros de Invision Power Board con PHP-Nuke

Estas instrucciones son posibles de realizar con Invision Power Board 1.3 y 1.3.1. Lo primero de todo, es recomendable que instaléis el Foro en el directorio /Forums o /foro. Y también que tengáis en cuenta que este manual va dirigido especialmente a los que uséis PHP Nuke Edición Truzone. Este Manual esta hecho con la 3.1.2 pero también funcionara con otras.

A los que uséis otras versiones también os valdrá, pero seguramente los números de las líneas varíen. Tenemos que realizar varios cambios tanto en los Foros Invision como en vuestro Nuke

CAMBIOS EN EL NUKE

Añadir miembro a invision al registrarse en el Nuke con mail de confirmación

Buscar en modules/Your_Account/index.php (linea 218 aprox):

$db->sql_query("INSERT INTO ".$user_prefix."_users (user_id, username, user_email, user_password, user_avatar, user_regdate, user_lang) VALUES (NULL, '$row[username]', '$row[user_email]', '$row[user_password]', 'gallery/blank.gif', '$row[user_regdate]', '$language')");

Añadir después:

// Añadir nuevo usuario a ipb
$membergroup = "3"; // Grupo de los miembros registrados - default = 3
$ipbprefix = "ibf"; // Prefijo que uses en los foros invision - default = ibf
$row2 = $db->sql_fetchrow($db->sql_query("SELECT id FROM ".$ipbprefix."_members ORDER BY id DESC LIMIT 1"));
$lastid = $row2[id] +1;
$jointime = time();
$db->sql_query("INSERT INTO ".$ipbprefix."_members (id, mgroup, name, password, email, joined) values ('$lastid', '$membergroup', '$row[username]', '$row[user_password]', '$row[user_email]', '$jointime')");
$db->sql_query("UPDATE ".$ipbprefix."_stats SET "."MEM_COUNT=MEM_COUNT+1,"."LAST_MEM_NAME='".$row['username']."',"."LAST_MEM_ID='".$lastid."'");
// End Hack

Deslogearse en el Nuke y en Invision

Es necesario cambiar /path/to/your/forums/ por la ruta correcta de tus foros, por ejemplo: /home/username/public_html/Forums/

Buscar en modules/Your_Account/index.php (linea 787 aprox):

$db->sql_query("DELETE FROM ".$prefix."_session WHERE uname='$r_username'");
$db->sql_query("DELETE FROM ".$prefix."_bbsessions WHERE session_user_id='$r_uid'");
$user = "";

Añadir después:

// deslogueo IPB

define ("IPB_PATH", "/path/to/your/forums/" ); // ejemplo: /home/username/public_html/Forums/

require IPB_PATH."conf_global.php";
require IPB_PATH."sources/functions.php";
require IPB_PATH."sources/Drivers/".$INFO['sql_driver'].".php";

$INFO['number_format'] = isset($INFO['number_format'])?$INFO['number_format']:'none';

$std = new FUNC;

class info {
var $vars = "";
}

$ibforums = new info;

$ibforums->vars['strip_space_chr'] = isset($INFO['strip_space_chr'])?$INFO['strip_space_chr']:0;

$input = $std->parse_incoming();

$logout_mode = 'null';

global $HTTP_SERVER_VARS;

$cookie = array();
$cookie['session_id'] = $std->my_getcookie('session_id');
$cookie['member_id'] = $std->my_getcookie('member_id');
$cookie['pass_hash'] = $std->my_getcookie('pass_hash');

if ($INFO['match_browser'] == 1)
$user_agent = substr($HTTP_SERVER_VARS['HTTP_USER_AGENT'],0,50);

if ( ! empty($cookie['session_id']) ) {
$session_id = $cookie['session_id'];
$logout_mode = 'cookie';
}
elseif (! empty($input['session_id']) ) {
$session_id = preg_replace("/([^a-zA-Z0-9])/", "", $input['session_id']);
if ( !empty($session_id) ) {
$logout_mode = 'session_id';
}
}
elseif (! empty($input['s']) ) {
$session_id = preg_replace("/([^a-zA-Z0-9])/", "", $input['s']);
if ( !empty($session_id) ) {
$logout_mode = 'session_id';
}
}

$DB = new db_driver;

$DB->obj['sql_database'] = $INFO['sql_database'];
$DB->obj['sql_user'] = $INFO['sql_user'];
$DB->obj['sql_pass'] = $INFO['sql_pass'];
$DB->obj['sql_host'] = $INFO['sql_host'];
$DB->obj['sql_tbl_prefix'] = $INFO['sql_tbl_prefix'];

$DB->connect();

$query = "SELECT member_id FROM ibf_sessions WHERE id='". $session_id ."'";
$query .= isset($user_agent)?" AND browser='".$user_agent."'":"";

$DB->query($query);

$query = "UPDATE ibf_sessions SET ".
"member_name='',".
"member_id='0',".
"login_type='0' ".
"WHERE id='". $session_id ."'";

$query .= isset($user_agent)?" AND browser='".$user_agent."'":"";

$DB->query($query);

$query = "UPDATE ibf_members SET last_visit='".time()."', last_activity='".time()."' WHERE id='".$member['member_id']."'";

$DB->query($query);

$std->my_setcookie( "member_id" , "0" );
$std->my_setcookie( "pass_hash" , "0" );
$std->my_setcookie( "anonlogin" , "-1" );

global $HTTP_COOKIE_VARS;

if (is_array($HTTP_COOKIE_VARS)) {
foreach( $HTTP_COOKIE_VARS as $cookie => $value ) {
if (preg_match( "/^(".$INFO['cookie_id']."ibforum.*$)/i", $cookie, $match))
$std->my_setcookie( str_replace( $INFO['cookie_id'], "", $match[0] ) , '-', -1 );
}
}

// End deslogeo ipb

Logearse en el Nuke y en Invision

Es necesario cambiar /path/to/your/forums/ por la ruta correcta de tus Foros.

Buscar en modules/Your_Account/index.php (linea 1009 aprox):

$db->sql_query("DELETE FROM ".$prefix."_session WHERE uname='$uname' AND guest='1'");

Añadir después:

// Logearse en IPB

define ("IPB_PATH", "/home/paginade/public_html/Forums/" ); // eg: /home/username/public_html/forums/

require IPB_PATH."conf_global.php";
require IPB_PATH."sources/functions.php";
require IPB_PATH."sources/Drivers/".$INFO['sql_driver'].".php";

$INFO['number_format'] = isset($INFO['number_format'])?$INFO['number_format']:'none';

$std = new FUNC;

class info {
var $vars = "";
}

$ibforums = new info;

$ibforums->vars['strip_space_chr'] = isset($INFO['strip_space_chr'])?$INFO['strip_space_chr']:0;

$DB = new db_driver;

$DB->obj['sql_database'] = $INFO['sql_database'];
$DB->obj['sql_user'] = $INFO['sql_user'];
$DB->obj['sql_pass'] = $INFO['sql_pass'];
$DB->obj['sql_host'] = $INFO['sql_host'];
$DB->obj['sql_tbl_prefix'] = $INFO['sql_tbl_prefix'];

$DB->connect();

$username = strtolower($username);
$password = md5( $user_password );

$DB->query("SELECT m.id, g.g_id, g.g_access_offline, m.name, m.mgroup, m.password FROM ibf_members m LEFT JOIN ibf_groups g ON (g.g_id=m.mgroup) WHERE LOWER(m.name)='$username'");

if ($DB->get_num_rows())
{
$input = $std->parse_incoming();
$member = $DB->fetch_row();

$session_id = md5( uniqid(microtime()) );

$DB->query("DELETE FROM ibf_sessions WHERE ip_address='".$input['IP_ADDRESS']."'");

$db_string = $DB->compile_db_insert_string( array (
'id' => $session_id,
'member_name' => $member['name'],
'member_id' => $member['id'],
'running_time' => time(),
'member_group' => $member['mgroup'],
'ip_address' => substr($input['IP_ADDRESS'], 0, 50),
'browser' => substr($_SERVER['HTTP_USER_AGENT'], 0, 50),
'login_type' => 0
) );
$db_query = "INSERT INTO ibf_sessions (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")";

$DB->query( $db_query );

$std->my_setcookie('session_id', $session_id, 1);
$std->my_setcookie("member_id" , $member['id'], 1);
$std->my_setcookie("pass_hash" , $password, 1);
$std->my_setcookie("anonlogin", 0 );
}

// end logeo ipb

Borrar usuario de Invision

Buscar en admin/modules/users.php (linea 592 aprox):

case "delUserConf":
sql_query("delete from ".$user_prefix."_users where username='$del_uid'", $dbi);

Añadir después:

// Eliminar usuario de ipb
$ipbprefix = "ibf"; // Prefix of your IPB tables - default = ibf
sql_query("delete from ".$ipbprefix."_members where name='$del_uid'", $dbi);
// End

Añadir usuario a Invision (registrar manualmente)

Buscar en admin/modules/users.php (linea 621 aprox)

$sql .= "values (NULL,'$add_name','$add_uname','$add_email','$add_femail','$add_url','$user_regdate','$add_user_icq','$add_user_aim','$add_user_yim','$add_user_msnm','$add_user_from','$add_user_occ','$add_user_intrest','$add_user_viewemail','$add_avatar','$add_user_sig','$add_pass','$add_newsletter','1','0')";
$result = sql_query($sql, $dbi);
if (!$result) {
return;
}

Añadir después:

// Registrar usuario en IPB
//Edit to suit
$membergroup = "3"; // Miembro del usuario registrado - default = 3
$ipbprefix = "ibf"; // Prefijo que uses en tu foro - default = ibf

$row2 = $db->sql_fetchrow($db->sql_query("SELECT id FROM ".$ipbprefix."_members ORDER BY id
DESC LIMIT 1"));
$lastid = $row2[id] +1;
$jointime = time();
$db->sql_query("INSERT INTO ".$ipbprefix."_members (id, mgroup, name, password, email,
joined) values ('$lastid', '$membergroup', '$add_uname', '$add_pass', '$add_email',
'$jointime')");
$db->sql_query("UPDATE ".$ipbprefix."_stats SET
"."MEM_COUNT=MEM_COUNT+1,"."LAST_MEM_NAME='".$add_uname."',"."LAST_MEM_ID='".$lastid."'");
// End Hack

Recuperar password perdido

Buscar en modules/Your_Account/index.php (linea 926 aprox):

$query = "UPDATE ".$user_prefix."_users SET user_password='$cryptpass' WHERE username='$username'";
if (!$db->sql_query($query)) {
echo ""._UPDATEFAILED."";
}

Añadir despues:

// Actualizar password en IPB
$ipbprefix = "ibf"; // Prefijo que uses en tu foro - default = ibf
$db->sql_query("UPDATE ".$ipbprefix."_members SET password='$cryptpass' WHERE name='$username'");
//End

CAMBIOS EN INVISION

Registrar nuevos miembros en el Nuke

Buscar en foro/sources/Register.php (linea 995 aprox) o en la ruta que hayais puesto:

$member['password'] = md5( $member['password'] );
$db_string = $std->compile_db_string( $member );
$DB->query("INSERT INTO ibf_members (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
$DB->query("INSERT INTO ibf_member_extra (id) VALUES ($member_id)");
unset($db_string);

Añadir despues:

// Registrar miembros en nuke
$nukeuname = $member['name'];
$phpnukepass = $member['password'];
$nukeemail = $member['email'];
$DB->query("INSERT into nuke_users (username, user_email, user_password) values ('$nukeuname', '$nukeemail', '$phpnukepass')");
// End

Eliminar miembros del Nuke al eliminarlos de Invision

Buscar en foro/sources/Admin/ad_member.php (linea 1888 aprox):

$DB->query("UPDATE ibf_stats SET ".
"MEM_COUNT=MEM_COUNT-1, ".
"LAST_MEM_NAME='" . $memb['name'] . "', ".
"LAST_MEM_ID='" . $memb['id'] . "'");

Añadir después:

// Eliminar miembros del nuke.
$DB->query("DELETE from nuke_users WHERE username='{$mem['name']}'");
// End

Recuperar password en Nuke

Buscar en foro/sources/Usercp.php (linea 574 aprox):

$DB->query("UPDATE ibf_members SET password='$md5_pass' WHERE id='".$this->member['id']."'");

Añadir después:

$DB->query("SELECT * from ibf_members WHERE id='".$this->member['id']."'");
$INVBdata = $DB->fetch_row();
$INVBmember = $INVBdata['name'];
$DB->query("UPDATE nuke_users SET user_password='$md5_pass' WHERE username='$INVBmember'");

Añadir Usuario al Nuke como un Pre-registrado del Invision

Buscar en foros/sources/Admin/ad_member.php (linea 2108 aprox):

$DB->query("INSERT INTO ibf_members (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");

Añadir después:

// Añadir miembro a nuke
$nukeuname = trim($IN['name']);
$phpnukepass = md5(trim($IN['password']));
$nukeemail = trim(strtolower($IN['email']));
$DB->query("INSERT into nuke_users (username, user_email, user_password) values ('$nukeuname', '$nukeemail', '$phpnukepass')");
// End

Recuperar password perdido en Nuke

Buscar en foros/sources/register.php (linea 1326 aprox):

$DB->query("UPDATE ibf_members SET password='$new_pass' WHERE id=".intval($member['id']));

Añadir después

// Actualizar nuke password
$DB->query("SELECT * from ibf_members WHERE id=".intval($member['id']));
$INVBdata = $DB->fetch_row();
$INVBmember = $INVBdata['name'];
$DB->query("UPDATE nuke_users SET user_password='$new_pass' WHERE username='$INVBmember'");
// End

CAMBIOS DE FUNCIONAMIENTO

Cambios en Nuke

Abrir modules/Forums/index.php

Borrar todo el contenido

Añadir entonces:

header ("location: /foro/index.php");

?>

Abrir modules/Private_Messages/index.php

Borrar todo el contenido

Añadir entonces:

header ("location: /foro/index.php?act=Msg&CODE=01");

?>

Abrir modules/Members_list/index.php

Borrar todo el contenido

Añadir entonces:

header ("location: /foro/index.php?act=Members");

?>

Obviamente si tienes los foros en una ruta que no sea /foro, cámbialo en el código por la ruta correspondiente.

Después solo tienes que ejecutar el archivo Nuke2ipb que tienes para pasar los miembros del Nuke a Invision, o IPB2Nuke si quieres pasar los de Invision al Nuke. Si los quieres descargar están en la Zona de Descarga y aquí pinchando en sus nombres: Nuke2ipb y Ipb2nuke.

Quiero agradecer a Maverhack (www.rpgmakerxp.com) su inestimable ayuda, paciencia e indicaciones. Todas estas indicaciones junto con mis experiencias personales son las que han hecho posible este manual. Sin su ayuda www.paginadeinicio.net no habría podido tener integrados estos Foros en el pasado.

Scroll al inicio