/**
  * Given an array of Matrix data from a single field, maps it to its
  * correllating Grid field, column IDs and all
  *
  * @param	array	Database result array of Matrix data for a single field
  * @param	array	Associative array of Matrix column IDs to their respective
  *	Grid column IDs
  * @param	array	Array of original Matrix columns from Matrix importer's get_matrix_columns
  * @return	array	New Grid field data ready to be inserted into the field's table
  */
 public static function convertMatrixData($matrix_data, $matrix_to_grid_cols, $columns)
 {
     // Loop over the old data and map it to our new table and column IDs
     $grid_data = array();
     foreach ($matrix_data as $row) {
         $new_grid_row = array('row_id' => $row['row_id'], 'entry_id' => $row['entry_id'], 'row_order' => $row['row_order']);
         foreach ($matrix_to_grid_cols as $matrix_col_id => $grid_col_id) {
             // Some columns may have been omitted, like Playa columns
             if (array_key_exists('col_id_' . $matrix_col_id, $row)) {
                 // Decode original column settings in case we need to dig into
                 // column options
                 $col_settings = unserialize(base64_decode($columns[$matrix_col_id]['col_settings']));
                 $row_data = $row['col_id_' . $matrix_col_id];
                 // Options cells need their data converted into a different format
                 // in order to be read by native fieldtypes
                 if (in_array(self::mapColumnType($columns[$matrix_col_id]['col_type'], $col_settings), array('checkboxes', 'radio', 'select', 'multi_select'))) {
                     $row_data = OptionsCellConverter::convertData($row_data, $col_settings);
                 }
                 $new_grid_row['col_id_' . $grid_col_id] = $row_data;
             }
         }
         // Bring over Publisher data if present, too
         if (isset($row['publisher_lang_id']) && isset($row['publisher_status'])) {
             $new_grid_row['publisher_lang_id'] = $row['publisher_lang_id'];
             $new_grid_row['publisher_status'] = $row['publisher_status'];
         }
         $grid_data[] = $new_grid_row;
     }
     return $grid_data;
 }
 /**
  * Test OptionsCellConverter::convertData() method
  *
  * @dataProvider cellDataProvider
  */
 public function testDataConversion($expected, $data, $settings, $description)
 {
     $new_data = OptionsCellConverter::convertData($data, $settings);
     $this->assertEquals($expected, $new_data, $description);
 }