/**
  * Helper function that runs the user import for a sample enrolment
  *
  * @param array $data Import data to use
  */
 private function run_enrolment_import($data)
 {
     global $CFG;
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     $provider = new rlipimport_version1elis_importprovider_mockenrolment($data);
     $importplugin = new rlip_importplugin_version1elis($provider);
     $importplugin->run();
 }
 /**
  * Validate that the new date format works as expected
  * @param string $instr  input date/time
  * @param bool   $oldformats  whether it supports old formats
  * @param bool   $inctime     whether it supports additional time info
  * @param int    $minyear     the minimum year allowed
  * @param int    $maxyear     the maximum year allowed
  * @param mixed  $expected    the expected output from parse_date() method given the above parameters
  * @dataProvider pddataprovider
  */
 public function test_version1elisparsedate($instr, $oldformats, $inctime, $minyear, $maxyear, $expected)
 {
     if (is_array($expected)) {
         $expected = call_user_func_array('rlip_timestamp', $expected);
     }
     $plugin = new rlip_importplugin_version1elis();
     $timestamp = $plugin->parse_date($instr, $oldformats, $inctime, $minyear, $maxyear);
     $this->assertEquals($expected, $timestamp);
 }
 /**
  * Helper function that runs the userset import for a sample userset
  *
  * @param array $extradata Extra fields to set for the new userset
  * @param boolean $usedefaultdata If true, use the default userset data,
  *                                  along with any data specifically provided
  */
 private function run_core_userset_import($extradata, $usedefaultdata = true)
 {
     global $CFG;
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     if ($usedefaultdata) {
         $data = $this->get_core_userset_data();
     } else {
         $data = array();
     }
     foreach ($extradata as $key => $value) {
         $data[$key] = $value;
     }
     $provider = new rlipimport_version1elis_importprovider_mockuserset($data);
     $importplugin = new rlip_importplugin_version1elis($provider);
     $importplugin->run();
 }
 /**
  * Helper function that runs the user import for a sample user
  *
  * @param array $data Import data to use
  */
 private function run_user_import($data, $usedefaultdata = true)
 {
     global $CFG;
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     $provider = new rlipimport_version1elis_importprovider_mockuser($data);
     $importplugin = new rlip_importplugin_version1elis($provider);
     $importplugin->run();
 }
