merged fix for MDL-11111 number of search results is not always correct in the role...
authortoyomoyo <toyomoyo>
Fri, 7 Sep 2007 03:16:25 +0000 (03:16 +0000)
committertoyomoyo <toyomoyo>
Fri, 7 Sep 2007 03:16:25 +0000 (03:16 +0000)
admin/roles/assign.html
admin/roles/assign.php

index 2369b5d038ee7add23f356096e895e04d47bfb09..c987cbae14b018f9b9646a98d410faee3cb092d8 100755 (executable)
             if (!empty($searchtext)) {
                 echo "<optgroup label=\"$strsearchresults (" . $availableusers->_numOfRows . ")\">\n";
                 while ($user = rs_fetch_next_record($availableusers)) {
-                    if (!isset($contextusers[$user->id])) {
-                        $fullname = fullname($user, true);
-                        echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
-                        $i++;
-                    }
+                    $fullname = fullname($user, true);
+                    echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
+                    $i++;
                 }
                 echo "</optgroup>\n";
 
                           .'<optgroup label="'.get_string('trysearching').'"><option></option></optgroup>'."\n";
                 } else {
                     while ($user = rs_fetch_next_record($availableusers)) {
-                        if (!isset($contextusers[$user->id])) {
-                            $fullname = fullname($user, true);
-                            echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
-                            $i++;
-                        }
+                        $fullname = fullname($user, true);
+                        echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
+                        $i++;
                     }
                 }
             }
index 7cb22c5b2ad2fe723f4e6d1c6d839fba758e7b5d..c166444a3373ed20b49ba7255acac793887ab5c8 100755 (executable)
             $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 '<div style="text-align:center">'.$strcurrentcontext.': '.print_context_name($context).'<br/>';
         $assignableroles = array('0'=>get_string('listallroles', 'role').'...') + $assignableroles;