Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Sistemas de gestión de contenidos (http://www.forosdelweb.com/f54/)
-   -   Consultas para insertar nuevo usuario en foro phpBB (http://www.forosdelweb.com/f54/consultas-para-insertar-nuevo-usuario-foro-phpbb-468492/)

Bravenap 27/02/2007 07:49

Consultas para insertar nuevo usuario en foro phpBB
 
Muy buenas. Quiero crear un usuario nuevo desde una aplicación ASP.Net en un foro phpBB. No tengo acceso al código fuente del foro (está en Arsys) por lo que no sé exactamente las consultas necesarias para crear un nuevo usuario.

Empezando por INSERT INTO foro_users ....

Gracias y un saludo.

daniel00 02/03/2007 15:58

Re: Consultas para insertar nuevo usuario en foro phpBB
 
Que tal Bravenap.

Fijate que tengo el mismo problema y lo que he encontrado hasta ahora es que la estructura de la tabla usuarios es la siguiente( para mySQL ) :
Código:

# --------------------------------------------------------
#
# Table structure for table 'phpbb_users'
#
CREATE TABLE phpbb_users (
  user_id mediumint(8) NOT NULL,
  user_active tinyint(1) DEFAULT '1',
  username varchar(25) NOT NULL,
  user_password varchar(32) NOT NULL,
  user_session_time int(11) DEFAULT '0' NOT NULL,
  user_session_page smallint(5) DEFAULT '0' NOT NULL,
  user_lastvisit int(11) DEFAULT '0' NOT NULL,
  user_regdate int(11) DEFAULT '0' NOT NULL,
  user_level tinyint(4) DEFAULT '0',
  user_posts mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
  user_timezone decimal(5,2) DEFAULT '0' NOT NULL,
  user_style tinyint(4),
  user_lang varchar(255),
  user_dateformat varchar(14) DEFAULT 'd M Y H:i' NOT NULL,
  user_new_privmsg smallint(5) UNSIGNED DEFAULT '0' NOT NULL,
  user_unread_privmsg smallint(5) UNSIGNED DEFAULT '0' NOT NULL,
  user_last_privmsg int(11) DEFAULT '0' NOT NULL,
  user_login_tries smallint(5) UNSIGNED DEFAULT '0' NOT NULL,
  user_last_login_try int(11) DEFAULT '0' NOT NULL,
  user_emailtime int(11),
  user_viewemail tinyint(1),
  user_attachsig tinyint(1),
  user_allowhtml tinyint(1) DEFAULT '1',
  user_allowbbcode tinyint(1) DEFAULT '1',
  user_allowsmile tinyint(1) DEFAULT '1',
  user_allowavatar tinyint(1) DEFAULT '1' NOT NULL,
  user_allow_pm tinyint(1) DEFAULT '1' NOT NULL,
  user_allow_viewonline tinyint(1) DEFAULT '1' NOT NULL,
  user_notify tinyint(1) DEFAULT '1' NOT NULL,
  user_notify_pm tinyint(1) DEFAULT '0' NOT NULL,
  user_popup_pm tinyint(1) DEFAULT '0' NOT NULL,
  user_rank int(11) DEFAULT '0',
  user_avatar varchar(100),
  user_avatar_type tinyint(4) DEFAULT '0' NOT NULL,
  user_email varchar(255),
  user_icq varchar(15),
  user_website varchar(100),
  user_from varchar(100),
  user_sig text,
  user_sig_bbcode_uid char(10),
  user_aim varchar(255),
  user_yim varchar(255),
  user_msnm varchar(255),
  user_occ varchar(100),
  user_interests varchar(255),
  user_actkey varchar(32),
  user_newpasswd varchar(32),
  PRIMARY KEY (user_id),
  KEY user_session_time (user_session_time)
);

Lo que no sé es que, si será suficiente con insertar el registro en dicha tabla o hacer más cosas.

Ahora bien, también esta el detalle del campo password, ya que revise el código fuente ( lo puede bajar de www.phpbb.com ) y según yo ( es que no sé php) lo encriptan usando MD5.

Así es que hay que buscar como encriptar usando MD5 en .Net.

O ya encontraste la solución??

Saludos y suerte!!

Bravenap 05/03/2007 04:41

Re: Consultas para insertar nuevo usuario en foro phpBB
 
Gracias por responder. Esto y ultimando el procedimiento completo, ya que hay que añadir más registros en otras tablas. En cuanto esté lo pongo.

Un saludo.

Bravenap 05/03/2007 08:23

Re: Consultas para insertar nuevo usuario en foro phpBB
 
Bueno allá va. Se trata de un procedimiento almacenado que registra a nuevos alumnos en una base de datos y al mismo tiempo, ya que la base de datos es la misma, crea usuarios para el foro y les asigna a un grupo para que puedan participar en el subforo del curso al que están inscritos. Marco en rojo sólo las consultas que corresponden a las tablas del foro phpBB.

Código:

ALTER PROCEDURE PA_FC_Inscripcion
(
        @nuevoAlumno bit = 1,
        @idAlumno int = NULL,
        @apellidos nvarchar(255) = '',
        @nombre nvarchar(255) = '',
        @direccion nvarchar(255) = '',
        @localidad nvarchar(255) = '',
        @cp numeric = NULL,
        @telefono char(50) = NULL,
        @correo nvarchar(255) = NULL,
        @profesion nvarchar(255) = NULL,
        @curso int = NULL,
        @pago char(1) = NULL,
        @importe char(50) = NULL,
        @empresa nvarchar(255) = NULL,
        @dirEmpresa nvarchar(255) = NULL,
        @CIFEmpresa char(50) = NULL,
        @locEmpresa nvarchar(255) = NULL,
        @CPEmpresa numeric = NULL,
        @factura bit = 0,
        @usuarioForo varchar(25) = '',
        @pass varchar(32) = ''
)
AS
BEGIN
        DECLARE @Error int, @idForo int, @idGrupo int
        BEGIN TRAN

        IF @nuevoAlumno = 1
        BEGIN
                -- Se crea el usuario para el foro
                SELECT @idForo = (SELECT MAX(user_id) FROM foroCursos_users) + 1
                INSERT INTO foroCursos_users
                        (user_id, username, user_regdate, user_password, user_email, user_viewemail, user_attachsig, user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline, user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat, user_lang, user_style, user_level, user_allow_pm, user_active, user_actkey)
                        VALUES
                        (@idForo, @usuarioForo, DATEDIFF(ss, '01-01-1970', GetDate()) , @pass, @correo, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 'D M d, Y g:i a', 'spanish', 1, 0, 1, 0,'')

                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError

                -- Se crea el grupo para uso personal
                INSERT INTO foroCursos_groups (group_name, group_description, group_single_user, group_moderator) VALUES ('', 'Personal User', 1, 0)
                SELECT @idGrupo = (SELECT @@identity)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
       
                -- Se crea la relación usuario-grupo para el grupo de uso personal
                INSERT INTO foroCursos_user_group (user_id, group_id, user_pending) VALUES (@idForo, @idGrupo, 0)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
               
                -- Se inserta el nuevo alumno
                INSERT INTO fc_alumnos
                        (Apellidos,Nombre,Domicilio,Localidad,CP,Telefono,Correo,Profesion,IDForo)
                        VALUES
                        (@apellidos,@nombre,@direccion,@localidad,@cp,@telefono,@correo,@profesion,@idForo)
                SELECT @idAlumno = (SELECT @@identity)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
        END
        ELSE
        BEGIN
                -- Como ya está registrado, se busca su ID en el foro
                SELECT @idForo = (SELECT IDForo FROM fc_alumnos WHERE ID = @idAlumno)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
        END

        INSERT INTO fc_relAlumnoCurso
                (Alumno,Curso,Estado,FechaInscripcion,FormaPago,Importe,Empresa,DirEmpresa,CIFEmpresa,LocEmpresa,CPEmpresa,Factura)
                VALUES
                (@idAlumno,@curso,1,GETDATE(),@pago,@importe,@empresa,@dirEmpresa,@CIFEmpresa,@locEmpresa,@CPEmpresa,@factura)
        SET @Error = @@Error
        IF (@Error<>0) GOTO TratarError

        -- Añadir al usuario al grupo del foro que corresponda al curso
        SELECT @idGrupo = (SELECT group_id FROM foroCursos_groups WHERE group_name = 'Grupo'+CONVERT(char(4),@curso))
        INSERT INTO foroCursos_user_group (user_id, group_id, user_pending) VALUES (@idForo, @idGrupo, 0)

        SET @Error = @@Error
        IF (@Error<>0) GOTO TratarError

        SELECT @idAlumno

        COMMIT TRAN

TratarError:
        IF @Error<>0
        BEGIN
                ROLLBACK TRAN
                SELECT @Error
        END
END

Y el procedimiento para borrar al alumno y todas sus relaciones:
Código:

ALTER PROCEDURE PA_FC_BorrarAlumno
(
        @idAlumno int
)
AS
BEGIN
        DECLARE @Error int, @idForo int, @usuarioForo varchar(25)
        BEGIN TRAN

                SELECT @idForo = (SELECT IDForo FROM fc_alumnos WHERE ID = @idAlumno)

                -- Se borra el alumno
                DELETE fc_alumnos WHERE ID = @idAlumno
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                DELETE fc_relAlumnoCurso WHERE Alumno = @idAlumno
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError

                -- Se borra el usuario del foro y sus relaciones
                SELECT @usuarioForo = (SELECT username FROM foroCursos_users WHERE user_id = @idForo)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                DELETE foroCursos_users WHERE user_id = @idForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                DELETE foroCursos_groups WHERE group_id IN (SELECT group_id FROM foroCursos_user_group WHERE user_id = @idForo)
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                DELETE foroCursos_user_group WHERE user_id = @idForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                UPDATE foroCursos_posts SET poster_id = -1, post_username = @usuarioForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                UPDATE foroCursos_vote_voters SET vote_user_id = -1 WHERE vote_user_id = @idForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                UPDATE foroCursos_topics SET topic_poster = -1 WHERE topic_poster = @idForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError
                DELETE foroIm_topics_watch WHERE user_id = @idForo
                SET @Error = @@Error
                IF (@Error<>0) GOTO TratarError


        COMMIT TRAN

TratarError:
        IF @Error<>0
        BEGIN
                ROLLBACK TRAN
                SELECT @Error
        END

END

Espero que esté bien. No lo he comprobado a fondo.

Un saludo.


La zona horaria es GMT -6. Ahora son las 06:44.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.