/** * 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); }