From 694d100512e2e5c0baeda1ddbda6cebc230ac9fd Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Fri, 7 Sep 2007 03:16:25 +0000 Subject: [PATCH] merged fix for MDL-11111 number of search results is not always correct in the role assignment view --- admin/roles/assign.html | 16 ++++++---------- admin/roles/assign.php | 23 +++++++++++++++++------ 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/admin/roles/assign.html b/admin/roles/assign.html index 2369b5d038e..c987cbae14b 100755 --- a/admin/roles/assign.html +++ b/admin/roles/assign.html @@ -63,11 +63,9 @@ if (!empty($searchtext)) { echo "_numOfRows . ")\">\n"; while ($user = rs_fetch_next_record($availableusers)) { - if (!isset($contextusers[$user->id])) { - $fullname = fullname($user, true); - echo "\n"; - $i++; - } + $fullname = fullname($user, true); + echo "\n"; + $i++; } echo "\n"; @@ -77,11 +75,9 @@ .''."\n"; } else { while ($user = rs_fetch_next_record($availableusers)) { - if (!isset($contextusers[$user->id])) { - $fullname = fullname($user, true); - echo "\n"; - $i++; - } + $fullname = fullname($user, true); + echo "\n"; + $i++; } } } diff --git a/admin/roles/assign.php b/admin/roles/assign.php index 7cb22c5b2ad..c166444a337 100755 --- a/admin/roles/assign.php +++ b/admin/roles/assign.php @@ -277,15 +277,26 @@ $LIKE = sql_ilike(); $FULLNAME = sql_fullname(); - $select .= " AND ($FULLNAME $LIKE '%$searchtext%' OR email $LIKE '%$searchtext%') "; + $selectsql = " AND ($FULLNAME $LIKE '%$searchtext%' OR email $LIKE '%$searchtext%') "; + $select .= $selectsql; + } else { + $selectsql = ""; } + /// MDL-11111 do not include user already assigned this role in this context as available users + /// so that the number of available users is right and we save time looping later $availableusers = get_recordset_sql('SELECT id, firstname, lastname, email - FROM '.$CFG->prefix.'user - WHERE '.$select.' - ORDER BY lastname ASC, firstname ASC'); - - /// In the .html file below we loop through these results and exclude any in $contextusers + FROM '.$CFG->prefix.'user + WHERE '.$select.' + AND id NOT IN ( + SELECT u.id + FROM '.$CFG->prefix.'role_assignments r, + '.$CFG->prefix.'user u + WHERE r.contextid = '.$contextid.' + AND u.id = r.userid + AND r.roleid = '.$roleid.' + '.$selectsql.') + ORDER BY lastname ASC, firstname ASC'); echo '
'.$strcurrentcontext.': '.print_context_name($context).'
'; $assignableroles = array('0'=>get_string('listallroles', 'role').'...') + $assignableroles;