From e13aebc3d701b30667d7df23edbff2ce2418a4f0 Mon Sep 17 00:00:00 2001 From: Patrick Nelson Date: Fri, 14 Aug 2015 18:10:58 -0400 Subject: [PATCH] FIX for #4502 Prevents JSON.parse() from scrambling sorted results from server-side. Conflicts: tests/forms/gridfield/GridFieldAddExistingAutocompleterTest.php --- forms/gridfield/GridFieldAddExistingAutocompleter.php | 7 ++++++- javascript/GridField.js | 4 +--- .../gridfield/GridFieldAddExistingAutocompleterTest.php | 6 +++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/forms/gridfield/GridFieldAddExistingAutocompleter.php b/forms/gridfield/GridFieldAddExistingAutocompleter.php index d4a2cf481..e4fac4521 100644 --- a/forms/gridfield/GridFieldAddExistingAutocompleter.php +++ b/forms/gridfield/GridFieldAddExistingAutocompleter.php @@ -218,7 +218,12 @@ class GridFieldAddExistingAutocompleter $originalSourceFileComments = Config::inst()->get('SSViewer', 'source_file_comments'); Config::inst()->update('SSViewer', 'source_file_comments', false); foreach($results as $result) { - $json[$result->ID] = html_entity_decode(SSViewer::fromString($this->resultsFormat)->process($result)); + $title = html_entity_decode(SSViewer::fromString($this->resultsFormat)->process($result)); + $json[] = array( + 'label' => $title, + 'value' => $title, + 'id' => $result->ID, + ); } Config::inst()->update('SSViewer', 'source_file_comments', $originalSourceFileComments); return Convert::array2json($json); diff --git a/javascript/GridField.js b/javascript/GridField.js index 5472547a8..f67467351 100644 --- a/javascript/GridField.js +++ b/javascript/GridField.js @@ -371,9 +371,7 @@ url: $(searchField).data('searchUrl'), data: encodeURIComponent(searchField.attr('name'))+'='+encodeURIComponent(searchField.val()), success: function(data) { - response( $.map(JSON.parse(data), function( name, id ) { - return { label: name, value: name, id: id }; - })); + response(JSON.parse(data)); }, error: function(e) { alert(ss.i18n._t('GRIDFIELD.ERRORINTRANSACTION', 'An error occured while fetching data from the server\n Please try again later.')); diff --git a/tests/forms/gridfield/GridFieldAddExistingAutocompleterTest.php b/tests/forms/gridfield/GridFieldAddExistingAutocompleterTest.php index a9f1b67e7..eedb89b3d 100644 --- a/tests/forms/gridfield/GridFieldAddExistingAutocompleterTest.php +++ b/tests/forms/gridfield/GridFieldAddExistingAutocompleterTest.php @@ -41,7 +41,11 @@ class GridFieldAddExistingAutocompleterTest extends FunctionalTest { $this->assertFalse($response->isError()); $result = Convert::json2array($response->getBody()); $this->assertEquals(1, count($result)); - $this->assertEquals(array($team2->ID => 'Team 2'), $result); + $this->assertEquals(array(array( + 'label' => 'Team 2', + 'value' => 'Team 2', + 'id' => $team2->ID, + )), $result); $response = $this->post( 'GridFieldAddExistingAutocompleterTest_Controller/Form/field/testfield/'