diff --git a/enrol/ajax.php b/enrol/ajax.php
index 8a0bdfc09a7..48b3fca31eb 100644
--- a/enrol/ajax.php
+++ b/enrol/ajax.php
@@ -54,9 +54,9 @@ echo $OUTPUT->header(); // send headers
$manager = new course_enrolment_manager($PAGE, $course);
-$outcome = new stdClass;
+$outcome = new stdClass();
$outcome->success = true;
-$outcome->response = new stdClass;
+$outcome->response = new stdClass();
$outcome->error = '';
switch ($action) {
@@ -99,6 +99,10 @@ switch ($action) {
$user->fullname = fullname($user);
unset($user->id);
}
+ // Chrome will display users in the order of the array keys, so we need
+ // to ensure that the results ordered array keys. Fortunately, the JavaScript
+ // does not care what the array keys are. It uses user.id where necessary.
+ $outcome->response['users'] = array_values($outcome->response['users']);
$outcome->success = true;
break;
default:
diff --git a/enrol/manual/ajax.php b/enrol/manual/ajax.php
index a9d5bb7f804..b599b95a552 100644
--- a/enrol/manual/ajax.php
+++ b/enrol/manual/ajax.php
@@ -53,9 +53,9 @@ echo $OUTPUT->header(); // send headers
$manager = new course_enrolment_manager($PAGE, $course);
-$outcome = new stdClass;
+$outcome = new stdClass();
$outcome->success = true;
-$outcome->response = new stdClass;
+$outcome->response = new stdClass();
$outcome->error = '';
switch ($action) {
@@ -79,6 +79,10 @@ switch ($action) {
}
$user->extrafields = implode(', ', $fieldvalues);
}
+ // Chrome will display users in the order of the array keys, so we need
+ // to ensure that the results ordered array keys. Fortunately, the JavaScript
+ // does not care what the array keys are. It uses user.id where necessary.
+ $outcome->response['users'] = array_values($outcome->response['users']);
$outcome->success = true;
break;
case 'enrol':
@@ -135,4 +139,4 @@ switch ($action) {
throw new enrol_ajax_exception('unknowajaxaction');
}
-echo json_encode($outcome);
\ No newline at end of file
+echo json_encode($outcome);
diff --git a/user/selector/module.js b/user/selector/module.js
index de2f500d804..120fb7865ef 100644
--- a/user/selector/module.js
+++ b/user/selector/module.js
@@ -221,8 +221,9 @@ M.core_user.init_user_selector = function (Y, name, hash, extrafields, lastsearc
// Output each optgroup.
var count = 0;
- for (var groupname in data.results) {
- this.output_group(groupname, data.results[groupname], selectedusers, true);
+ for (var key in data.results) {
+ var groupdata = data.results[key];
+ this.output_group(groupdata.name, groupdata.users, selectedusers, true);
count++;
}
if (!count) {
@@ -248,13 +249,14 @@ M.core_user.init_user_selector = function (Y, name, hash, extrafields, lastsearc
output_group : function(groupname, users, selectedusers, processsingle) {
var optgroup = Y.Node.create('');
var count = 0;
- for (var userid in users) {
- var user = users[userid];
- var option = Y.Node.create('');
+ for (var key in users) {
+ var user = users[key];
+ var option = Y.Node.create('');
if (user.disabled) {
option.set('disabled', true);
- } else if (selectedusers===true || selectedusers[userid]) {
+ } else if (selectedusers===true || selectedusers[user.id]) {
option.set('selected', true);
+ delete selectedusers[user.id];
} else {
option.set('selected', false);
}
diff --git a/user/selector/search.php b/user/selector/search.php
index fcaf74ec3bb..ab282749a76 100644
--- a/user/selector/search.php
+++ b/user/selector/search.php
@@ -78,17 +78,20 @@ if (isset($options['file'])) {
$userselector = new $classname($name, $options);
// Do the search and output the results.
-$users = $userselector->find_users($search);
-foreach ($users as &$group) {
- foreach ($group as $user) {
+$results = $userselector->find_users($search);
+$json = array();
+foreach ($results as $groupname => $users) {
+ $groupdata = array('name' => $groupname, 'users' => array());
+ foreach ($users as $user) {
$output = new stdClass;
$output->id = $user->id;
$output->name = $userselector->output_user($user);
if (!empty($user->disabled)) {
$output->disabled = true;
}
- $group[$user->id] = $output;
+ $groupdata['users'][] = $output;
}
+ $json[] = $groupdata;
}
-echo json_encode(array('results' => $users));
+echo json_encode(array('results' => $json));