From: Andrew Davis Date: Mon, 21 Dec 2009 08:13:50 +0000 (+0000) Subject: group MDL-20005 added display of other groups users are in X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=bf1ac6d9ae4932f6ddd62bfced948ac6cbe27978;p=moodle.git group MDL-20005 added display of other groups users are in --- diff --git a/group/clientlib.js b/group/clientlib.js index 2ab972424f..e1d61c7d92 100644 --- a/group/clientlib.js +++ b/group/clientlib.js @@ -202,6 +202,29 @@ var removeLoaderImgs = function (elClass, parentId) { } }; +function updateUserSummary() { + var selectEl = document.getElementById('addselect'); + var summaryDiv = document.getElementById('group-usersummary'); + var length = selectEl.length; + var selectCnt = 0; + var selectIdx = -1; + + for(i=0;iheader();

display(); ?> + +

+
+ @@ -126,6 +130,9 @@ echo $OUTPUT->header(); print_user_summaries($course->id); + //this must be after calling display() on the selectors so their setup JS executes first $PAGE->requires->js_function_call('init_add_remove_members_page'); diff --git a/user/selector/lib.php b/user/selector/lib.php index 8b1d3b4a81..0bbf0ed845 100644 --- a/user/selector/lib.php +++ b/user/selector/lib.php @@ -718,15 +718,78 @@ class group_members_selector extends groups_user_selector_base { /** * User selector subclass for the list of users who are not in a certain group. - * Used on the add group memebers page. + * Used on the add group members page. */ class group_non_members_selector extends groups_user_selector_base { const MAX_USERS_PER_PAGE = 100; + /** + * An array of user ids populated by find_users() used in print_user_summaries() + */ + private $potentialmembersids = array(); + public function output_user($user) { return parent::output_user($user) . ' (' . $user->numgroups . ')'; } + /** + * Outputs a Javascript array containing the other groups non-members are in. + * Used on the add group members page. + */ + public function print_user_summaries($courseid) { + global $DB; + + echo << +//potentialmembersids; + if( empty($potentialmembersids)==false ) { + list($membersidsclause, $params) = $DB->get_in_or_equal($potentialmembersids, SQL_PARAMS_NAMED, 'pm0'); + $sql = "SELECT u.id AS userid, g.* + FROM {user} u + JOIN {groups_members} gm ON u.id = gm.userid + JOIN {groups} g ON gm.groupid = g.id + WHERE u.id $membersidsclause AND g.courseid = :courseid "; + $params['courseid'] = $courseid; + if ($rs = $DB->get_recordset_sql($sql, $params)) { + foreach ($rs as $usergroup) { + $usergroups[$usergroup->userid][$usergroup->id] = $usergroup; + } + $rs->close(); + } + + $membercnt = count($potentialmembersids); + $i=1; + foreach ($potentialmembersids as $userid) { + if (isset($usergroups[$userid])) { + $usergrouplist = '
    '; + + foreach ($usergroups[$userid] as $groupitem) { + $usergrouplist .= '
  • '.addslashes_js(format_string($groupitem->name)).'
  • '; + } + $usergrouplist .= '
'; + } + else { + $usergrouplist = ''; + } + echo "'$usergrouplist'"; + if ($i < $membercnt) { + echo ', '; + } + $i++; + } + } +echo << + +END; + } + public function find_users($search) { global $DB; @@ -770,6 +833,19 @@ class group_non_members_selector extends groups_user_selector_base { $rs = $DB->get_recordset_sql($fields . $sql . $orderby, $params); $roles = groups_calculate_role_people($rs, $context); + //don't hold onto user IDs if we're doing validation + if( empty($this->validatinguserids) ) { + if($roles) { + foreach($roles as $k=>$v) { + if($v) { + foreach($v->users as $uid=>$userobject) { + $this->potentialmembersids[] = $uid; + } + } + } + } + } + return $this->convert_array_format($roles, $search); } }