diff --git a/core/modules/views_ui/lib/Drupal/views_ui/Form/Ajax/Rearrange.php b/core/modules/views_ui/lib/Drupal/views_ui/Form/Ajax/Rearrange.php index 75c469f7bfe750f9bf05202152618cef8fa15b1e..170182bd8815994f0b203d5a26537d63824a5929 100644 --- a/core/modules/views_ui/lib/Drupal/views_ui/Form/Ajax/Rearrange.php +++ b/core/modules/views_ui/lib/Drupal/views_ui/Form/Ajax/Rearrange.php @@ -142,7 +142,7 @@ public function submitForm(array &$form, array &$form_state) { $new_fields = $order = array(); // Make an array with the weights - foreach ($form_state['values'] as $field => $info) { + foreach ($form_state['values']['fields'] as $field => $info) { // add each value that is a field with a weight to our list, but only if // it has had its 'removed' checkbox checked. if (is_array($info) && isset($info['weight']) && empty($info['removed'])) { diff --git a/core/modules/views_ui/lib/Drupal/views_ui/Tests/RearrangeFieldsTest.php b/core/modules/views_ui/lib/Drupal/views_ui/Tests/RearrangeFieldsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..e745ec53b8baea6de4db8a7a9e74b6264380a005 --- /dev/null +++ b/core/modules/views_ui/lib/Drupal/views_ui/Tests/RearrangeFieldsTest.php @@ -0,0 +1,85 @@ +<?php + +/** + * @file + * Contains \Drupal\views_ui\tests\RearrangeFieldsTest. + */ + +namespace Drupal\views_ui\Tests; + +/** + * Tests the reordering of fields via AJAX. + * + * @see \Drupal\views_ui\Form\Ajax\Rearrange + */ +class RearrangeFieldsTest extends UITestBase { + + /** + * Views used by this test. + * + * @var array + */ + public static $testViews = array('test_view'); + + public static function getInfo() { + return array( + 'name' => 'Rearrange fields', + 'description' => 'Tests the reordering of fields', + 'group' => 'Views UI', + ); + } + + /** + * Gets the fields from the View. + */ + protected function getViewFields($view_name = 'test_view', $display_id = 'default') { + $view = views_get_view($view_name); + $view->setDisplay($display_id); + $fields = array(); + foreach ($view->displayHandlers->get('default')->getHandlers('field') as $field => $handler) { + $fields[] = $field; + } + return $fields; + } + + /** + * Check if the fields are in the correct order. + * + * @param $view_name + * The name of the view. + * @param $fields + * Array of field names. + */ + protected function assertFieldOrder($view_name, $fields) { + $this->drupalGet('admin/structure/views/nojs/rearrange/' . $view_name . '/default/field'); + + foreach ($fields as $idx => $field) { + $this->assertFieldById('edit-fields-' . $field . '-weight', $idx + 1); + } + } + + /** + * Tests field sorting. + */ + public function testRearrangeFields() { + $view_name = 'test_view'; + + // Checks that the order on the rearrange form matches the creation order. + $this->assertFieldOrder($view_name, $this->getViewFields($view_name)); + + // Checks that a field is not deleted if a value is not passed back. + $fields = array(); + $this->drupalPost('admin/structure/views/nojs/rearrange/' . $view_name . '/default/field', $fields, t('Apply')); + $this->assertFieldOrder($view_name, $this->getViewFields($view_name)); + + // Checks that revers the new field order is respected. + $reversedFields = array_reverse($this->getViewFields($view_name)); + $fields = array(); + foreach ($reversedFields as $delta => $field) { + $fields['fields[' . $field . '][weight]'] = $delta; + } + $this->drupalPost('admin/structure/views/nojs/rearrange/' . $view_name . '/default/field', $fields, t('Apply')); + $this->assertFieldOrder($view_name, $reversedFields); + } + +}