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.