MDL-8096 - user edit form splitting, refactoring, cleanup and fixing - work in progre...
[moodle.git] / admin / user.php
index 5d74bc5..2fe06de 100644 (file)
@@ -3,7 +3,6 @@
     require_once('../config.php');
     require_once($CFG->libdir.'/adminlib.php');
 
-    $newuser      = optional_param('newuser', 0, PARAM_BOOL);
     $delete       = optional_param('delete', 0, PARAM_INT);
     $confirm      = optional_param('confirm', '', PARAM_ALPHANUM);   //md5 confirmation hash
     $confirmuser  = optional_param('confirmuser', 0, PARAM_INT);
@@ -18,6 +17,9 @@
     $lu           = optional_param('lu', '2', PARAM_INT);            // show local users
     $acl          = optional_param('acl', '0', PARAM_INT);           // id of user to tweak mnet ACL (requires $access)
 
+    $adminroot = admin_get_root();
+    admin_externalpage_setup('editusers', $adminroot);
+
     // Let's see if we have *any* mnet users. Just ask for a single record
     $mnet_users = get_records_select('user', " auth='mnet' AND mnethostid != '{$CFG->mnet_localhost_id}' ", '', '*', '0', '1');
     if(is_array($mnet_users) && count($mnet_users) > 0) {
         }
     }
 