示例#5
0
 /**
  * User import test cases
  *
  * @uses $DB
  * @dataProvider dataproviderfortests
  */
 public function test_elis_user_import($action, $userdata, $setupindex, $elisexists, $mdlexists)
 {
     global $CFG, $DB;
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     $CFG->siteguest = '';
     $importdata = array('action' => $action);
     foreach ($userdata as $key => $value) {
         $importdata[$key] = $value;
     }
     try {
         if ($setupindex != NO_TEST_SETUP) {
             $provider = new rlipimport_version1elis_importprovider_mockuser($this->testsetupdata[$setupindex]);
             $importplugin = new rlip_importplugin_version1elis($provider);
             @$importplugin->run();
         }
         $mdluserdata = $this->map_moodle_user($userdata);
         ob_start();
         var_dump($mdluserdata);
         $mdluserdatadump = ob_get_contents();
         ob_end_clean();
         $mdluserid = $DB->get_field('user', 'id', $mdluserdata);
         $provider = new rlipimport_version1elis_importprovider_mockuser($importdata);
         $importplugin = new rlip_importplugin_version1elis($provider);
         @$importplugin->run();
     } catch (Exception $e) {
         mtrace("\nException in test_elis_user_import(): " . $e->getMessage() . "\n");
     }
     $elisuserdata = $this->map_elis_user($userdata, $elisexists);
     ob_start();
     var_dump($elisuserdata);
     $tmp = ob_get_contents();
     ob_end_clean();
     ob_start();
     var_dump($DB->get_records(user::TABLE));
     $crlmuser = ob_get_contents();
     ob_end_clean();
     ob_start();
     var_dump($DB->get_records('user'));
     $mdluser = ob_get_contents();
     ob_end_clean();
     $this->assertEquals($elisexists, $DB->record_exists(user::TABLE, $elisuserdata), "ELIS user assertion: elis_user_data; " . user::TABLE . "  = {$tmp} ; {$crlmuser}");
     if ($mdlexists === true) {
         $mdluserdata['deleted'] = 0;
     } else {
         if ($mdlexists === MDL_USER_DELETED) {
             $mdlexists = true;
             $mdluserdata = array('id' => $mdluserid, 'deleted' => 1);
         }
     }
     $this->assertEquals($mdlexists, $DB->record_exists('user', $mdluserdata), "Moodle user assertion: mdl_user_data; mdl_user = {$mdluserdatadump} ; {$mdluser}");
 }
 function general_validation_message($record, $message, $type)
 {
     //need the plugin class for some utility functions
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     $msg = "";
     if ($type == "enrolment") {
         if ($record->action != 'create' && $record->action != 'delete') {
             //invalid action
             return "Enrolment in \"{$record->context}\" could not be processed. " . $message;
         }
         if (!$this->track_role_actions && !$this->track_enrolment_actions) {
             //error without sufficient information to properly provide details
             if ($record->action == 'create') {
                 return 'Enrolment could not be created. ' . $message;
             } else {
                 if ($record->action == 'delete') {
                     return 'Enrolment could not be deleted. ' . $message;
                 }
             }
         }
         //collect role assignment and enrolment messages
         $lines = array();
         if ($this->track_role_actions) {
             //determine if a user identifier was set
             $user_identifier_set = !empty($record->username) || !empty($record->email) || !empty($record->idnumber);
             //determine if all required fields were set
             $required_fields_set = !empty($record->role) && $user_identifier_set && !empty($record->context);
             //descriptive string for user and context
             $user_descriptor = rlip_importplugin_version1elis::get_user_descriptor($record);
             $context_descriptor = rlip_importplugin_version1elis::get_context_descriptor($record);
             switch ($record->action) {
                 case "create":
                     if ($required_fields_set && in_array($record->context, $valid_contexts) && !empty($record->instance)) {
                         //assignment on a specific context
                         $lines[] = "User with {$user_descriptor} could not be assigned role " . "with shortname \"{$record->role}\" on {$context_descriptor}.";
                     } else {
                         if ($required_fields_set && $record->context == 'system') {
                             //assignment on the system context
                             $lines[] = "User with {$user_descriptor} could not be assigned role " . "with shortname \"{$record->role}\" on the system context.";
                         } else {
                             //not valid
                             $lines[] = "Role assignment could not be created.";
                         }
                     }
                     break;
                 case "delete":
                     if ($required_fields_set && in_array($record->context, $valid_contexts) && !empty($record->instance)) {
                         //unassignment from a specific context
                         $lines[] = "User with {$user_descriptor} could not be unassigned role " . "with shortname \"{$record->role}\" on {$context_descriptor}.";
                     } else {
                         if ($required_fields_set && $record->context == 'system') {
                             //unassignment from the system context
                             $lines[] = "User with {$user_descriptor} could not be unassigned role " . "with shortname \"{$record->role}\" on the system context.";
                         } else {
                             //not valid
                             $lines[] = "Role assignment could not be deleted. ";
                         }
                     }
                     break;
             }
         }
         if ($this->track_enrolment_actions) {
             //determine if a user identifier was set
             $user_identifier_set = !empty($record->username) || !empty($record->email) || !empty($record->idnumber);
             //determine if some required field is missing
             $missing_required_field = !$user_identifier_set || empty($record->instance);
             //descriptive string for user
             $user_descriptor = rlip_importplugin_version1elis::get_user_descriptor($record);
             switch ($record->action) {
                 case "create":
                     if ($missing_required_field) {
                         //required field missing, so use generic failure message
                         $lines[] = "Enrolment could not be created.";
                     } else {
                         //more accurate failure message
                         $lines[] = "User with {$user_descriptor} could not be enrolled in " . "course with shortname \"{$record->instance}\".";
                     }
                     break;
                 case "delete":
                     if ($missing_required_field) {
                         //required field missing, so use generic failure message
                         $lines[] = "Enrolment could not be deleted.";
                     } else {
                         //more accurate failure message
                         $lines[] = "User with {$user_descriptor} could not be unenrolled " . "from course with shortname \"{$record->instance}\".";
                     }
                     break;
             }
         }
         //create combined message, potentially containing role assignment and
         //enrolment components
         $msg = implode(' ', $lines) . ' ' . $message;
     }
     if (isset($record->context) && $record->context == "course") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 if (empty($record->context) || empty($record->idnumber)) {
                     $msg = "Course description could not be created. " . $message;
                 } else {
                     $msg = "{$type} description with idnumber \"{$record->idnumber}\" could not be created. " . $message;
                 }
                 break;
             case "update":
                 if (empty($record->context) || empty($record->idnumber)) {
                     $msg = "Course description could not be updated. " . $message;
                 } else {
                     $msg = "{$type} description with idnumber \"{$record->idnumber}\" could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 if (empty($record->context) || empty($record->idnumber)) {
                     $msg = "Course description could not be deleted. " . $message;
                 } else {
                     $msg = "{$type} description with idnumber \"{$record->idnumber}\" could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'Course could not be processed. ' . $message;
                 break;
         }
     }
     if ($type == "user") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 //make sure all required fields are specified
                 if (empty($record->username) && empty($record->email) && empty($record->idnumber)) {
                     $msg = "User could not be created. " . $message;
                 } else {
                     $user_descriptor = rlip_importplugin_version1elis::get_user_descriptor($record);
                     $msg = "{$type} with {$user_descriptor} could not be created. " . $message;
                 }
                 break;
             case "update":
                 //make sure all required fields are specified
                 if (empty($record->username) && empty($record->email) && empty($record->idnumber)) {
                     $msg = "User could not be updated. " . $message;
                 } else {
                     $user_descriptor = rlip_importplugin_version1elis::get_user_descriptor($record);
                     $msg = "{$type} with {$user_descriptor} could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 //make sure all required fields are specified
                 if (empty($record->username) && empty($record->email) && empty($record->idnumber)) {
                     $msg = "User could not be deleted. " . $message;
                 } else {
                     $user_descriptor = rlip_importplugin_version1elis::get_user_descriptor($record);
                     $msg = "{$type} with {$user_descriptor} could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'User could not be processed. ' . $message;
                 break;
         }
     }
     if (isset($record->context) && $record->context == "track") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Track could not be created. " . $message;
                 } else {
                     $msg = "{$type} with idnumber \"{$record->idnumber}\" could not be created. " . $message;
                 }
                 break;
             case "update":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Track could not be updated. " . $message;
                 } else {
                     $msg = "{$type} with idnumber \"{$record->idnumber}\" could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Track could not be deleted. " . $message;
                 } else {
                     $msg = "{$type} with idnumber \"{$record->idnumber}\" could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'Track could not be processed. ' . $message;
                 break;
         }
     }
     if (isset($record->context) && $record->context == "cluster") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 //make sure all required fields are specified
                 if (empty($record->name)) {
                     $msg = "User set could not be created. " . $message;
                 } else {
                     $msg = "User set with name \"{$record->name}\" could not be created. " . $message;
                 }
                 break;
             case "update":
                 //make sure all required fields are specified
                 if (empty($record->name)) {
                     $msg = "User set could not be updated. " . $message;
                 } else {
                     $msg = "User set with name \"{$record->name}\" could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 //make sure all required fields are specified
                 if (empty($record->name)) {
                     $msg = "User set could not be deleted. " . $message;
                 } else {
                     $msg = "User set with name \"{$record->name}\" could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'User set could not be processed. ' . $message;
                 break;
         }
     }
     if (isset($record->context) && $record->context == "curriculum") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Program could not be created. " . $message;
                 } else {
                     $msg = "Program with idnumber \"{$record->idnumber}\" could not be created. " . $message;
                 }
                 break;
             case "update":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Program could not be updated. " . $message;
                 } else {
                     $msg = "Program with idnumber \"{$record->idnumber}\" could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Program could not be deleted. " . $message;
                 } else {
                     $msg = "Program with idnumber \"{$record->idnumber}\" could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'Program could not be processed. ' . $message;
                 break;
         }
     }
     if (isset($record->context) && $record->context == "class") {
         $type = ucfirst($type);
         switch ($record->action) {
             case "create":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Class instance could not be created. " . $message;
                 } else {
                     $msg = "Class instance with idnumber \"{$record->idnumber}\" could not be created. " . $message;
                 }
                 break;
             case "update":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Class instance could not be updated. " . $message;
                 } else {
                     $msg = "Class instance with idnumber \"{$record->idnumber}\" could not be updated. " . $message;
                 }
                 break;
             case "delete":
                 //make sure all required fields are specified
                 if (empty($record->idnumber)) {
                     $msg = "Class instance could not be deleted. " . $message;
                 } else {
                     $msg = "Class instance with idnumber \"{$record->idnumber}\" could not be deleted. " . $message;
                 }
                 break;
             default:
                 //invalid action
                 $msg = 'Class instance could not be processed. ' . $message;
                 break;
         }
     }
     return $msg;
 }
