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.
__________________ ¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares! |