Skip to content

Commit

Permalink
group MDL-20005 added display of other groups users are in
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew Davis committed Dec 21, 2009
1 parent 334f9db commit bf1ac6d
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 1 deletion.
26 changes: 26 additions & 0 deletions group/clientlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;i<length;i++) {
if (selectEl.options[i].selected) {
selectCnt++;
selectIdx = i;
}
}

if (selectCnt == 1 && userSummaries[selectIdx]) {
summaryDiv.innerHTML = userSummaries[selectIdx];
} else {
summaryDiv.innerHTML = '';
}

return(true);
}

function init_add_remove_members_page() {
var addselect = user_selector.get('addselect');
document.getElementById('add').disabled = addselect.is_selection_empty();
Expand All @@ -214,4 +237,7 @@ function init_add_remove_members_page() {
removeselect.subscribe('selectionchanged', function(isempty) {
document.getElementById('remove').disabled = isempty;
});

addselect = document.getElementById('addselect');
addselect.onchange = updateUserSummary;
}
7 changes: 7 additions & 0 deletions group/members.php
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@
</p>
<?php $potentialmembersselector->display(); ?>
</td>
<td>
<p><?php echo($strusergroupmembership) ?></p>
<div id="group-usersummary"></div>
</td>
</tr>
<tr><td colspan="3" id='backcell'>
<input type="submit" name="cancel" value="<?php print_string('backtogroups', 'group'); ?>" />
Expand All @@ -126,6 +130,9 @@
</div>

<?php
//outputs the JS array used to display the other groups users are in
$potentialmembersselector->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');

Expand Down
78 changes: 77 additions & 1 deletion user/selector/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -718,15 +718,78 @@ public function find_users($search) {

/**
* 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 <<<END
<script type="text/javascript">
//<![CDATA[
var userSummaries = Array(
END;
// Get other groups user already belongs to
$usergroups = array();
$potentialmembersids = $this->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 = '<ul>';

foreach ($usergroups[$userid] as $groupitem) {
$usergrouplist .= '<li>'.addslashes_js(format_string($groupitem->name)).'</li>';
}
$usergrouplist .= '</ul>';
}
else {
$usergrouplist = '';
}
echo "'$usergrouplist'";
if ($i < $membercnt) {
echo ', ';
}
$i++;
}
}
echo <<<END
);
//]]>
</script>
END;
}

public function find_users($search) {
global $DB;

Expand Down Expand Up @@ -770,6 +833,19 @@ public function find_users($search) {
$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);
}
}

0 comments on commit bf1ac6d

Please sign in to comment.