From 38b742768a99d3f11a0ec2339861711104050bda Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 9 Jan 2015 09:36:01 +0000 Subject: [PATCH] Issue #2397495 by geertvd, jhedstrom: Disabling 'Display all values in the same row' shows all values in all rows --- .../views/src/Plugin/views/field/Field.php | 6 +- .../src/Tests/Handler/FieldGroupRowsTest.php | 95 ++++++++++++++++ .../test_views/views.view.test_group_rows.yml | 104 ++++++++++++++++++ 3 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 core/modules/views/src/Tests/Handler/FieldGroupRowsTest.php create mode 100644 core/modules/views/tests/modules/views_test_config/test_views/views.view.test_group_rows.yml diff --git a/core/modules/views/src/Plugin/views/field/Field.php b/core/modules/views/src/Plugin/views/field/Field.php index 025ee0295075..678867736f18 100644 --- a/core/modules/views/src/Plugin/views/field/Field.php +++ b/core/modules/views/src/Plugin/views/field/Field.php @@ -739,7 +739,7 @@ public function getItems(ResultRow $values) { if (!$original_entity) { return array(); } - $entity = $this->process_entity($original_entity); + $entity = $this->process_entity($values, $original_entity); if (!$entity) { return array(); } @@ -781,13 +781,15 @@ public function getItems(ResultRow $values) { * Replaces values with aggregated values if aggregation is enabled. * Takes delta settings into account (@todo remove in #1758616). * + * @param \Drupal\views\ResultRow $values + * The result row object containing the values. * @param \Drupal\Core\Entity\EntityInterface $entity * The entity to be processed. * * @return * TRUE if the processing completed successfully, otherwise FALSE. */ - function process_entity(EntityInterface $entity) { + function process_entity(ResultRow $values, EntityInterface $entity) { $processed_entity = clone $entity; $langcode = $this->field_langcode($processed_entity); diff --git a/core/modules/views/src/Tests/Handler/FieldGroupRowsTest.php b/core/modules/views/src/Tests/Handler/FieldGroupRowsTest.php new file mode 100644 index 000000000000..9aedee202bfb --- /dev/null +++ b/core/modules/views/src/Tests/Handler/FieldGroupRowsTest.php @@ -0,0 +1,95 @@ +<?php + +/** + * @file + * Contains Drupal\views\Tests\Handler\FieldGroupRowsTest. + */ + +namespace Drupal\views\Tests\Handler; + +use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\views\Views; + +/** + * Tests the "Display all values in the same row" setting. + * + * @see \Drupal\views\Plugin\views\field\Field + * + * @group views + */ +class FieldGroupRowsTest extends HandlerTestBase { + + /** + * Views used by this test. + * + * @var array + */ + public static $testViews = array('test_group_rows', 'test_ungroup_rows'); + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('node', 'field_test'); + + /** + * Field that will be created to test the group/ungroup rows functionality + * + * @var string + */ + private $fieldName = 'field_group_rows'; + + protected function setUp() { + parent::setUp(); + + // Create content type with unlimited text field. + $node_type = $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page')); + + // Create the unlimited text field. + $field_storage = entity_create('field_storage_config', array( + 'field_name' => $this->fieldName, + 'entity_type' => 'node', + 'type' => 'text', + 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, + )); + $field_storage->save(); + + // Create an instance of the text field on the content type. + $field = array( + 'field_storage' => $field_storage, + 'bundle' => $node_type->type, + ); + entity_create('field_config', $field)->save(); + + $this->container->get('views.views_data')->clear(); + } + + /** + * Testing the "Grouped rows" functionality. + */ + public function testGroupRows() { + $edit = array( + 'title' => $this->randomMachineName(), + $this->fieldName => array('a', 'b', 'c'), + ); + $this->drupalCreateNode($edit); + + $view = Views::getView('test_group_rows'); + + // Test grouped rows. + $this->executeView($view); + $this->assertEqual($view->field[$this->fieldName]->advancedRender($view->result[0]), 'a, b, c'); + + // Change the group_rows checkbox to false. + $view = Views::getView('test_group_rows'); + $view->setHandlerOption('default', 'field', $this->fieldName, 'group_rows', FALSE); + + // Test ungrouped rows. + $this->executeView($view); + $this->assertEqual($view->field[$this->fieldName]->advancedRender($view->result[0]), 'a'); + $this->assertEqual($view->field[$this->fieldName]->advancedRender($view->result[1]), 'b'); + $this->assertEqual($view->field[$this->fieldName]->advancedRender($view->result[2]), 'c'); + } + +} diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_group_rows.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_group_rows.yml new file mode 100644 index 000000000000..e9781870b4ef --- /dev/null +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_group_rows.yml @@ -0,0 +1,104 @@ +langcode: und +status: true +dependencies: + module: + - field + - node +id: test_group_rows +label: test_group_rows +module: views +description: '' +tag: '' +base_table: node +base_field: nid +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: perm + cache: + type: none + query: + type: views_query + exposed_form: + type: basic + pager: + options: + items_per_page: 10 + type: full + style: + type: default + row: + type: fields + fields: + field_group_rows: + id: field_group_rows + table: node__field_group_rows + field: field_group_rows + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: true + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: '' + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: true + trim: true + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + click_sort_column: value + type: string + settings: + link_to_entity: '0' + group_column: value + group_columns: { } + group_rows: true + delta_limit: all + delta_offset: '0' + delta_reversed: false + delta_first_last: false + multi_type: separator + separator: ', ' + field_api_classes: false + plugin_id: field + field_langcode: '***LANGUAGE_language_content***' + field_langcode_add_to_query: null + display_extenders: { } -- GitLab