/**
  * Test MatrixConverter::convertMatrixColumns() method
  *
  * @dataProvider columnDataProvider
  */
 public function testColumnConversion($expected, $columns, $field_id, $description)
 {
     $grid_fieldtypes = array('checkboxes', 'date', 'file', 'multi_select', 'radio', 'select', 'text', 'textarea', 'rte');
     $new_columns = MatrixConverter::convertMatrixColumns($columns, $grid_fieldtypes, $field_id);
     foreach ($new_columns as $col_id => $value) {
         unset($new_columns[$col_id]['col_settings']);
     }
     $this->assertEquals($expected, $new_columns, $description);
 }
 /**
  * Performs the full import of all Matrix channel fields into native Grid fields
  *
  * @return	array	Array of new Grid field IDs
  */
 public function do_import()
 {
     ee()->load->library('pm_import_common');
     $matricies = $this->get_matrix_fields();
     $columns = $this->get_matrix_columns();
     // Load Grid package so we can get a list of Grid compatible fieldtypes
     ee()->load->add_package_path(PATH_FT . 'grid/');
     ee()->load->library('grid_lib');
     $grid_fieldtypes = array_keys(ee()->grid_lib->get_grid_fieldtypes());
     ee()->load->remove_package_path(PATH_FT . 'grid/');
     ee()->load->library('api');
     ee()->api->instantiate('channel_fields');
     ee()->load->model('grid_model');
     ee()->load->model('addons_model');
     $original_site_id = ee()->config->item('site_id');
     // We'll keep track of the mapping of Matrix fields and columns to their
     // corresponding new Grid fields and columns here
     $matrix_to_grid_fields = array();
     $matrix_to_grid_cols = array();
     foreach ($matricies as $matrix) {
         // Let's be explicit about what's making up this new field
         $new_grid_field = array('site_id' => $matrix['site_id'], 'group_id' => $matrix['group_id'], 'field_label' => $matrix['field_label'], 'field_name' => ee()->pm_import_common->get_unique_field_name($matrix['field_name'], '_grid', $matrix['site_id']), 'field_type' => 'grid', 'field_instructions' => $matrix['field_instructions'], 'field_required' => $matrix['field_required'], 'field_search' => $matrix['field_search'], 'field_order' => 0);
         // Hack to prevent errors from showing from Grid_lib when we create the field
         $_POST['grid']['cols'] = array();
         // Hack to prevent site ID mismatch error in API channel fields
         ee()->config->config['site_id'] = $new_grid_field['site_id'];
         $field_id = ee()->api_channel_fields->update_field($new_grid_field);
         // Reset the hack
         ee()->config->config['site_id'] = $original_site_id;
         $new_field_settings = MatrixConverter::convertSettings(unserialize(base64_decode($matrix['field_settings'])));
         // Set new field settings from converted Matrix settings
         ee()->db->set('field_settings', base64_encode(serialize($new_field_settings)))->where('field_id', $field_id)->update('channel_fields');
         $new_columns = MatrixConverter::convertMatrixColumns($columns[$matrix['field_id']], $grid_fieldtypes, $field_id);
         // Create new columns and gather new column IDs to map to old columns
         $new_column_ids = array();
         $playa_columns = array();
         foreach ($new_columns as $matrix_col_id => $column) {
             $col_id = ee()->grid_model->save_col_settings($column);
             // Create mapping from old columns to new
             $matrix_to_grid_cols[$matrix_col_id] = $col_id;
             $new_column_ids[$matrix_col_id] = $col_id;
             // Collect Playa cell IDs so we know not to import the data in those,
             // we don't need to store anything about relationships in the Grid
             // field table
             if ($column['col_type'] == 'relationship') {
                 $playa_columns[] = $matrix_col_id;
             }
         }
         $matrix_data = $this->get_matrix_data($new_column_ids, $matrix['field_id'], $playa_columns);
         $new_data = MatrixConverter::convertMatrixData($matrix_data, $new_column_ids, $columns[$matrix['field_id']]);
         // Add Publisher fields if installed
         if (ee()->addons_model->module_installed('publisher')) {
             ee()->pm_import_common->add_publisher_columns('channel_grid_field_' . $field_id);
         }
         // Fill Grid field with new data
         if (!empty($new_data)) {
             ee()->db->insert_batch('channel_grid_field_' . $field_id, $new_data);
         }
         $matrix_to_grid_fields[$matrix['field_id']] = $field_id;
     }
     // Import Playa data for Grid columns
     $this->import_playa_data($matrix_to_grid_fields, $matrix_to_grid_cols);
     // Import Assets data
     $this->import_assets_data($matrix_to_grid_fields, $matrix_to_grid_cols);
     // For columns marked as searchable, copy their searchable text over
     // to the new Grid fields=
     $this->import_searchable_data($matrix_to_grid_fields);
     return array_values($matrix_to_grid_fields);
 }