Migrar usuarios de Joomla a Drupal

Deja un comentario


En mi proyecto dentro de los Laboratorios de Computo-Docencia de CBI (ixil.izt.uam.mx) tengo como trabajo la migración del sitio que se encuentra actualmente manejado con Joomla a uno que se maneje mediante Drupal, entonces tenía la tarea de hacer la migracion de datos, paginas, usuarios, etc.

Entonces, lo que encontre dentro de estos sistemas es que existe un modulo en Drupal que ya hace eso, migrar usuarios y contenido de Joomla a Drupal, para que finalmente se cambie el manejador de contenido y se haga una actualización del sistema, que buena falta le hace. Luego de hacer la migración con este modulo que me hizo la vida facilisima, me tope con el gravisimo problema de que los usuarios ademas de tener un nombre de usuario y una contraseña (que es lo que maneja Drupal por default), tambien tiene un Nombre propio, un Apellido Paterno, un Apellido Materno y algo importantisimo para el sistema el Número de empleado… putsssssssssssssssssssssssssssssssssssss…..

Entonces me di a la tarea de investigar como es que se tenia que hacer todo este bisnes (bussines) y poder así migrar todos los datos de los usuarios que estan en la base de datos de Joomla. Encontre varias respuestas, pero casí todas me llevaban a un Drupal antaño que claro no quería instalar ya que lo que se necesita es una actualización. Así que despues de tres días de buscar en foros, blogs y en la documentación de Drupal (la deje al final por que me da weba leer en ingles…), encontre algo que me llamo la atención, el modulo llamado Content Profile, con el cual pude hacer los campos para el Nombre, Apellidos y Número de empleado, pero putsssssssssssssssssssssssssssssssssss otra vez….. ahora como le hacia para terminar de migrar los datos de Joomla a Drupal, bien… me puse a buscar otra vez, ahora por menos tiempo, por que me seguian saliendo los resultados de la busqueda anterior… entonces dije… que maldita sea, yo sé programar… y me puse a hacer un script de PHP que me costo como 20 mins. de mi vida que lo que hace es copiar registro por registro (que creo que cualquier otro modulo haría lo mismo), los datos de los usuarios de la tabla xxx_users de Joomla a xxx_profile_values. El script es el siguiente.

//

$mysql_config = array(
		'hostname'	=>	'',		// Servidor MySQL
		'username'	=>	'',		// nombre de usuario
		'userpass'	=>	'',		// password
		'dbsename'	=>	''		// base de datos
	);
	
	
	if ( $idcnx = @mysql_connect($mysql_config['hostname'], $mysql_config['username'], $mysql_config['userpass']) ){
		if ( @mysql_select_db($mysql_config['dbsename'],$idcnx) ){
			
			
			$sql_dplusers = 'SELECT uid,name FROM dpl_users;';
			if ( $res_dplusers = @mysql_query($sql_dplusers) ){
				
				if ( mysql_num_rows($res_dplusers) > 0 ){
					
					while ( $dplusers = mysql_fetch_array($res_dplusers) ){
						
						$sql_josusers = 'SELECT name,apellido1,apellido2,idEscolar FROM jos_users WHERE username="' . $dplusers['name'] . '" LIMIT 1;';
						if ( $res_josusers = @mysql_query($sql_josusers) ){
							
							if ( mysql_num_rows($res_josusers) == 1 ){
								
								$josusers = mysql_fetch_array($res_josusers);
								
								$sql_profilevalue_employenumber = 'INSERT INTO dpl_profile_values VALUES(4,' . $dplusers['uid'] . ',"' . $josusers['idEscolar'] . '");';
								@mysql_query($sql_profilevalue_employenumber);
								$sql_profilevalue_firstname = 'INSERT INTO dpl_profile_values VALUES(2,' . $dplusers['uid'] . ',"' . $josusers['name'] . '");';
								@mysql_query($sql_profilevalue_firstname);
								$sql_profilevalue_lastname_father = 'INSERT INTO dpl_profile_values VALUES(3,' . $dplusers['uid'] . ',"' . $josusers['apellido1'] . '");';
								@mysql_query($sql_profilevalue_lastname_father);
								$sql_profilevalue_lastname_mother = 'INSERT INTO dpl_profile_values VALUES(5,' . $dplusers['uid'] . ',"' . $josusers['apellido2'] . '");';
								@mysql_query($sql_profilevalue_lastname_mother);
								echo 'Query Ok for user ' . $dplusers['name'] . '';
								
							}
							else
								echo 'No user data for ' . $dplusers['name'] . '';
						}
						else
							echo 'No user data for ' . $dplusers['name'] . '';
					}
					
				}
				else
					echo 'No results!!!...';
				
			}
			else
				echo 'No results!!!....';
			
			
		}
		else
			echo 'conected but no data base selected :(';
		mysql_close($idcnx);
	}
	else
		echo 'Not connected!!!!....';
	

//



Como pueden ver, no esta optimizado, tienes que investigar cuales son los ids’ de los campos que creaste con el modulo profiles, pero funciona, yo ya tengo todos los datos dentro de la tabla de xxx_profile_values. Si les gusta o quieren modificarlo aca les dejo el fuente para que se lo descargue, pero no tiene nada de explicación así que tendran que valerse de su entendimiento de PHP

Saludos

Login de usuarios con PHP y MySQL

Deja un comentario


En un principio quiero aclarar que utilizare funciones de hash para este ejemplo, como md5(), también quiero agregar que se utilizaran variables de sesion en este sistema para que se pueda iniciar una sesión y los usuarios puedan hacer modificaciones en lo que ustedes deseen darles permisos.

Comenzamos….

para empezar tendremos una base de datos en MySQL:

DROP DATABASE IF EXISTS login; -- eliminamos la base de datos si existe
CRETE DATABASE IF NOT EXISTS login; -- y la creamos nuevamente

USE login;

DROP TABLE IF EXISTS users; -- eliminamos la tabla si existe
CREATE TABLE IF NOT EXISTS users( -- la creamos nuevamente...
	user_id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT; -- para guardar el id del usuario
	user_name VARCHAR(100) NOT NULL, -- nombre de usuario
	user_passwd VARCHAR(32) NOT NULL -- contraseña del usuario, solo 32 caracteres para hacer un hash con md5
);

Explicación del paso anterior:

La linea 1 indica que queremos borrar cualquier indicio de que halla existido alguna base de datos con ese nombre, lo mismo con la tabla para que no existan choques entre bases de datos y tablas.

Despues creamos la tabla dentro de la base de datos que ya tenemos (login).

Necesitaremos un archivo de configuración en PHP, esto con la finalidad de no tener que hacer una conexion cada vez que necesitemos buscar datos en la tabla.

El archivo de configuracion lleva lo siguiente:

function conecta(){
 	if ( $idcnx = mysql_connect('servidor','usuario','contrasena') != NULL ){
 		if ( mysql_select_db('databasename',$idcnx) )
 			return $idcnx;
 		else
 			return NULL;
 	}
 	else
	 	return NULL;
}

Con la función anterior haremos la conexión a nuestra base de datos. Es hora de nuestro archivo mas importante, el archivo del formulario, en el cual el usuario debera colocar sus datos y podra hacer un login. Entonces el archivo quedaría así:

Usuario:
 	Passwd:

Más