-    if (!$sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID)) {  // Should never happen
-        redirect('index.php');
+    $sitecontext = get_context_instance(CONTEXT_SYSTEM, SITEID);
+    $site = get_site();
+
+    if (!has_capability('moodle/user:update', $sitecontext) and !has_capability('moodle/user:delete', $sitecontext)) {
+        error('You do not have the required permission to edit/delete users.');
     }
 
-    if (empty($CFG->rolesactive)) {   // No admin user yet.
-
-        $user = new object();
-        $user->firstname    = get_string('admin');
-        $user->lastname     = get_string('user');
-        $user->username     = 'admin';
-        $user->password     = hash_internal_user_password('admin');
-        $user->email        = 'root@localhost';
-        $user->confirmed    = 1;
-        $user->mnethostid   = $CFG->mnet_localhost_id;
-        $user->lang         = $CFG->lang;
-        $user->maildisplay  = 1;
-        $user->timemodified = time();
-
-        if (! $user->id = insert_record('user', $user)) {
-            error("SERIOUS ERROR: Could not create admin user record !!!");
-        }
+    $stredit   = get_string('edit');
+    $strdelete = get_string('delete');
+    $strdeletecheck = get_string('deletecheck');
+    $strsearch = get_string('search');
+    $strshowallusers = get_string('showallusers');
 
-        if (! $user = get_record('user', 'id', $user->id)) {   // Double check.
-            error("User ID was incorrect (can't find it)");
-        }
+    admin_externalpage_print_header($adminroot);
 
-
-        // Assign the default admin role to the new user.
-        if (!$adminroles = get_roles_with_capability('moodle/legacy:admin', CAP_ALLOW)) {
-            error('No admin role could be found');
-        }
-        foreach ($adminroles as $adminrole) {
-            role_assign($adminrole->id, $user->id, 0, $sitecontext->id);
+    if ($confirmuser and confirm_sesskey()) {
+        if (!$user = get_record('user', 'id', $confirmuser)) {
+            error("No such user!");
         }
-        set_config('rolesactive', 1);
 
+        $confirmeduser = new object();
+        $confirmeduser->id = $confirmuser;
+        $confirmeduser->confirmed = 1;
+        $confirmeduser->timemodified = time();
 
-        if (! $site = get_site()) {
-            error("Could not find site-level course");
+        if (update_record('user', $confirmeduser)) {
+            notify(get_string('userconfirmed', '', fullname($user, true)) );
+        } else {
+            notify(get_string('usernotconfirmed', '', fullname($user, true)));
         }
 
-        // Log the user in.
-        $USER = $user;
-        $USER->loggedin = true;
-        $USER->sessionIP = md5(getremoteaddr());   // Store the current IP in the session
-        $USER->site = $CFG->wwwroot;
-        $USER->admin = true;
-        $USER->newadminuser = true;
-
-        sesskey();   // For added security, used to check script parameters
+    } else if ($delete and confirm_sesskey()) {              // Delete a selected user, after confirmation
 
-        load_all_capabilities();
-
-        redirect("$CFG->wwwroot/user/edit.php?id=$user->id&course=$site->id");  // Edit thyself
-        exit;
-
-    } else {
-        if (! $site = get_site()) {
-            error("Could not find site-level course");
+        if (!has_capability('moodle/user:delete', $sitecontext)) {
+            error('You do not have the required permission to delete a user.');
         }
-    }
-
-    require_login();
-
-    $adminroot = admin_get_root();
-
-    if ($newuser) {
-        admin_externalpage_setup('addnewuser', $adminroot);
-    } else {
-        admin_externalpage_setup('editusers', $adminroot);
-    }
-
 
-    if ($newuser) {                 // Create a new user
+        if (!$user = get_record('user', 'id', $delete)) {
+            error("No such user!");
+        }
 
-        if (!has_capability('moodle/user:create', $sitecontext)) {
-            error('You do not have the required permission to create new users.');
+        $primaryadmin = get_admin();
+        if ($user->id == $primaryadmin->id) {
+            error("You are not allowed to delete the primary admin user!");
         }
 
-        if (!$user = get_record('user', 'username', 'changeme')) {   // half finished user from another time
-
-            $user = new object();
-            $user->auth         = 'manual';
-            $user->firstname    = '';
-            $user->lastname     = '';
-            $user->username     = 'changeme';
-            $user->password     = '';
-            $user->email        = '';
-            $user->lang         = $CFG->lang;
-            $user->confirmed    = 1;
-            $user->timemodified = time();
-            $user->mnethostid   = $CFG->mnet_localhost_id;
-
-            if (! $user->id = insert_record('user', $user)) {
-                error('Could not start a new user!');
+        if ($confirm != md5($delete)) {
+            $fullname = fullname($user, true);
+            print_heading(get_string('deleteuser', 'admin'));
+            $optionsyes = array('delete'=>$delete, 'confirm'=>md5($delete), 'sesskey'=>sesskey());
+            notice_yesno(get_string('deletecheckfull', '', "'$fullname'"), 'user.php', 'user.php', $optionsyes, NULL, 'post', 'get');
+            admin_externalpage_print_footer($adminroot);
+            die;
+        } else if (data_submitted() and !$user->deleted) {
+            $updateuser = new object();
+            $updateuser->id = $user->id;
+            $updateuser->deleted = 1;
+            $updateuser->username = addslashes("$user->email.".time());  // Remember it just in case
+            $updateuser->email = '';               // Clear this field to free it up
+            $updateuser->idnumber = '';               // Clear this field to free it up
+            $updateuser->timemodified = time();
+            if (update_record('user', $updateuser)) {
+                // not sure if this is needed. unenrol_student($user->id);  // From all courses
+                delete_records('role_assignments', 'userid', $user->id); // unassign all roles
+                // remove all context assigned on this user?
+                notify(get_string('deletedactivity', '', fullname($user, true)) );
+            } else {
+                notify(get_string('deletednot', '', fullname($user, true)));
             }
         }
-
-        redirect("$CFG->wwwroot/user/edit.php?id=$user->id&course=$site->id");
-
-    } else {                        // List all users for editing
-
-        if (!has_capability('moodle/user:update', $sitecontext) and !has_capability('moodle/user:delete', $sitecontext)) {
-            error('You do not have the required permission to edit/delete users.');
+    } else if ($acl and confirm_sesskey()) {
+        if (!has_capability('moodle/user:delete', $sitecontext)) {
+            // TODO: this should be under a separate capability
+            error('You are not permitted to modify the MNET access control list.');
         }
-
-        $stredit   = get_string('edit');
-        $strdelete = get_string('delete');
-        $strdeletecheck = get_string('deletecheck');
-        $strsearch = get_string('search');
-        $strshowallusers = get_string('showallusers');
-
-        admin_externalpage_print_header($adminroot);
-
-        if ($confirmuser and confirm_sesskey()) {
-            if (!$user = get_record('user', 'id', $confirmuser)) {
-                error("No such user!");
-            }
-
-            $confirmeduser = new object();
-            $confirmeduser->id = $confirmuser;
-            $confirmeduser->confirmed = 1;
-            $confirmeduser->timemodified = time();
-
-            if (update_record('user', $confirmeduser)) {
-                notify(get_string('userconfirmed', '', fullname($user, true)) );
-            } else {
-                notify(get_string('usernotconfirmed', '', fullname($user, true)));
+        if (!$user = get_record('user', 'id', $acl)) {
+            error("No such user.");
+        }
+        if (!is_mnet_remote_user($user)) {
+            error('Users in the MNET access control list must be remote MNET users.');
+        }
+        $accessctrl = strtolower(required_param('accessctrl', PARAM_ALPHA));
+        if ($accessctrl != 'allow' and $accessctrl != 'deny') {
+            error('Invalid access parameter.');
+        }
+        $aclrecord = get_record('mnet_sso_access_control', 'username', $user->username, 'mnet_host_id', $user->mnethostid);
+        if (empty($aclrecord)) {
+            $aclrecord = new object();
+            $aclrecord->mnet_host_id = $user->mnethostid;
+            $aclrecord->username = $user->username;
+            $aclrecord->accessctrl = $accessctrl;
+            if (!insert_record('mnet_sso_access_control', $aclrecord)) {
+                error("Database error - Couldn't modify the MNET access control list.");
             }
-
-        } else if ($delete and confirm_sesskey()) {              // Delete a selected user, after confirmation
-
-            if (!has_capability('moodle/user:delete', $sitecontext)) {
-                error('You do not have the required permission to delete a user.');
+        } else {
+            $aclrecord->accessctrl = $accessctrl;
+            if (!update_record('mnet_sso_access_control', $aclrecord)) {
+                error("Database error - Couldn't modify the MNET access control list.");
             }
+        }
+        $mnethosts = get_records('mnet_host', '', '', 'id', 'id,wwwroot,name');
+        notify("MNET access control list updated: username '$user->username' from host '"
+                . $mnethosts[$user->mnethostid]->name
+                . "' access now set to '$accessctrl'.");
+    }
 
-            if (!$user = get_record('user', 'id', $delete)) {
-                error("No such user!");
-            }
+    // Carry on with the user listing
 
-            $primaryadmin = get_admin();
-            if ($user->id == $primaryadmin->id) {
-                error("You are not allowed to delete the primary admin user!");
-            }
+    $columns = array("firstname", "lastname", "email", "city", "country", "lastaccess");
 
-            if ($confirm != md5($delete)) {
-                $fullname = fullname($user, true);
-                print_heading(get_string('deleteuser', 'admin'));
-                $optionsyes = array('delete'=>$delete, 'confirm'=>md5($delete), 'sesskey'=>sesskey());
-                notice_yesno(get_string('deletecheckfull', '', "'$fullname'"), 'user.php', 'user.php', $optionsyes, NULL, 'post', 'get');
-                admin_externalpage_print_footer($adminroot);
-                die;
-            } else if (data_submitted() and !$user->deleted) {
-                $updateuser = new object();
-                $updateuser->id = $user->id;
-                $updateuser->deleted = 1;
-                $updateuser->username = addslashes("$user->email.".time());  // Remember it just in case
-                $updateuser->email = '';               // Clear this field to free it up
-                $updateuser->idnumber = '';               // Clear this field to free it up
-                $updateuser->timemodified = time();
-                if (update_record('user', $updateuser)) {
-                    // not sure if this is needed. unenrol_student($user->id);  // From all courses
-                    delete_records('role_assignments', 'userid', $user->id); // unassign all roles
-                    // remove all context assigned on this user?
-                    notify(get_string('deletedactivity', '', fullname($user, true)) );
-                } else {
-                    notify(get_string('deletednot', '', fullname($user, true)));
-                }
-            }
-        } else if ($acl and confirm_sesskey()) {
-            if (!has_capability('moodle/user:delete', $sitecontext)) {
-                // TODO: this should be under a separate capability
-                error('You are not permitted to modify the MNET access control list.');
-            }
-            if (!$user = get_record('user', 'id', $acl)) {
-                error("No such user.");
-            }
-            if (!is_mnet_remote_user($user)) {
-                error('Users in the MNET access control list must be remote MNET users.');
-            }
-            $accessctrl = strtolower(required_param('accessctrl', PARAM_ALPHA));
-            if ($accessctrl != 'allow' and $accessctrl != 'deny') {
-                error('Invalid access parameter.');
+    foreach ($columns as $column) {
+        $string[$column] = get_string("$column");
+        if ($sort != $column) {
+            $columnicon = "";
+            if ($column == "lastaccess") {
+                $columndir = "DESC";
+            } else {
+                $columndir = "ASC";
             }
-            $aclrecord = get_record('mnet_sso_access_control', 'username', $user->username, 'mnet_host_id', $user->mnethostid);
-            if (empty($aclrecord)) {
-                $aclrecord = new object();
-                $aclrecord->mnet_host_id = $user->mnethostid;
-                $aclrecord->username = $user->username;
-                $aclrecord->accessctrl = $accessctrl;
-                if (!insert_record('mnet_sso_access_control', $aclrecord)) {
-                    error("Database error - Couldn't modify the MNET access control list.");
-                }
+        } else {
+            $columndir = $dir == "ASC" ? "DESC":"ASC";
+            if ($column == "lastaccess") {
+                $columnicon = $dir == "ASC" ? "up":"down";
             } else {
-                $aclrecord->accessctrl = $accessctrl;
-                if (!update_record('mnet_sso_access_control', $aclrecord)) {
-                    error("Database error - Couldn't modify the MNET access control list.");
-                }
+                $columnicon = $dir == "ASC" ? "down":"up";
             }
-            $mnethosts = get_records('mnet_host', '', '', 'id', 'id,wwwroot,name');
-            notify("MNET access control list updated: username '$user->username' from host '"
-                    . $mnethosts[$user->mnethostid]->name
-                    . "' access now set to '$accessctrl'.");
+            $columnicon = " <img src=\"$CFG->pixpath/t/$columnicon.gif\" alt=\"\" />";
+
         }
+        $$column = "<a href=\"user.php?sort=$column&amp;dir=$columndir&amp;search=".urlencode(stripslashes($search))."&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial\">".$string[$column]."</a>$columnicon";
+    }
 
-        // Carry on with the user listing
+    if ($sort == "name") {
+        $sort = "firstname";
+    }
+    
+    // tell the query which users we are looking at (local, remote, or both)
+    $remotewhere = '';
+    if($mnet_auth_users && ($localusers XOR $remoteusers)) {
+        if ($localusers) {
+            $remotewhere .= " and mnethostid = {$CFG->mnet_localhost_id} ";
+        } else {
+            $remotewhere .= " and mnethostid <> {$CFG->mnet_localhost_id} ";
+        }
+    }
+    
+    $users = get_users_listing($sort, $dir, $page*$perpage, $perpage, $search, $firstinitial, $lastinitial, $remotewhere);
+    $usercount = get_users(false);
+    $usersearchcount = get_users(false, $search, true, "", "", $firstinitial, $lastinitial);
 
-        $columns = array("firstname", "lastname", "email", "city", "country", "lastaccess");
+    if ($search or $firstinitial or $lastinitial) {
+        print_heading("$usersearchcount / $usercount ".get_string('users'));
+        $usercount = $usersearchcount;
+    } else {
+        print_heading("$usercount ".get_string('users'));
+    }
 
-        foreach ($columns as $column) {
-            $string[$column] = get_string("$column");
-            if ($sort != $column) {
-                $columnicon = "";
-                if ($column == "lastaccess") {
-                    $columndir = "DESC";
-                } else {
-                    $columndir = "ASC";
-                }
-            } else {
-                $columndir = $dir == "ASC" ? "DESC":"ASC";
-                if ($column == "lastaccess") {
-                    $columnicon = $dir == "ASC" ? "up":"down";
-                } else {
-                    $columnicon = $dir == "ASC" ? "down":"up";
-                }
-                $columnicon = " <img src=\"$CFG->pixpath/t/$columnicon.gif\" alt=\"\" />";
+    $alphabet = explode(',', get_string('alphabet'));
+    $strall = get_string('all');
 
-            }
-            $$column = "<a href=\"user.php?sort=$column&amp;dir=$columndir&amp;search=".urlencode(stripslashes($search))."&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial\">".$string[$column]."</a>$columnicon";
-        }
 
-        if ($sort == "name") {
-            $sort = "firstname";
-        }
-        
-        // tell the query which users we are looking at (local, remote, or both)
-        $remotewhere = '';
-        if($mnet_auth_users && ($localusers XOR $remoteusers)) {
-            if ($localusers) {
-                $remotewhere .= " and mnethostid = {$CFG->mnet_localhost_id} ";
-            } else {
-                $remotewhere .= " and mnethostid <> {$CFG->mnet_localhost_id} ";
-            }
+    /// Bar of first initials
+
+    echo "<center><p align=\"center\">";
+    echo get_string("firstname")." : ";
+    if ($firstinitial) {
+        echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
+             "perpage=$perpage&amp;lastinitial=$lastinitial\">$strall</a> ";
+    } else {
+        echo " <b>$strall</b> ";
+    }
+    foreach ($alphabet as $letter) {
+        if ($letter == $firstinitial) {
+            echo " <b>$letter</b> ";
+        } else {
+            echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
+                 "perpage=$perpage&amp;lastinitial=$lastinitial&amp;firstinitial=$letter\">$letter</a> ";
         }
-        
-        $users = get_users_listing($sort, $dir, $page*$perpage, $perpage, $search, $firstinitial, $lastinitial, $remotewhere);
-        $usercount = get_users(false);
-        $usersearchcount = get_users(false, $search, true, "", "", $firstinitial, $lastinitial);
-
-        if ($search or $firstinitial or $lastinitial) {
-            print_heading("$usersearchcount / $usercount ".get_string('users'));
-            $usercount = $usersearchcount;
+    }
+    echo "<br />";
+
+    /// Bar of last initials
+
+    echo get_string("lastname")." : ";
+    if ($lastinitial) {
+        echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
+             "perpage=$perpage&amp;firstinitial=$firstinitial\">$strall</a> ";
+    } else {
+        echo " <b>$strall</b> ";
+    }
+    foreach ($alphabet as $letter) {
+        if ($letter == $lastinitial) {
+            echo " <b>$letter</b> ";
         } else {
-            print_heading("$usercount ".get_string('users'));
+            echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
+                 "perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$letter\">$letter</a> ";
         }
+    }
+    echo "</p>";
+    echo "</center>";
 
-        $alphabet = explode(',', get_string('alphabet'));
-        $strall = get_string('all');
+    print_paging_bar($usercount, $page, $perpage,
+            "user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
 
+    flush();
 
-        /// Bar of first initials
 
-        echo "<center><p align=\"center\">";
-        echo get_string("firstname")." : ";
-        if ($firstinitial) {
-            echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
-                 "perpage=$perpage&amp;lastinitial=$lastinitial\">$strall</a> ";
-        } else {
-            echo " <b>$strall</b> ";
+    if (!$users) {
+        $match = array();
+        if ($search !== '') {
+           $match[] = s($search);
         }
-        foreach ($alphabet as $letter) {
-            if ($letter == $firstinitial) {
-                echo " <b>$letter</b> ";
-            } else {
-                echo " <a href=\"user.php?sort=firstname&amp;dir=ASC&amp;".
-                     "perpage=$perpage&amp;lastinitial=$lastinitial&amp;firstinitial=$letter\">$letter</a> ";
-            }
+        if ($firstinitial) {
+           $match[] = get_string('firstname').": $firstinitial"."___";
         }
-        echo "<br />";
-
-        /// Bar of last initials
-
-        echo get_string("lastname")." : ";
         if ($lastinitial) {
-            echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
-                 "perpage=$perpage&amp;firstinitial=$firstinitial\">$strall</a> ";
-        } else {
-            echo " <b>$strall</b> ";
+           $match[] = get_string('lastname').": $lastinitial"."___";
         }
-        foreach ($alphabet as $letter) {
-            if ($letter == $lastinitial) {
-                echo " <b>$letter</b> ";
-            } else {
-                echo " <a href=\"user.php?sort=lastname&amp;dir=ASC&amp;".
-                     "perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$letter\">$letter</a> ";
-            }
-        }
-        echo "</p>";
-        echo "</center>";
+        $matchstring = implode(", ", $match);
+        print_heading(get_string('nousersmatching', '', $matchstring));
 
-        print_paging_bar($usercount, $page, $perpage,
-                "user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
+        $table = NULL;
 
-        flush();
+    } else {
 
+        $countries = get_list_of_countries();
+        if (empty($mnethosts)) {
+            $mnethosts = get_records('mnet_host', '', '', 'id', 'id,wwwroot,name');
+        }
 
-        if (!$users) {
-            $match = array();
-            if ($search !== '') {
-               $match[] = s($search);
+        foreach ($users as $key => $user) {
+            if (!empty($user->country)) {
+                $users[$key]->country = $countries[$user->country];
             }
-            if ($firstinitial) {
-               $match[] = get_string('firstname').": $firstinitial"."___";
+        }
+        if ($sort == "country") {  // Need to resort by full country name, not code
+            foreach ($users as $user) {
+                $susers[$user->id] = $user->country;
             }
-            if ($lastinitial) {
-               $match[] = get_string('lastname').": $lastinitial"."___";
+            asort($susers);
+            foreach ($susers as $key => $value) {
+                $nusers[] = $users[$key];
             }
-            $matchstring = implode(", ", $match);
-            print_heading(get_string('nousersmatching', '', $matchstring));
-
-            $table = NULL;
-
-        } else {
+            $users = $nusers;
+        }
 
-            $countries = get_list_of_countries();
-            if (empty($mnethosts)) {
-                $mnethosts = get_records('mnet_host', '', '', 'id', 'id,wwwroot,name');
+        $mainadmin = get_admin();
+        $table->head = array ("$firstname / $lastname", $email, $city, $country, $lastaccess, "", "", "");
+        $table->align = array ("left", "left", "left", "left", "left", "center", "center", "center");
+        $table->width = "95%";
+        foreach ($users as $user) {
+            if ($user->username == 'changeme' or $user->username == 'guest') {
+                continue; // do not dispaly dummy new user and guest here
             }
 
-            foreach ($users as $key => $user) {
-                if (!empty($user->country)) {
-                    $users[$key]->country = $countries[$user->country];
-                }
-            }
-            if ($sort == "country") {  // Need to resort by full country name, not code
-                foreach ($users as $user) {
-                    $susers[$user->id] = $user->country;
-                }
-                asort($susers);
-                foreach ($susers as $key => $value) {
-                    $nusers[] = $users[$key];
+            if ($user->id == $USER->id) {
+                $deletebutton = "";
+            } else {
+                if (has_capability('moodle/user:delete', $sitecontext)) {
+                    $deletebutton = "<a href=\"user.php?delete=$user->id&amp;sesskey=$USER->sesskey\">$strdelete</a>";
+                } else {
+                    $deletebutton ="";
                 }
-                $users = $nusers;
             }
 
-            $table->head = array ("$firstname / $lastname", $email, $city, $country, $lastaccess, "", "", "");
-            $table->align = array ("left", "left", "left", "left", "left", "center", "center", "center");
-            $table->width = "95%";
-            foreach ($users as $user) {
-                if ($user->username == 'changeme' or $user->username == 'guest') {
-                    continue; // do not dispaly dummy new user and guest here
-                }
-
-                if ($user->id == $USER->id) {
-                    $deletebutton = "";
+            if (has_capability('moodle/user:update', $sitecontext) and ($user->id==$USER->id or $user->id != $mainadmin->id) and !is_mnet_remote_user($user)) {
+                $editbutton = "<a href=\"../user/editadvanced.php?id=$user->id&amp;course=$site->id\">$stredit</a>";
+                if ($user->confirmed == 0) {
+                    $confirmbutton = "<a href=\"user.php?confirmuser=$user->id&amp;sesskey=$USER->sesskey\">" . get_string('confirm') . "</a>";
                 } else {
-                    if (has_capability('moodle/user:delete', $sitecontext)) {
-                        $deletebutton = "<a href=\"user.php?delete=$user->id&amp;sesskey=$USER->sesskey\">$strdelete</a>";
-                    } else {
-                        $deletebutton ="";
-                    }
+                    $confirmbutton = "";
                 }
-
-                if (has_capability('moodle/user:update', $sitecontext) and ! is_mnet_remote_user($user)) {
-                    $editbutton = "<a href=\"../user/edit.php?id=$user->id&amp;course=$site->id\">$stredit</a>";
-                    if ($user->confirmed == 0) {
-                        $confirmbutton = "<a href=\"user.php?confirmuser=$user->id&amp;sesskey=$USER->sesskey\">" . get_string('confirm') . "</a>";
-                    } else {
-                        $confirmbutton = "";
-                    }
+            } else {
+                $editbutton ="";
+                if ($user->confirmed == 0) {
+                    $confirmbutton = "<span class=\"dimmed_text\">".get_string('confirm')."</span>";
                 } else {
-                    $editbutton ="";
-                    if ($user->confirmed == 0) {
-                        $confirmbutton = "<span class=\"dimmed_text\">".get_string('confirm')."</span>";
-                    } else {
-                        $confirmbutton = "";
-                    }
-                }
-
-                // for remote users, shuffle columns around and display MNET stuff
-                if (is_mnet_remote_user($user)) {
-                    $accessctrl = 'allow';
-                    if ($acl = get_record('mnet_sso_access_control', 'username', $user->username, 'mnet_host_id', $user->mnethostid)) {
-                        $accessctrl = $acl->accessctrl;
-                    }
-                    $changeaccessto = ($accessctrl == 'deny' ? 'allow' : 'deny');
-                    // delete button in confirm column - remote users should already be confirmed
-                    // TODO: no delete for remote users, for now. new userid, delete flag, unique on username/host...
                     $confirmbutton = "";
-                    // ACL in delete column
-                    $deletebutton = get_string($accessctrl, 'mnet');
-                    if (has_capability('moodle/user:delete', $sitecontext)) {
-                        // TODO: this should be under a separate capability
-                        $deletebutton .= " (<a href=\"?acl={$user->id}&amp;accessctrl=$changeaccessto&amp;sesskey={$USER->sesskey}\">"
-                                . get_string($changeaccessto, 'mnet') . " access</a>)";
-                    }
-                    // mnet info in edit column
-                    $editbutton = $mnethosts[$user->mnethostid]->name;
                 }
+            }
 
-                if ($user->lastaccess) {
-                    $strlastaccess = format_time(time() - $user->lastaccess);
-                } else {
-                    $strlastaccess = get_string('never');
+            // for remote users, shuffle columns around and display MNET stuff
+            if (is_mnet_remote_user($user)) {
+                $accessctrl = 'allow';
+                if ($acl = get_record('mnet_sso_access_control', 'username', $user->username, 'mnet_host_id', $user->mnethostid)) {
+                    $accessctrl = $acl->accessctrl;
                 }
-                $fullname = fullname($user, true);
-
-                $table->data[] = array ("<a href=\"../user/view.php?id=$user->id&amp;course=$site->id\">$fullname</a>",
-                                    "$user->email",
-                                    "$user->city",
-                                    "$user->country",
-                                    $strlastaccess,
-                                    $editbutton,
-                                    $deletebutton,
-                                    $confirmbutton);
+                $changeaccessto = ($accessctrl == 'deny' ? 'allow' : 'deny');
+                // delete button in confirm column - remote users should already be confirmed
+                // TODO: no delete for remote users, for now. new userid, delete flag, unique on username/host...
+                $confirmbutton = "";
+                // ACL in delete column
+                $deletebutton = get_string($accessctrl, 'mnet');
+                if (has_capability('moodle/user:delete', $sitecontext)) {
+                    // TODO: this should be under a separate capability
+                    $deletebutton .= " (<a href=\"?acl={$user->id}&amp;accessctrl=$changeaccessto&amp;sesskey={$USER->sesskey}\">"
+                            . get_string($changeaccessto, 'mnet') . " access</a>)";
+                }
+                // mnet info in edit column
+                $editbutton = $mnethosts[$user->mnethostid]->name;
             }
-        }
 
-        if($mnet_auth_users) {
-            echo "<p style=\"text-align:center\">";
-            if ($localusers == 1 && $remoteusers == 1) {
-                echo '<a href="?lu=0">'.get_string('hidelocal','mnet').'</a> | ';
-            } elseif ($localusers == 0)  {
-                echo '<a href="?lu=1">'.get_string('showlocal','mnet').'</a> | ';
+            if ($user->lastaccess) {
+                $strlastaccess = format_time(time() - $user->lastaccess);
             } else {
-                echo get_string('hidelocal','mnet').' | ';
+                $strlastaccess = get_string('never');
             }
-            if ($localusers == 1 && $remoteusers == 1) {
-                echo '<a href="?ru=0">'.get_string('hideremote','mnet').'</a>';
-            } elseif ($remoteusers == 0) {
-                echo '<a href="?ru=1">'.get_string('showremote','mnet').'</a>';
-            } else {
-                echo get_string('hideremote','mnet');
-            }
-            echo "</p>";
+            $fullname = fullname($user, true);
+
+            $table->data[] = array ("<a href=\"../user/view.php?id=$user->id&amp;course=$site->id\">$fullname</a>",
+                                "$user->email",
+                                "$user->city",
+                                "$user->country",
+                                $strlastaccess,
+                                $editbutton,
+                                $deletebutton,
+                                $confirmbutton);
         }
+    }
 
-        echo "<table class=\"searchbox\" align=\"center\" cellpadding=\"10\"><tr><td>";
-        echo "<form action=\"user.php\" method=\"get\">";
-        echo "<input type=\"text\" name=\"search\" value=\"".s($search, true)."\" size=\"20\" />";
-        echo "<input type=\"submit\" value=\"$strsearch\" />";
-        if ($search) {
-            echo "<input type=\"button\" onclick=\"document.location='user.php';\" value=\"$strshowallusers\" />";
+    if($mnet_auth_users) {
+        echo "<p style=\"text-align:center\">";
+        if ($localusers == 1 && $remoteusers == 1) {
+            echo '<a href="?lu=0">'.get_string('hidelocal','mnet').'</a> | ';
+        } elseif ($localusers == 0)  {
+            echo '<a href="?lu=1">'.get_string('showlocal','mnet').'</a> | ';
+        } else {
+            echo get_string('hidelocal','mnet').' | ';
         }
-        echo "</form>";
-        echo "</td></tr></table>";
+        if ($localusers == 1 && $remoteusers == 1) {
+            echo '<a href="?ru=0">'.get_string('hideremote','mnet').'</a>';
+        } elseif ($remoteusers == 0) {
+            echo '<a href="?ru=1">'.get_string('showremote','mnet').'</a>';
+        } else {
+            echo get_string('hideremote','mnet');
+        }
+        echo "</p>";
+    }
 
+    echo "<table class=\"searchbox\" align=\"center\" cellpadding=\"10\"><tr><td>";
+    echo "<form action=\"user.php\" method=\"get\">";
+    echo "<input type=\"text\" name=\"search\" value=\"".s($search, true)."\" size=\"20\" />";
+    echo "<input type=\"submit\" value=\"$strsearch\" />";
+    if ($search) {
+        echo "<input type=\"button\" onclick=\"document.location='user.php';\" value=\"$strshowallusers\" />";
+    }
+    echo "</form>";
+    echo "</td></tr></table>";
+
+    if (has_capability('moodle/user:create', $sitecontext)) {
+        print_heading('<a href="../user/editadvanced.php?id=-1">'.get_string('addnewuser').'</a>');
+    }
+    if (!empty($table)) {
+        print_table($table);
+        print_paging_bar($usercount, $page, $perpage,
+                         "user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage".
+                         "&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
         if (has_capability('moodle/user:create', $sitecontext)) {
-            print_heading("<a href=\"user.php?newuser=true&amp;sesskey=$USER->sesskey\">".get_string('addnewuser')."</a>");
-        }
-        if (!empty($table)) {
-            print_table($table);
-            print_paging_bar($usercount, $page, $perpage,
-                             "user.php?sort=$sort&amp;dir=$dir&amp;perpage=$perpage".
-                             "&amp;firstinitial=$firstinitial&amp;lastinitial=$lastinitial&amp;search=".urlencode(stripslashes($search))."&amp;");
-            if (has_capability('moodle/user:create', $sitecontext)) {
-                print_heading("<a href=\"user.php?newuser=true&amp;sesskey=$USER->sesskey\">".get_string("addnewuser")."</a>");
-            }
+            print_heading('<a href="../user/editadvanced.php?id=-1">'.get_string('addnewuser').'</a>');
         }
+    }
 
 
-        admin_externalpage_print_footer($adminroot);
-    }
+    admin_externalpage_print_footer($adminroot);
+
 
 ?>