Integrar phpBB3 con tu sitio. (2da integración, 1ra parte)
Puedes ir al artículo principal sobre cómo integrar phpBB3 con tu sitio para ver las distintas formas de integración
Este es el segundo artículo o tutorial de la serie sobre cómo integrar phpBB3 con tu sitio.
phpBB3 es un excelente paquete de foros gratuito, escrito en PHP+MySQL. Debido a su gran utilidad y al hecho de que es de código abierto (free as in beer and speech), una de las cosas que muchos queremos hacer es integrarlo con algún otro sistema que tengamos, para poder ofrecer la excelente funcionalidad del foro, sin que esto complique la experiencia del usuario en el sitio.
En este artículo se trata la segunda integración descrita en el artículo: cómo integrar phpBB3 con tu sitio:
Al crear un usuario en el otro sistema, automáticamente se crea un usuario en phpBB3 y hacer login en uno de ellos automáticamente te loguea en el otro.
Esta es una integración un poco más compleja que la anterior y por lo tanto la divido en dos partes. En esta hablo sobre cómo hacer para que al registrar a un usuario en “el otro sistema” (el que no es phpBB3), automáticamente quede registrado en el foro. La segunda parte la dejo para otro artículo por ser un poco más compleja y depender de la configuración de los dos sitios (si están o no en el mismo dominio o subdominio).
La idea básica
phpBB3 está muy bien hecho, el código es muy modular y es fácil de navegar. Por esto, cuando estudiamos cómo hace phpBB3 la creación de un nuevo usuario nos encontramos con lo que buscamos en el archivo includes/ucp/ucp_register.php [code] (luego de sortear mucho código de validación).
Para crear un nuevo usuario nos bastaría con este código:
<?php /* GetUserIp: * * Taken from: http://forums.whirlpool.net.au/forum-replies-archive.cfm/976380.html * */ define('IN_PHPBB', true); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require($phpbb_root_path . 'common.' . $phpEx); require($phpbb_root_path . 'includes/functions_user.' . $phpEx); require($phpbb_root_path . 'includes/functions_module.' . $phpEx); function GetUserIP() { if (isset($_SERVER)) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR']; if (isset($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP']; return $_SERVER['REMOTE_ADDR']; } if (getenv('HTTP_X_FORWARDED_FOR')) return getenv('HTTP_X_FORWARDED_FOR'); if (getenv('HTTP_CLIENT_IP')) return getenv('HTTP_CLIENT_IP'); return getenv('REMOTE_ADDR'); } $user_name = 'paolo123'; $user_pass = 'shh123'; $user_email = 'usuario@servidor.de.correo'; $user_lang = 'es'; $user_ip = GetUserIP(); $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'REGISTERED' AND group_type = " . GROUP_SPECIAL; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (!$row) { trigger_error('NO_GROUP'); } $group_id = $row['group_id']; // Utilizamos el uso horario del foro $is_dst = $config['board_dst']; $timezone = $config['board_timezone']; // Reunimos toda la data del nuevo usuario $user_row = array( 'username' => $user_name, 'user_password' => phpbb_hash($user_pass), 'user_email' => $user_email, 'group_id' => (int) $group_id, 'user_timezone' => (float) $timezone, 'user_dst' => $is_dst, 'user_lang' => $user_lang, 'user_type' => USER_NORMAL, 'user_actkey' => '', 'user_ip' => $user_ip, 'user_regdate' => time(), 'user_inactive_reason' => 0, 'user_inactive_time' => 0, ); // Register user... $user_id = user_add($user_row, $cp_data); // This should not happen, because the required variables are listed above... if ($user_id === false) { trigger_error('NO_USER', E_USER_ERROR); } ?>
Este código crea un usuario con nombre ‘paolo123′ y clave ‘shh123′. Este será un usuario idéntico a cualquier otro usuario que se haya registrado siguiendo el proceso normal del foro.
Consideraciones finales
Importante indicar que este código está pensado para ejecutar en un archivo que estuviera en la carpeta raíz del foro, por lo que si no es este el caso, habría que modificar la declaración del principio que dice: $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; cambiando el ‘./’ por la ruta relativa o absoluta de la carpeta raíz del foro.
Importante: Crear el usuario de esta forma, salta todas las verificaciones que hay normalmente en el foro, por lo que es importante asegurarse de que todos los datos son válidos.
La forma de integrar este código con tu sistema la dejo a discreción del usuario, ya que variaría mucho dependiendo del sistema desde el que se invoque… lo único que hay que tener presente son los datos que necesita este código para ejecutar: $user_name, $user_pass, $user_email, $user_lang y $user_ip.
En el próximo artículo de esta “serie” trataré el tema de la segunda parte de esta integración: el manejo de sesiones… Cómo hacer que cuando un usuario se identifique en uno de los sistemas, quede identificado en el otro también.
Espero les sirva.
Emperador
Saludos Pragone,
Ya he probado la primera parte de la integración por el método 2, adaptándola a mi sistema de registro en mi website, he debido realizar unas pequeñas modificaciones en mi propio sistema como bien lo mencionas amigo y la operación a sido todo un éxito.
Mil y mil gracias por tan valioso aporte, y no sobra decir que ya estoy más que ansioso por la segunda parte sobre compartir la sesión de usuario en todo el sitio web y el phpBB3. ¿Tardará mucho? jajajaja
Gracias de nuevo, Pragone. Feliz día.
Jun 10th, 2008
Salvador
Saludos Pragone,
Gracias, es muy util tu código.
.
esperamos esa segunda parte
Muchas gracias.
Jun 20th, 2008
pragone
Hola,
La segunda parte pienso escribirla a finales de la semana que viene… es que ahora estoy de vacaciones y aparte de que a mi esposa no le gusta la idea de que ande programando en vacaciones tampoco tengo mi ambiente de desarrollo conmigo.
Saludos
Jun 21st, 2008
Emperador
Gracias Pragone, sigo muy atento esperando esta información para terminar de implementar en mi proyecto web.
Saludos.
Jul 5th, 2008
pragone
Perdonen la tardanza. Por un lado viajé y por otro he estado un poco enfermo. Espero publicar la segunda parte esta semana.
Jul 6th, 2008
Emperador
Gracias amigo, estaré atento a la información.
Espero tengas una pronta recuperación. Saludos.
Jul 11th, 2008
Emperador
Saludos,
Amigo, como va la publicación de la segunda parte de la integración??
Gracias..
Sigo atento.
Aug 23rd, 2008
pragone
Hola Emperador,
Disculpa la tardanza. La verdad es que un par de proyectos me han quitado el tiempo. No tengo un estimado ahora de cuando termine la última forma de integración que me falta para completar el artículo
Espero poder hacerlo el mes que viene.
De nuevo disculpa y saludos
Aug 24th, 2008
Marcos
Muy bueno el tutorial, pero ahora nos hace falta la segunda parte, ánimo para que la acabes y cuando esté lista ya podremos acabar nuestra integración
. Muchas gracias.
Sep 8th, 2008
Ivan
Genial el tutorial, llevo toda la mañana intentando encontrar como hacer un “login” desde fuera del foro con la base de datos del foro, pero el problema lo tengo en que usa su propio sistema de codificación, md5+algo… a ver si esta pronto la segunda parte y resuelve mi problema
Muchas gracias y animo
Oct 8th, 2008
Ivan
Vaya por dios, a los pocos minutos de escribir encuentro la solución, os dejo con el código, para utilizar la misma sesión del foro en páginas que esten fuera de él, espero que sirva.
————————————————–
session_begin();
$auth->acl($user->data);
?>
data['is_registered'])
{
?>has hecho loginno has hecho login
Oct 8th, 2008
Ivan
Se ha comido parte del código, bueno pues os dejo el link de donde lo he encontrado.
http://www.mctekk.com/mcforo/viewtopic.php?t=2847
Oct 8th, 2008
Ezequiel
Oops, me parece que no tendremos un segundo artículo
Nov 3rd, 2008
Emperador
Saludos,
Amigo Pragone, ¿tendremos la 2da. parte del articulo?
He intentado terminar la integración yo mismo, pero indiscutiblemente no se del tema, solo me queda esperar que a bien nos puedas aportar la parte final de este tipo de integración, que es la solución perfecta para mis necesidades.
De antemano muchas gracias y exitos en tus labores.
Dec 16th, 2008
desarrollo web
Excelente artículo.
Siempre es bueno implementar CMS de Foros gratuitos, ya que en muchos casos es más rentable que crear uno a medida con menos funcionalidades para nuestros proyectos.
Un saludo,
Alejandro Arco
Jan 10th, 2009
Crafter
a Diferencia de el compañero de arriba creo que lo mejor es hacer un CMS propio, sabiendo que todo a lo que eso conlleva es a aprender cada vez mas, Por lo menos yo creo que estoy siempre en constante aprendizaje, y creo que la mayoria lo estamos porque esa es la Vida del Programador, aprender y aprender… de verdad que me parece bien integrar un CMS “x” con PHPBB3 pero Integrar un CMS “Propio” a PHPBB3 es mucho mejor…
Claro para aquellos que no tienen tiempo de programar o que no programan por x o y es mejor un CMS cualquiera que de las prestaciones que necesitan…
No me despido sin antes agradecer al creador del tutorial PRAGONE por ahorrarnos un poco de Codigo, es muy apreciado eso para los que casi no tenemos tiempo… Bueno gracias por todo PRAGONE
Mar 29th, 2009