From f7ded179bfd99260c96b946042a8af8ec82b3392 Mon Sep 17 00:00:00 2001 From: Alex Pott Date: Wed, 12 Jun 2013 16:43:42 +0100 Subject: [PATCH] Issue #2002506 by pcambra, JoshuaRogers: Fixed Rearranging fields and sorts causes existing items to be removed. --- .../Drupal/views_ui/Form/Ajax/Rearrange.php | 2 +- .../views_ui/Tests/RearrangeFieldsTest.php | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 core/modules/views_ui/lib/Drupal/views_ui/Tests/RearrangeFieldsTest.php 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 75c469f7bfe..170182bd881 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 @@ class Rearrange extends ViewsFormBase { $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 00000000000..e745ec53b8b --- /dev/null +++ b/core/modules/views_ui/lib/Drupal/views_ui/Tests/RearrangeFieldsTest.php @@ -0,0 +1,85 @@ + '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); + } + +}