diff --git a/user/selector/lib.php b/user/selector/lib.php index 8812d93faeb..570b7f9bbf1 100644 --- a/user/selector/lib.php +++ b/user/selector/lib.php @@ -799,12 +799,26 @@ class group_non_members_selector extends groups_user_selector_base { * * Used by /group/clientlib.js * - * @global moodle_database $DB * @global moodle_page $PAGE * @param int $courseid */ public function print_user_summaries($courseid) { - global $DB, $PAGE; + global $PAGE; + $usersummaries = $this->get_user_summaries($courseid); + $PAGE->requires->data_for_js('userSummaries', $usersummaries); + } + + /** + * Construct HTML lists of group-memberships of the current set of users. + * + * Used in user/selector/search.php to repopulate the userSummaries JS global + * that is created in self::print_user_summaries() above. + * + * @param int $courseid The course + * @return string[] Array of HTML lists of groups. + */ + public function get_user_summaries($courseid) { + global $DB; $usersummaries = array(); @@ -838,8 +852,7 @@ class group_non_members_selector extends groups_user_selector_base { $usersummaries[] = $usergrouplist; } } - - $PAGE->requires->data_for_js('userSummaries', $usersummaries); + return $usersummaries; } /** diff --git a/user/selector/module.js b/user/selector/module.js index 6f6d4e3f612..061bc0456c5 100644 --- a/user/selector/module.js +++ b/user/selector/module.js @@ -179,6 +179,14 @@ M.core_user.init_user_selector = function (Y, name, hash, extrafields, lastsearc return new M.core.ajaxException(data); } this.output_options(data); + + // If updated userSummaries are present, overwrite the global variable + // that's output by group_non_members_selector::print_user_summaries() in user/selector/lib.php + if (typeof data.userSummaries !== "undefined") { + /* global userSummaries:true */ + /* exported userSummaries */ + userSummaries = data.userSummaries; + } } catch (e) { this.listbox.setStyle('background',''); this.searchfield.addClass('error'); diff --git a/user/selector/search.php b/user/selector/search.php index 9125d0b6ea1..38afc291d2d 100644 --- a/user/selector/search.php +++ b/user/selector/search.php @@ -61,7 +61,7 @@ $userselector = new $classname($name, $options); // Do the search and output the results. $results = $userselector->find_users($search); -$json = array(); +$jsonresults = array(); foreach ($results as $groupname => $users) { $groupdata = array('name' => $groupname, 'users' => array()); foreach ($users as $user) { @@ -76,7 +76,14 @@ foreach ($results as $groupname => $users) { } $groupdata['users'][] = $output; } - $json[] = $groupdata; + $jsonresults[] = $groupdata; } -echo json_encode(array('results' => $json)); +$json = array('results' => $jsonresults); + +// Also add users' group membership summaries, if possible. +if (is_callable(array($userselector, 'get_user_summaries')) && isset($options['courseid'])) { + $json['userSummaries'] = $userselector->get_user_summaries($options['courseid']); +} + +echo json_encode($json);