/**
  * Validate that the version 1 export includes custom field datetime data in the output.
  *
  * @dataProvider entity_provider
  */
 public function test_exportincludes_customfield_datetime_data($entityname, $entitytable)
 {
     global $CFG, $DB;
     // Set the export to be incremental.
     set_config('nonincremental', 0, 'dhexport_version1elis');
     $this->load_csv_data();
     // Set up necessary custom field information in the database.
     // Create category.
     $categoryid = $this->create_custom_field_category();
     // Create custom field.
     $field = $this->create_test_field($entityname, 'rlipdate', 'int', 'datetime', $categoryid);
     $this->create_field_mapping('testcustomfields', 'field_' . $field->id);
     // Create data record for custom field.
     $entity = $DB->get_records($entitytable);
     $entity = current($entity);
     $result = $this->update_data_record($entityname, $entity, $field, mktime(0, 0, 0, 1, 1, 2012));
     // Obtain our export data based on the current DB state.
     $data = $this->get_export_data();
     // Data validation.
     $this->assertEquals(2, count($data));
     $row = $data[1];
     $this->assertEquals(11, count($row));
     $this->assertEquals('Jan/01/2012', $row[10]);
     // Set inctime to true.
     $fieldowner = new field_owner($field->owners['manual']->id);
     $fieldowner->load();
     $fieldowner->param_inctime = 1;
     $fieldowner->save();
     // Test with other value.
     $value = mktime(10, 10, 0, 1, 1, 2012);
     $result = $this->update_data_record($entityname, $entity, $field, $value);
     $data = $this->get_export_data();
     $this->assertEquals(2, count($data));
     $row = $data[1];
     $this->assertEquals(11, count($row));
     $this->assertEquals('Jan/01/2012:10:10', $row[10]);
 }
 /**
  * Test rlipexport_version1elis_extrafieldsetcustomfieldbase::get_columns()
  */
 public function test_rlipexport_version1elis_extrafieldsetcustomfieldbase_getdata()
 {
     $this->load_csv_data();
     // Create Fields.
     // Normal Field.
     $fieldid1 = $this->create_custom_field('testcf1', 0, true, CONTEXT_ELIS_USER);
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid1, '');
     $this->create_field_data($fieldid1, 'option1');
     // Second Normal Field.
     $fieldid2 = $this->create_custom_field('testcf2', 0, true, CONTEXT_ELIS_USER);
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid2, '');
     $this->create_field_data($fieldid2, 'option2');
     // Multivalued field with multiple values.
     $fieldid3 = $this->create_custom_field('testcf3', 1, true, CONTEXT_ELIS_USER);
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid3, '');
     $this->create_field_data($fieldid3, array('option1', 'option2'));
     // Multivalued field with single value.
     $fieldid4 = $this->create_custom_field('testcf4', 1, true, CONTEXT_ELIS_USER);
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid4, '');
     $this->create_field_data($fieldid4, array('option1'));
     // Historical multivalued field.
     $fieldid5 = $this->create_custom_field('testcf5', 1, true, CONTEXT_ELIS_USER);
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid5, '');
     $this->create_field_data($fieldid5, array('option1', 'option2'));
     // Update field to not multivalued to create historical multivalue state.
     $field = new field($fieldid5);
     $field->load();
     $field->multivalued = 0;
     $field->save();
     // Datetime field.
     $fieldid6 = $this->create_custom_field('testcf6', 0, false, CONTEXT_ELIS_USER, 'datetime');
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid6, '');
     $this->create_field_data($fieldid6, mktime(0, 0, 0, 7, 24, 2012));
     // Datetime with time field.
     $fieldid7 = $this->create_custom_field('testcf7', 0, false, CONTEXT_ELIS_USER, 'datetime');
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid7, '');
     $this->create_field_data($fieldid7, mktime(10, 20, 30, 7, 24, 2012));
     $field = new field($fieldid7);
     $field->load();
     $fieldowner = new field_owner($field->owners['manual']->id);
     $fieldowner->load();
     $fieldowner->param_inctime = 1;
     $fieldowner->save();
     // Fields with HTML.
     $fieldid8 = $this->create_custom_field('testcf8', 0, false, CONTEXT_ELIS_USER, 'text');
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid8, '');
     $this->create_field_data($fieldid8, '<b>Test Text One</b>');
     $fieldid9 = $this->create_custom_field('testcf9', 0, false, CONTEXT_ELIS_USER, 'textarea');
     $this->create_field_mapping('testcustomfields', 'field_' . $fieldid9, '');
     $this->create_field_data($fieldid9, '<i>Test Text Two</i>');
     // Mock database record.
     $record = new stdClass();
     $record->userid = 200;
     $record->{'custom_field_' . $fieldid1} = 'option1';
     $record->{'custom_field_' . $fieldid2} = 'option2';
     $record->{'custom_field_' . $fieldid3} = '';
     $record->{'custom_field_' . $fieldid4} = 'option1';
     $record->{'custom_field_' . $fieldid5} = '';
     $record->{'custom_field_' . $fieldid6} = mktime(0, 0, 0, 7, 24, 2012);
     $record->{'custom_field_' . $fieldid7} = mktime(10, 20, 30, 7, 24, 2012);
     $record->{'custom_field_' . $fieldid8} = '<b>Test Text One</b>';
     $record->{'custom_field_' . $fieldid9} = '<i>Test Text Two</i>';
     // Perform Test.
     $enabledfields = rlipexport_version1elis_extrafields::get_enabled_fields();
     $fieldset = new rlipexport_version1elis_extrafieldset_testcustomfields($enabledfields['testcustomfields']);
     $data = $fieldset->get_data($record);
     // Verify Result.
     $expecteddata = array('field_' . $fieldid1 => 'option1', 'field_' . $fieldid2 => 'option2', 'field_' . $fieldid3 => 'option1 / option2', 'field_' . $fieldid4 => 'option1', 'field_' . $fieldid5 => 'option1', 'field_' . $fieldid6 => 'Jul/24/2012', 'field_' . $fieldid7 => 'Jul/24/2012:10:20', 'field_' . $fieldid8 => 'TEST TEXT ONE', 'field_' . $fieldid9 => '_Test Text Two_');
     $this->assertEquals($expecteddata, $data);
 }