示例#7
0
$context = context_system::instance();
require_capability('moodle/site:config', $context);
$pluginwwwroot = str_replace($CFG->dirroot, $CFG->wwwroot, $plugindir);
$baseurl = $pluginwwwroot . '/config_fields.php';
$tab = optional_param('tab', 'user', PARAM_CLEAN);
//page header
rlipimport_version1elis_page_setup($baseurl);
echo $OUTPUT->header();
//tabs
$tabs = rlipimport_version1elis_get_tabs($baseurl);
print_tabs(array($tabs), $tab);
//TODO: implement all necessary calls, etc, to make the rest of this code work
//data from db
$mappingdata = rlipimport_version1elis_get_mapping($tab);
//options
$plugin = new rlip_importplugin_version1elis(NULL, false);
$options = $plugin->get_available_fields($tab);
//body
$form = new rlip_importfield_form(null, $options);
//handle data submission
if ($data = $form->get_data()) {
    if (isset($data->submitbutton)) {
        rlipimport_version1elis_save_mapping($tab, $options, $data);
        //notify to the user that settings were saved
        echo $OUTPUT->heading(get_string('mappingssaved', 'dhimport_version1elis'));
    } else {
        if (isset($data->reset)) {
            rlipimport_version1elis_reset_mappings($tab);
            redirect($baseurl . "?tab={$tab}&resetmessage=1", '', 0);
        }
    }
示例#8
0
 /**
  * User import test cases
  *
  * @uses $DB
  * @dataProvider dataproviderfortests
  */
 public function test_elis_entity_import($action, $context, $entitydata, $setuparray, $entityexists)
 {
     global $CFG, $DB;
     if (empty($context)) {
         $this->markTestSkipped("\nPHPunit test coding error, 'context' NOT set - skipping!\n");
         return;
     }
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     set_config('enable_curriculum_expiration', true, 'local_elisprogram');
     $importdata = array('action' => $action, 'context' => $context);
     foreach ($entitydata as $key => $value) {
         $importdata[$key] = $value;
     }
     try {
         foreach ($setuparray as $index) {
             $provider = new rlipimport_version1elis_importprovider_mockcourse($this->testsetupdata[$index]);
             $importplugin = new rlip_importplugin_version1elis($provider);
             @$importplugin->run();
         }
         $provider = new rlipimport_version1elis_importprovider_mockcourse($importdata);
         $importplugin = new rlip_importplugin_version1elis($provider);
         $importplugin->run();
     } catch (Exception $e) {
         mtrace("\nException in test_elis_entity_import(): " . $e->getMessage() . "\n");
     }
     // Call any mapping functions to transform IP column to DB field.
     $mapfcn = 'map_' . $context;
     if (method_exists($this, $mapfcn)) {
         $entitydata = $this->{$mapfcn}($entitydata, $entityexists);
     }
     ob_start();
     var_dump($entitydata);
     $tmp = ob_get_contents();
     ob_end_clean();
     $crlmtable = $this->contexttotable[$context];
     ob_start();
     var_dump($DB->get_records($crlmtable));
     $crlmtabledata = ob_get_contents();
     ob_end_clean();
     $this->assertEquals($entityexists, $DB->record_exists($crlmtable, $entitydata), "ELIS entity assertion: [mapped]entity_data ; {$crlmtable} = {$tmp} ; {$crlmtabledata}");
 }
 /**
  * Test custom mapping summaries.
  *
  * @dataProvider custommappinganddataprovider
  * @param string $entity  The entity type for import ('user', 'course', 'enrolment')
  * @param array  $mapping The custom field mapping
  * @param array  $data
  */
 public function test_custom_mapping_summaries($entity, $mapping, $data)
 {
     global $DB;
     // Setup the custom mapping values.
     rlipimport_version1elis_save_mapping($entity, array_keys($mapping), $mapping);
     // Setup the class name fo the mock import provider we need.
     $mockprovider = 'rlipimport_version1elis_importprovider_mock' . $entity;
     $provider = new $mockprovider($data);
     $importplugin = new rlip_importplugin_version1elis($provider);
     $importplugin->run();
     // Attempt to handle all of the specific messages in as general a way as possible.
     $requiredfields = array();
     $messageend = 'Please fix the import file and re-upload it.';
     // Testing a custom action mapping value.
     if (isset($mapping['action'])) {
         $message = 'Import file memoryfile was not processed because it is missing the following required column: ' . $mapping['action'] . '.';
     } else {
         if ($entity == 'user' && $data['action'] == 'create') {
             // echo "\n", 'user create', "\n";
             // User create is only a subset of the required fields.
             $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: ';
             $possiblefields = array('username', 'email', 'idnumber', 'user_username', 'user_email', 'user_idnumber');
             foreach ($possiblefields as $possiblefield) {
                 $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield;
             }
         } else {
             if ($entity == 'course') {
                 // Course actions will only initially display a message if the context field is missing.
                 $message = 'Import file memoryfile was not processed because it is missing the following required column: ' . $mapping['context'] . '.';
             } else {
                 if ($entity == 'enrolment') {
                     // Enrolment actions will only initially display a message if one of the three required fields is missing.
                     // (at least one of the three is required).
                     $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: ';
                     $possiblefields = array('user_username', 'user_email', 'user_idnumber');
                     foreach ($possiblefields as $possiblefield) {
                         $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield;
                     }
                 } else {
                     // Handle generic cases below.
                     if (count($mapping) > 1) {
                         // echo 'Generic: count($mapping) > 1', "\n";
                         $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: ';
                         $requiredfields = $mappings;
                         // TBD
                     } else {
                         // We're importing data where some fields are requires in an OR condition, so we just need to replace that.
                         // Single field value with it's custom mapped representation.
                         $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: ';
                         $possiblefields = array('user_username', 'user_email', 'user_idnumber', 'username', 'email', 'idnumber');
                         foreach ($possiblefields as $possiblefield) {
                             $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield;
                         }
                     }
                 }
             }
         }
     }
     $logs = $DB->get_records(RLIP_LOG_TABLE);
     // var_dump($logs);
     $log = end($logs);
     // echo 'Required: ';
     // var_dump($requiredfields);
     $realmessage = $log->statusmessage;
     $this->assertEquals(0, strpos($realmessage, $message));
     $fieldstart = strlen($message);
     $fieldend = strpos($realmessage, $messageend);
     $this->assertGreaterThanOrEqual($fieldstart, $fieldend);
     $fieldsection = substr($realmessage, $fieldstart - 1, $fieldend - $fieldstart);
     $fieldspresent = explode(', ', trim($fieldsection, ' .'));
     // echo 'Present: ';
     // var_dump($fieldspresent);
     foreach ($requiredfields as $requiredfield) {
         $this->assertTrue(in_array($requiredfield, $fieldspresent));
     }
 }
 /**
  * Validate that MANUAL import obeys maxruntime
  * @dataProvider fileprovider
  */
 public function test_manualimportobeysmaxruntime($filename, $entity)
 {
     global $CFG, $DB;
     require_once $CFG->dirroot . '/local/datahub/tests/other/csv_delay.class.php';
     $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php';
     require_once $file;
     // Set the log file name to a fixed value.
     $filepath = $CFG->dataroot;
     // MUST copy file to temp area 'cause it'll be deleted after import.
     $testfile = dirname(__FILE__) . '/fixtures/' . $filename;
     $tempdir = $CFG->dataroot . '/local_datahub_phpunit/';
     $file = $tempdir . $filename;
     @mkdir($tempdir, 0777, true);
     @copy($testfile, $file);
     $provider = new rlipimport_version1elis_importprovider_manual_delay($file, $entity);
     // Run the import.
     $importplugin = new rlip_importplugin_version1elis($provider, true);
     ob_start();
     $result = $importplugin->run(0, 0, 1);
     // Maxruntime 1 sec.
     ob_end_clean();
     $this->assertNotNull($result);
     // Get most recent record.
     $records = $DB->get_records(RLIP_LOG_TABLE, null, 'starttime DESC');
     foreach ($records as $record) {
         $ui = $record->statusmessage;
         break;
     }
     $expectedui = "/.*Failed importing all lines from import file.*due to time limit exceeded.*/";
     $this->assertRegExp($expectedui, $ui);
     // Test that the filename is also included in the error message.
     // The mock provider returns 'filename' as the filename.
     $expectedui = "/.*filename*/";
     $this->assertRegExp($expectedui, $ui);
     // Clean-up data file & tempdir.
     @unlink($file);
     @rmdir($tempdir);
 }
 /**
  * Validate restoring default field mappings
  */
 public function testrestoredefaultmappingupdatesrecords()
 {
     global $CFG, $DB;
     $file = get_plugin_directory('dhimport', 'version1elis') . '/lib.php';
     require_once $file;
     // Obtain available fields.
     $plugin = new rlip_importplugin_version1elis(null, false);
     $options = $plugin->get_available_fields('user');
     // Persist default field.
     rlipimport_version1elis_save_mapping('user', $options, array());
     // Setup validation.
     $select = 'standardfieldname = customfieldname';
     $count = $DB->count_records_select(RLIPIMPORT_VERSION1ELIS_MAPPING_TABLE, $select);
     $this->assertEquals($count, count($options));
     // Update all mapping values.
     $data = array();
     foreach ($options as $option) {
         $data[$option] = $option . 'updated';
     }
     // Persist updated values and validate.
     rlipimport_version1elis_save_mapping('user', $options, $data);
     $select = 'standardfieldname != customfieldname';
     $count = $DB->count_records_select(RLIPIMPORT_VERSION1ELIS_MAPPING_TABLE, $select);
     $this->assertEquals($count, count($options));
     // Reset and validate state.
     rlipimport_version1elis_reset_mappings('user');
     $select = 'standardfieldname = customfieldname';
     $count = $DB->count_records_select(RLIPIMPORT_VERSION1ELIS_MAPPING_TABLE, $select);
     $this->assertEquals($count, count($options));
 }