<?php
// $Id: user_import.install,v 1.12 2009/09/20 01:59:29 MegaGrunt Exp $

/**
 * @file 
 * Import and update users from a comma separated file (csv).
 */


/**
 * Implementation of hook_install()
 */
function user_import_install() {
  // Create tables.
  drupal_install_schema('user_import');
  return;
}

/**
* Implementation of hook_schema(). 
*/
function user_import_schema() {
  $schema['user_import'] = array(
     'description' => t("Settings for each import, and import setting templates."),
     'fields' => array(
        'import_id' => array(
        'description' => t("ID key of import or template."),
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10'
      ),
      'name' => array(
        'description' => t("Label of import template, only used if this is an import template."),
        'type' => 'varchar',
        'length' => '25',
        'not null' => TRUE,
        'default' => ''
      ),
      'filename' => array( 
        'description' => t("Name of file being used as source of data for import."),
        'type' => 'varchar',
        'length' => '50',
        'not null' => TRUE,
        'default' => ''
      ),
      'oldfilename' => array( 
        'description' => t("Original name of file being used as source of data for import."), 
        'type' => 'varchar',
        'length' => '50',
        'not null' => TRUE,
        'default' => ''
      ),
      'filepath' => array( 
        'description' => t("Path to file being used as source of data for import."), 
        'type' => 'text',
        'size' => 'small',
        'not null' => TRUE
      ),
      'started' => array(  
        'description' => t("Datestamp of when import was started."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '11'
      ),
      'pointer' => array( 
        'description' => t("Pointer to where test/import last finished."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '10'
      ),
      'processed' => array(  
        'description' => t("Number of users processed by import."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '10'
      ),
      'valid' => array(    
        'description' => t("Number of users processed without errors."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '10'
      ),
      'first_line_skip' => array( 
        'description' => t("Ignore the first line of the CSV file, which are usually field headings."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '1'
      ),
      'contact' => array( 
        'description' => t("Enable the Contact preference of user accounts."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '1'
      ),
      'username_space' => array( 
        'description' => t("Add a space between elements of a user name."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '1'
      ),
      'send_email' => array( 
        'description' => t("Send welcome email to imported users."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '1'
      ),
      'field_match' => array( 
        'description' => t("Settings for how data matches to Drupal fields."), 
        'type' => 'text',
        'size' => 'big',
        'not null' => TRUE,
        'serialize' => TRUE
      ),
      'roles' => array(      
        'description' => t("Roles to give imported users."), 
        'type' => 'varchar',
        'length' => '255',
        'not null' => TRUE,
        'default' => '',
        'serialize' => TRUE
      ),
      'options' => array(   
        'description' => t("Store of all other options for import. Most of the other settings in this table will be moved into here in future."), 
        'type' => 'text',
        'size' => 'big',
        'not null' => TRUE,
        'serialize' => TRUE
      ),
      'setting' => array(    
        'description' => t("Status of import, or whether it is an import template."), 
        'type' => 'varchar',
        'length' => '10',
        'not null' => TRUE,
        'default' => ''
      )
    ),
    'primary key' => array('import_id'),
  );

  $schema['user_import_errors'] = array(  
    'description' => t("Record of errors encountered during an import."), 
    'fields' => array(    
      'import_id' => array( 
        'description' => t("ID key of import or template."), 
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'disp-width' => '10'
      ),
      'data' => array(  
        'description' => t("Data (matched to fields) for user that failed to import due to error."), 
        'type' => 'text',
        'size' => 'big',
        'not null' => TRUE,
        'serialize' => TRUE
      ),
      'errors' => array(  
        'description' => t("Error(s) encountered for user that failed to import."), 
        'type' => 'text',
        'size' => 'big',
        'not null' => TRUE,
        'serialize' => TRUE
      )
    ),
    'indexes' => array(
      'import_id' => array('import_id')
    ),
  );
  return $schema;
}

function user_import_update_1() {
  $ret = array(); 
  _system_update_utf8(array('user_import', 'user_import_errors'));
  return $ret;
}

function user_import_update_2() {
  $ret = array();
  db_add_column($ret, 'user_import', 'options', 'longtext');
  return $ret;
}

function user_import_update_3() {
  $ret = array();
  db_drop_primary_key($ret, 'user_import');
  db_change_field($ret, 'user_import', 'iid', 'import_id', array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, 'disp-width' => '10'), array('primary key' => array('import_id')));
  db_change_field($ret, 'user_import', 'first_line', 'first_line_skip', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'disp-width' => '10'), array('primary key' => array('import_id')));
	db_drop_index($ret, 'user_import_errors', 'import_id');
  db_change_field($ret, 'user_import_errors', 'iid', 'import_id', array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, 'disp-width' => '10'));
	db_add_index($ret, 'user_import_errors', 'import_id', array('import_id'));
  return $ret;
}

function user_import_update_4() {
  $ret = array();
	db_drop_index($ret, 'user_import_errors', 'import_id'); 
  db_change_field($ret, 'user_import_errors', 'error', 'errors', array('type' => 'text', 'size' => 'big', 'not null' => TRUE, 'serialize' => TRUE));
	db_add_index($ret, 'user_import_errors', 'import_id', array('import_id'));
  return $ret;
}

function user_import_update_5() {
  $ret = array();
	db_drop_index($ret, 'user_import_errors', 'import_id'); 
  db_change_field($ret, 'user_import_errors', 'errors', 'errors', array('type' => 'text', 'size' => 'big', 'not null' => TRUE, 'serialize' => TRUE));
	db_add_index($ret, 'user_import_errors', 'import_id', array('import_id'));
  return $ret;
}

function user_import_update_6001() {
  // Rebuild schema cache
  drupal_get_schema('user_import', TRUE);
  return array();
}

/**
* Implementation of hook_uninstall().
*/
function user_import_uninstall() {
  drupal_uninstall_schema('user_import');
  variable_del('user_import_settings');
  variable_del('user_import_max');
  variable_del('user_import_line_max');
  variable_del('user_export_checked_usernames');
}

