Expertos en Symfony y Drupal

Migrar usuarios desde XLS (Excel) a Drupal 7

Buenas drupaleros,

en la píldora drupaliana de hoy, os voy mostrar como migrar unos usuarios desde una típica hoja excel a nuestra plataforma Drupal.

Lo primero que debemos hacer es exportar la hoja excel a un XML. La hoja excel vamos a suponer que tiene un aspecto tal que así:

Aspecto XLS

En cuanto al aspecto del XML exportado sería algo así:


<?xml version="1.0" encoding="windows-1252" standalone="yes"?>
<Records>
  <Record>
    <Row
      C="NOMBRE"
      D="apellidos"
      E="DNI"
      F="Telefono"
      G="movil"
      H="poblacion"	
    />
 </Record>
 <Record>
    <Row
      C="Felipe"
      D="Garcia Garcia"
      E="9999999-S"
      F="927212121"
      G="666666666"
      H="Cáceres"
    />
  </Record>

Una vez exportada a XML, sólo tenemos que recorrer ese XML e ir añadiendo por cada registro un usuario en nuestro Drupal.

Para ello lo primero que haremos será un módulo o utilizar alguno anteriormente creado. Sobre este módulo lo primero será hacer hook menú para poder llamar a una URL. Seguidamente, para no tener problemas de codificación, haremos que nuestras lecturas sean en UTF-8


function vabadusmodule_menu() {
   $items = array();
   $items['migrar/socios'] = array(
     'title'           => 'Migrar socios',
     'page callback'   => '_migrar_socios',        
     'access callback' => TRUE,
     'type'            => MENU_CALLBACK,
    );
   return $items;
}
function _migrar_socios(){
   header('Content-Type: text/html; charset=utf-8');
. . . 
}

A continuación leeremos el fichero XML, exportado anteriormente:


function _migrar_socios(){
. . . 
   $xml = simplexml_load_file('sites/all/modules/vabadusmodule/exportado.xml');     
. . .
}

Ahora solo debemos recorrer ese XML


function _migrar_socios(){
. . . 
   $nombre             = $xml->Record[$contador]->Row['C'];
   $apellidos          = $xml->Record[$contador]->Row['D'];
   $dni                = $xml->Record[$contador]->Row['E'];
   $localidad          = $xml->Record[$contador]->Row['H'];
   $telefono           = $xml->Record[$contador]->Row['F'];
   $movil              = $xml->Record[$contador]->Row['G'];
. . .
}

y por último solo debemos dar de alta en nuestro Drupal el usuario, con una contraseña aleatoria y en nuestro caso asegurándonos que el email no está ya registrado en el sistema.


function _migrar_socios(){
. . .
   $new_user=NULL;
   $pass = rand(1,10000); 
   $new_user = array(
          'name' => $email,
          'pass' => $pass, 
           'mail' => $email,
           'status' => 1,
           'init' => $email,
           'roles' => array(
               DRUPAL_AUTHENTICATED_RID => 'authenticated user',6 => 'Socio', ),
           'field_nombre' => array( 'und' => array(0 => array('value' => $nombre))),
           'field_apellidos' => array( 'und' => array(0 => array('value' => $apellidos))),
           'field_d_n_i_' => array( 'und' => array(0 => array('value' => $dni))),
           'field_tel_fono_fijo_' => array( 'und' => array(0 => array('value' => $telefono))),
           'field_tel_fono_m_vil_' => array( 'und' => array(0 => array('value' => $movil))),
           'field_poblaci_n' => array( 'und' => array(0 => array('value' => $localidad))),
        );        
   $account = new stdClass();
   $account->is_new = true;
   $feedback_user = user_load_by_name($email);
   if(empty($feedback_user)) {
      	//Salvamos el usuario
     	user_save($account, $new_user);   
   }
. . .
}

Con esto tendremos migrados una típica hoja de cálculo con filas de usuarios, a nuestro Drupal. En otro post, os enseñaré cómo utilizar el servicio de envío de correos Madril para avisar a estos nuevos usuarios.

Drupal y rock and roll

[x] Este sitio utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando estás aceptando su uso. Política de cookies.