Hoy estuve investigando un poco sobre las tablas y campos que afecta la creación de un nuevo usuario para una tienda electrónica basada en Virtuemart 1.1.2 para Joomla! 1.5.x. Talvez no es muy común que se requiera migrar una gran base de datos de usuarios hacia el modo en que virtuemart los almacena, pero aunque solo tengamos unos cuantos registros, es importante conocer que campos afecta y como son generados para poder crear un script de automatización que lo haga por nosotros.
Mi problema o situación fue la siguiente: una base de datos con más de 1,500 usuarios registrados en una tienda virtual que fue desarrollada a la medida en su momento, la tabla en general no fue diseñada muy bien, lo cuál dificultaba un poco la manipulación de los datos, aquí les presento una imagen de phpmyadmin con la estructura de la tabla "tienda" que será de donde obtendrémos todos los datos para virtuemart.
Para automatizar este proceso de migración de tantos usuarios hice un script PHP (incluido al final) que de manera general hace lo siguiente:
- Asigna valores de conexión a bases de datos (origen y destino)
- Se conecta a la base de datos origen y obtiene todos los registros de la tabla en cuestión, en este caso la tabla se llama tienda. Los registros se almacenan en un arreglo.
- Se conecta a la base de datos destino.
- Se realizan operaciones de inserción en las tablas pertinentes de la Base de datos para cada uno de los registros almacenados en el arreglo.
En este caso específico el nombre del usuario se tendrá que separar en first_name y last_name para integrarlo con la base de datos de virtuemart en la tabla #__vm_user_info, no existe una forma exacta y perfecta de hacer esto ya que no podemos saber que es un nombre y un apellido para cada usuario, pero basándonos en las costumbres de escribir nombre en combinación con apellidos, el siguiente código será suficiente:
$nombre= explode(" ", ucwords( strtolower($row['nombre']) ), 4);
if(count($nombre)==1){
$name = $nombre[0];
$lastname = ' ';
}else if(count($nombre)==2){
$name = $nombre[0];
$lastname= $nombre[1];
} else if(count($nombre)==3){
$name = $nombre[0];
$lastname= $nombre[1].' '.$nombre[2];
} else if(count($nombre)>=4){
$name = $nombre[0].' '.$nombre[1];
$lastname= $nombre[2].' '.$nombre[3];
}
El primer INSERT en el script que hice es para añadir la información a la tabla #__users de Joomla. Es importante que almacenemos el id tras haberse creado, el código está en la línea 134:
$sql = "INSERT INTO jos_users VALUES ('','$name"." ".$lastname."', '".$nickname."', '".strtolower($row['email'])."', '".md5($row['pass'])."', '$usertype', 0, 0, $groupid, '$registerdate', '$registerdate','','')";
$result = mysql_query($sql) or die("Error SQL: " . mysql_error());
$userid = mysql_insert_id(); // Get assigned userid from Joomla!
Las siguientes tablas que deberán ser modificadas son:
jos_core_acl_aro : Tabla de control de acceso de Joomla
jos_core_acl_groups_aro_map : Tabla de mapeo de grupos de acceso
Para las tablas que corresponden a Virtuemart, se tienen que insertar datos en:
jos_vm_shopper_vendor_xref :
jos_vm_auth_user_vendor : Tabla de relación de usuario con tienda online.
jos_vm_user_info : Almacena información extendida de cada usuario registrado en Joomla.
Entre los datos curiosos o difíciles de obtener para dar de alta a un usuario, es la creación del customer_number en la tabla #__vm_shopper_vendor_xref, este es generado con:
$customer_number = uniqid( rand() );
También el campo user_info_id de la tabla #__vm_user_info es un caso especial, para ser generado podemos utilizar el siguiente código como VALUE directamente en la consulta MySQL:
md5( date_format( date_add( sysdate( ) , INTERVAL FLOOR( 1 + ( RAND( ) *998 ) ) MICROSECOND ) ,"%Y%m%d%H%i%s%f" ) )
Como podrán ver en el script, al final agregué un do-while que repite el query mientras no pueda ser almacenado, esto es debido a que existe el caso en que el valor generado por este md5 ya exista en la BD. Este campo es llave primaria, por lo que no puede repetirse.
A quien le interese, podrá encontrar el código que aquí les paso bastante útil, obviamente fue creado para mis necesidades pero bastará con que modifiquen los nombres de campos de la Base de Datos origen para que cumplan con sus requerimientos.
Ver archivo -> migrar_a_virtuemart.php
Tadek Chávez es el editor principal de este sitio. Ingeniero en sistemas computacionales especializado en ciencias de la computación con enfoque en sistemas abiertos. Director de tadzioTek
.
Secciones 




















Comentarios
PD... hay muy poca información de como usar VirtueMart.. es decir como cambiar la plantilla, como cambiar monedas.. "que ya lei anteriormente" como usar el CSS etc etc..