Registro de phpBB en páginas externas al foro [Básico]

Guías, manuales, tutoriales
Avatar de Usuario
Alorse
Menos de 100 mensajes
Menos de 100 mensajes
Mensajes: 32
Registrado: Mar Abr 26, 2011 12:24 am
Ubicación: Colombia
Contactar:

Registro de phpBB en páginas externas al foro [Básico]

Mensaje sin leer por Alorse » Mar Ago 16, 2011 7:46 pm

Patrocinador

Registro de phpBB en páginas externas al foro [Básico]

Con este Script lo que pretendo es que se puedan registrar usuarios desde páginas externas al foro, ya sea para cuando se tiene una página como portal o para integrarlo a otro sistema de información que antecede al foro, en fin ya tu seras quien decida como usarlo y para que... voy al grano.

El Script de compone de 2 partes, el proceso (archivo .php) y la vista (archivo .html), de igual manera se pueden usar ambos en un mismo archivo, todo al gusto del consumidor.

La parte del php, la llamare reg_phpbb.php, y el código es el siguiente:

Código: Seleccionar todo

<?php
/*
 * Script para registrar usuarios en phpBB3 desde una página externa.
 * Implementado por Alorse para phpBB-es.COM
 */
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './foro'; // Cambiar ./foro por la ruta de tu foro
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx); // Archivo necesario para el registro
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

// Si el usuario ya se encuentra registrado e idenficado le mustra un aviso en vez del formulario de registro
if ($user->data['is_registered'] || isset($_REQUEST['not_agreed'])) {
    exit($user->data['username'] . ' ya te encuentras registrado.');
}

// Si envia el formulario empieza con el proceso.
$register = request_var('register', '');
if ($register) {

    //Buscamos cual es el grupo por defecto
    $coppa = (isset($_REQUEST['coppa'])) ? ((!empty($_REQUEST['coppa'])) ? 1 : 0) : false;
    $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
    $sql = 'SELECT group_id
        FROM ' . GROUPS_TABLE . "
        WHERE group_name = '" . $db->sql_escape($group_name) . "'
            AND group_type = " . GROUP_SPECIAL;
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $group_id = $row['group_id'];

    // Tomamos los valores del formulario.
    $username = request_var('username', '');
    $email = request_var('email', '');
    $password = phpbb_hash(request_var('password', '', true));
    $password_confirm = phpbb_hash(request_var('password_confirm', '', true));

    // Pasamos todos lo datos de registro a un vector.
    $user_row = array(
        'username' => $username,
        'user_email' => $email,
        'user_password' => $password,
        'group_id' => $group_id,
        'user_type' => '0',
        'user_new' => 1, // Entrara al grupo de nuevos usuarios registrados.
    );

    $query = 'SELECT username, user_email
        FROM ' . USERS_TABLE . '
        WHERE username = "' . $username . '"
            OR user_email = "' . $email . '"';
    $res = $db->sql_query($query);

    // Verificamos que el usuario no exista y que las contraseñas sean iguales.
    if ($db->sql_fetchrow($res) || (request_var('password', '', true) != request_var('password_confirm', '', true))) {
        echo 'El nombre de usuario o email ya se encuentran registrados o las contraseñas no concuerdan.<br />';
    } else {
        // La funcion user_add() del /includes/functions_user.php se encarga del resto.
        user_add($user_row);
        echo 'Tu cuenta ha sido creada. Ahora puedes identificarte con tu nombre de usuario y su contraseña.<br />';
    }
}
?>
Recuerden no dejar ningún espacio antes de <?php ya que esto puede ser la causa de un error.

La primera parte del archivo es la estructura básica de una página de phpBB, lo único que deben cambiar es, es la ruta de phpBB PHPBB_ROOT_PATH : './foro' por la de su foro.

El código esta documentado así que puede ver para que sirve cada cada método y variables, hay una validación que indica si el usuario esta registrado e identificado y no le deja ver el formulario de registro, si quieren cambiar esta opción deberán comentar la linea:

Código: Seleccionar todo

exit($user->data['username'] . ' ya te encuentras registrado.'); 
Con eso ya los usuarios identificados podrán ver el formulario de registro.

También hay otra validación que verifica si el Nombre de usuario o la dirección de email están registradas, además si las contraseñas introducidas con iguales.

Al final uso la función user_add( ) que es propia de phpBB, para no complicarme haciendo nuevas consultas para agregar el usuario a la base de datos y le llevo un vector con todos los datos del formulario.

La parte del .html, como dije anteriormente puede ir seguida del código .php o ponerla en un nuevo archivo o en la página principal de nuestra web; el código es el siguiente:

Código: Seleccionar todo

<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>Registro externo phpBB</title>
</head>
<body>
    <form method="post" action="reg_phpbb.php" >
        <fieldset style="width: 300px">
            <dl>
                <dt><label>Nombre de Usuario:</label></dt>
                <dd><input type="text" name="username" size="25" /></dd>
            </dl>
            <dl>
                <dt><label>Dirección de email:</label></dt>
                <dd><input type="text" name="email" size="25" maxlength="100" /></dd>
            </dl>
            <dl>
                <dt><label>Contraseña:</label></dt>
                <dd><input type="password" name="password" size="25" /></dd>
            </dl>
            <dl>
                <dt><label>Confirmar contraseña:</label></dt>
                <dd><input type="password" name="password_confirm" size="25" /></dd>
            </dl>
        </fieldset>

        <fieldset style="width: 300px;text-align: center">
            <input type="reset" value="Limpiar" name="reset" />&nbsp;
            <input type="submit" tabindex="9" name="register" value="Registrarse" />
        </fieldset>
    </form>
</body>
Si la van a usar en una página HTML ya existente deberán eliminar las primeras lineas que contiene la cabecera, estas:

Código: Seleccionar todo

<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>Registro externo phpBB</title>
</head>
Si llaman el archivo .php de manera diferente a reg_phpbb.php, tendrán que editar el "action" del formulario, para que apunte a su archivo de la siguiente manera: cambiar action="reg_phpbb.php" por action="nombre_del_archivo.php".

Algo mas, este Script funciona UNICAMENTE, si se tiene la "Configuración de registro de usuario" sin ningún tipo de activación, ya que de lo contrario habría que crear un user_actkey y este Script no lo hace.

Creo que no es mas, si hay alguna duda comentarla donde sea oportuno.
Espero le sirva.

Fuente: Registro de phpBB en páginas externas al foro [Básico]

Cerrado