diff --git a/core/modules/system/src/Plugin/views/field/BulkForm.php b/core/modules/system/src/Plugin/views/field/BulkForm.php index f9f581b426cab96d5a845c6648fe8b206883d7ed..a2cfdd2583de2e6bbfa0982d2173fae2290b4e76 100644 --- a/core/modules/system/src/Plugin/views/field/BulkForm.php +++ b/core/modules/system/src/Plugin/views/field/BulkForm.php @@ -345,7 +345,8 @@ protected function getBulkOptions($filtered = TRUE) { public function viewsFormSubmit(&$form, FormStateInterface $form_state) { if ($form_state->get('step') == 'views_form_views_form') { // Filter only selected checkboxes. - $selected = array_filter($form_state->getValue($this->options['id'])); + $user_input = $form_state->getUserInput(); + $selected = array_filter($user_input[$this->options['id']]); $entities = array(); $action = $this->actions[$form_state->getValue('action')]; $count = 0; diff --git a/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php b/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php new file mode 100644 index 0000000000000000000000000000000000000000..fd988895349f9234cbefc978c5830657f1714001 --- /dev/null +++ b/core/modules/views/src/Tests/Plugin/ViewsBulkTest.php @@ -0,0 +1,85 @@ +<?php + +namespace Drupal\views\Tests\Plugin; + +use Drupal\simpletest\WebTestBase; + +/** + * Tests views bulk operation selection. + * + * @group views + */ +class ViewsBulkTest extends WebTestBase { + + /** + * An admin user + * + * @var \Drupal\user\UserInterface + */ + protected $admin_user; + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('node', 'views'); + + public function setUp() { + parent::setUp(); + + $this->drupalCreateContentType(['type' => 'page']); + $this->admin_user = $this->createUser(['bypass node access', 'administer nodes', 'access content overview']); + } + + /** + * Tests bulk selection. + */ + public function testBulkSelection() { + + // Create first node, set updated time to the past. + $node_1 = $this->drupalCreateNode([ + 'type' => 'page', + 'title' => 'The first node', + 'changed' => \Drupal::time()->getRequestTime() - 180 + ]); + + // Login as administrator and go to admin/content. + $this->drupalLogin($this->admin_user); + $this->drupalGet('admin/content'); + $this->assertText($node_1->getTitle()); + + // Create second node now that the admin overview has been rendered. + $node_2 = $this->drupalCreateNode([ + 'type' => 'page', + 'title' => 'The second node', + 'changed' => \Drupal::time()->getRequestTime() - 120 + ]); + + // Now click 'Apply to selected items' and assert the first node is selected + // on the confirm form. + $this->drupalPostForm(NULL, ['node_bulk_form[0]' => TRUE], 'Apply to selected items'); + $this->assertText($node_1->getTitle()); + $this->assertNoText($node_2->getTitle()); + + // Change the pager limit to 2. + $this->config('views.view.content')->set('display.default.display_options.pager.options.items_per_page', 2)->save(); + $this->drupalGet('admin/content'); + + // Render the overview page again. + $this->drupalGet('admin/content'); + + // Create third node now that the admin overview has been rendered. + $node_3 = $this->drupalCreateNode([ + 'type' => 'page', + 'title' => 'The third node'] + ); + + // Now click 'Apply to selected items' and assert the second node is + // selected on the confirm form. + $this->drupalPostForm(NULL, ['node_bulk_form[1]' => TRUE], 'Apply to selected items'); + $this->assertText($node_1->getTitle()); + $this->assertNoText($node_3->getTitle()); + } + +}