diff --git a/core/modules/views/src/Form/ViewsExposedForm.php b/core/modules/views/src/Form/ViewsExposedForm.php index 173dd776fc2..e9d5fa4f410 100644 --- a/core/modules/views/src/Form/ViewsExposedForm.php +++ b/core/modules/views/src/Form/ViewsExposedForm.php @@ -183,7 +183,7 @@ class ViewsExposedForm extends FormBase { // https://www.drupal.org/node/342316 is resolved. $checked = Checkboxes::getCheckedCheckboxes($value); foreach ($checked as $option_id) { - $view->exposed_raw_input[$key][] = $value[$option_id]; + $view->exposed_raw_input[$key][$option_id] = $value[$option_id]; } } else { diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_pager.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_pager.yml new file mode 100644 index 00000000000..3cfb569cd16 --- /dev/null +++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_exposed_form_pager.yml @@ -0,0 +1,173 @@ +langcode: en +status: true +dependencies: + config: + - core.entity_view_mode.node.teaser + module: + - node +id: test_exposed_form_pager +label: '' +module: views +description: '' +tag: '' +base_table: node_field_data +base_field: nid +core: '8' +display: + default: + display_options: + access: + type: none + cache: + type: tag + exposed_form: + options: + reset_button: true + type: basic + filters: + type: + id: type + table: node_field_data + field: type + relationship: none + group_type: group + admin_label: '' + operator: in + value: { } + group: 1 + exposed: true + expose: + operator_id: type_op + label: 'Content: Type' + description: 'Exposed description' + use_operator: false + operator: '' + identifier: type + required: false + remember: false + multiple: true + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + reduce: false + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + plugin_id: in_operator + entity_type: node + entity_field: type + created: + id: created + table: node_field_data + field: created + relationship: none + group_type: group + admin_label: '' + operator: between + value: + min: '' + max: '' + value: '' + type: offset + group: 1 + exposed: true + expose: + operator_id: created_op + label: 'Authored on' + description: '' + use_operator: false + operator: created_op + identifier: created + required: false + remember: false + multiple: false + remember_roles: + authenticated: authenticated + anonymous: '0' + administrator: '0' + placeholder: '' + min_placeholder: '' + max_placeholder: '' + is_grouped: false + group_info: + label: '' + description: '' + identifier: '' + optional: true + widget: select + multiple: false + remember: false + default_group: All + default_group_multiple: { } + group_items: { } + entity_type: node + entity_field: created + plugin_id: date + pager: + type: full + options: + items_per_page: 2 + offset: 0 + id: 0 + total_pages: null + tags: + previous: '‹ Previous' + next: 'Next ›' + first: '« First' + last: 'Last »' + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + quantity: 9 + query: + options: + query_comment: '' + type: views_query + style: + type: default + row: + type: 'entity:node' + display_extenders: { } + display_plugin: default + display_title: Master + id: default + position: 0 + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - 'user.node_grants:view' + tags: { } + page_1: + display_options: + path: test_exposed_form_pager + display_extenders: { } + display_plugin: page + display_title: Page + id: page_1 + position: 0 + cache_metadata: + max-age: -1 + contexts: + - 'languages:language_interface' + - url + - url.query_args + - 'user.node_grants:view' + tags: { } diff --git a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php index 8f77fd4f583..53a0e4dda7e 100644 --- a/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php +++ b/core/modules/views/tests/src/Functional/Plugin/ExposedFormTest.php @@ -24,7 +24,7 @@ class ExposedFormTest extends ViewTestBase { * * @var array */ - public static $testViews = ['test_exposed_form_buttons', 'test_exposed_block', 'test_exposed_form_sort_items_per_page']; + public static $testViews = ['test_exposed_form_buttons', 'test_exposed_block', 'test_exposed_form_sort_items_per_page', 'test_exposed_form_pager']; /** * Modules to enable. @@ -381,4 +381,32 @@ class ExposedFormTest extends ViewTestBase { $this->assertRaw('
', 'Views result shown.'); } + /** + * Tests the exposed form with a pager. + */ + public function testExposedFilterPagination() { + $this->drupalCreateContentType(['type' => 'post']); + // Create some random nodes. + for ($i = 0; $i < 5; $i++) { + $this->drupalCreateNode(['type' => 'post']); + } + + $this->drupalGet('test_exposed_form_pager'); + $this->getSession()->getPage()->fillField('type[]', 'post'); + $this->getSession()->getPage()->fillField('created[min]', '-1 month'); + $this->getSession()->getPage()->fillField('created[max]', '+1 month'); + + // Ensure the filters can be applied. + $this->getSession()->getPage()->pressButton('Apply'); + $this->assertFieldByName('type[]', 'post'); + $this->assertFieldByName('created[min]', '-1 month'); + $this->assertFieldByName('created[max]', '+1 month'); + + // Ensure the filters are still applied after pressing next. + $this->clickLink('Next ›'); + $this->assertFieldByName('type[]', 'post'); + $this->assertFieldByName('created[min]', '-1 month'); + $this->assertFieldByName('created[max]', '+1 month'); + } + } diff --git a/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php b/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php index aa7b3cb3358..8cde0897ebd 100644 --- a/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php +++ b/core/modules/views/tests/src/Kernel/Plugin/ExposedFormRenderTest.php @@ -136,7 +136,7 @@ class ExposedFormRenderTest extends ViewsKernelTestBase { $expected = [ 'type' => 'All', 'type_with_default_value' => 'article', - 'multiple_types_with_default_value' => ['article'], + 'multiple_types_with_default_value' => ['article' => 'article'], ]; $this->assertSame($view->exposed_raw_input, $expected); }