MDL-35776 user ajax: fix sort order in chrome.

It seems that Chrome orders fields of objects in order of array key.
Therefore we must stop using user.id in the PHP arrays, and instead
ensure that we use sequential numbers.

This commit fixes the user selector.
This commit is contained in:
Tim Hunt 2012-10-03 18:46:07 +01:00
parent d91750bc5a
commit c62488c22f
2 changed files with 16 additions and 12 deletions

View file

@ -221,8 +221,9 @@ M.core_user.init_user_selector = function (Y, name, hash, extrafields, lastsearc
// Output each optgroup. // Output each optgroup.
var count = 0; var count = 0;
for (var groupname in data.results) { for (var key in data.results) {
this.output_group(groupname, data.results[groupname], selectedusers, true); var groupdata = data.results[key];
this.output_group(groupdata.name, groupdata.users, selectedusers, true);
count++; count++;
} }
if (!count) { if (!count) {
@ -248,14 +249,14 @@ M.core_user.init_user_selector = function (Y, name, hash, extrafields, lastsearc
output_group : function(groupname, users, selectedusers, processsingle) { output_group : function(groupname, users, selectedusers, processsingle) {
var optgroup = Y.Node.create('<optgroup></optgroup>'); var optgroup = Y.Node.create('<optgroup></optgroup>');
var count = 0; var count = 0;
for (var userid in users) { for (var key in users) {
var user = users[userid]; var user = users[key];
var option = Y.Node.create('<option value="'+userid+'">'+user.name+'</option>'); var option = Y.Node.create('<option value="'+user.id+'">'+user.name+'</option>');
if (user.disabled) { if (user.disabled) {
option.set('disabled', true); option.set('disabled', true);
} else if (selectedusers===true || selectedusers[userid]) { } else if (selectedusers===true || selectedusers[user.id]) {
option.set('selected', true); option.set('selected', true);
delete selectedusers[userid]; delete selectedusers[user.id];
} else { } else {
option.set('selected', false); option.set('selected', false);
} }

View file

@ -78,9 +78,11 @@ if (isset($options['file'])) {
$userselector = new $classname($name, $options); $userselector = new $classname($name, $options);
// Do the search and output the results. // Do the search and output the results.
$users = $userselector->find_users($search); $results = $userselector->find_users($search);
foreach ($users as &$group) { $json = array();
foreach ($group as $user) { foreach ($results as $groupname => $users) {
$groupdata = array('name' => $groupname, 'users' => array());
foreach ($users as $user) {
$output = new stdClass; $output = new stdClass;
$output->id = $user->id; $output->id = $user->id;
$output->name = $userselector->output_user($user); $output->name = $userselector->output_user($user);
@ -90,8 +92,9 @@ foreach ($users as &$group) {
if (!empty($user->infobelow)) { if (!empty($user->infobelow)) {
$output->infobelow = $user->infobelow; $output->infobelow = $user->infobelow;
} }
$group[$user->id] = $output; $groupdata['users'][] = $output;
} }
$json[] = $groupdata;
} }
echo json_encode(array('results' => $users)); echo json_encode(array('results' => $json));