MDL-30969 add support for suspending in uploaduser admin tool
authorPetr Skoda <commits@skodak.org>
Tue, 3 Jan 2012 15:40:09 +0000 (16:40 +0100)
committerPetr Skoda <commits@skodak.org>
Sun, 8 Jan 2012 13:01:10 +0000 (14:01 +0100)
admin/tool/uploaduser/index.php
admin/tool/uploaduser/lang/en/tool_uploaduser.php
admin/tool/uploaduser/locallib.php
admin/tool/uploaduser/user_form.php

index 44a0fe8..a0a69b0 100644 (file)
@@ -73,6 +73,10 @@ $stremailduplicate          = get_string('useremailduplicate', 'error');
 $strinvalidpasswordpolicy   = get_string('invalidpasswordpolicy', 'error');
 $errorstr                   = get_string('error');
 
+$stryes                     = get_string('yes');
+$strno                      = get_string('no');
+$stryesnooptions = array(0=>$strno, 1=>$stryes);
+
 $returnurl = new moodle_url('/admin/tool/uploaduser/index.php');
 $bulknurl  = new moodle_url('/admin/user/user_bulk.php');
 
@@ -88,6 +92,7 @@ $STD_FIELDS = array('id', 'firstname', 'lastname', 'username', 'email',
         'url', 'description', 'descriptionformat', 'password',
         'auth',        // watch out when changing auth type or using external auth plugins!
         'oldusername', // use when renaming users - this is the original username
+        'suspended',   // 1 means suspend user account, 0 means activate user account, nothing means keep as is for existing users
         'deleted',     // 1 means delete user
     );
 
@@ -154,6 +159,7 @@ if ($formdata = $mform2->is_cancelled()) {
     $updatepasswords   = (!empty($formdata->uupasswordold)  and $optype != UU_USER_ADDNEW and $optype != UU_USER_ADDINC and ($updatetype == UU_UPDATE_FILEOVERRIDE or $updatetype == UU_UPDATE_ALLOVERRIDE));
     $allowrenames      = (!empty($formdata->uuallowrenames) and $optype != UU_USER_ADDNEW and $optype != UU_USER_ADDINC);
     $allowdeletes      = (!empty($formdata->uuallowdeletes) and $optype != UU_USER_ADDNEW and $optype != UU_USER_ADDINC);
+    $allowsuspends     = (!empty($formdata->uuallowsuspends));
     $bulk              = $formdata->uubulk;
     $noemailduplicates = $formdata->uunoemailduplicates;
     $standardusernames = $formdata->uustandardusernames;
@@ -446,6 +452,7 @@ if ($formdata = $mform2->is_cancelled()) {
             $user->id = $existinguser->id;
 
             $upt->track('username', html_writer::link(new moodle_url('/user/profile.php', array('id'=>$existinguser->id)), s($existinguser->username)), 'normal', false);
+            $upt->track('suspended', $stryesnooptions[$existinguser->suspended] , 'normal', false);
 
             if (is_siteadmin($user->id)) {
                 $upt->track('status', $strusernotupdatedadmin, 'error');
@@ -462,6 +469,7 @@ if ($formdata = $mform2->is_cancelled()) {
             $upt->track('auth', $existinguser->auth, 'normal', false);
 
             $doupdate = false;
+            $dologout = false;
 
             if ($updatetype != UU_UPDATE_NOCHANGES) {
                 if (!empty($user->auth) and $user->auth !== $existinguser->auth) {
@@ -471,10 +479,13 @@ if ($formdata = $mform2->is_cancelled()) {
                         $upt->track('auth', $struserauthunsupported, 'warning');
                     }
                     $doupdate = true;
+                    if ($existinguser->auth === 'nologin') {
+                        $dologout = true;
+                    }
                 }
                 $allcolumns = array_merge($STD_FIELDS, $PRF_FIELDS);
                 foreach ($allcolumns as $column) {
-                    if ($column === 'username' or $column === 'password' or $column === 'auth') {
+                    if ($column === 'username' or $column === 'password' or $column === 'auth' or $column === 'suspended') {
                         // these can not be changed here
                         continue;
                     }
@@ -531,6 +542,20 @@ if ($formdata = $mform2->is_cancelled()) {
             }
             $isinternalauth = $auth->is_internal();
 
+            // deal with suspending and activating of accounts
+            if ($allowsuspends and isset($user->suspended) and $user->suspended !== '') {
+                $user->suspended = $user->suspended ? 1 : 0;
+                if ($existinguser->suspended != $user->suspended) {
+                    $upt->track('suspended', '', 'normal', false);
+                    $upt->track('suspended', $stryesnooptions[$existinguser->suspended].'-->'.$stryesnooptions[$user->suspended], 'info', false);
+                    $existinguser->suspended = $user->suspended;
+                    $doupdate = true;
+                    if ($existinguser->suspended) {
+                        $dologout = true;
+                    }
+                }
+            }
+
             // changing of passwords is a special case
             // do not force password changes for external auth plugins!
             $oldpw = $existinguser->password;
@@ -593,6 +618,10 @@ if ($formdata = $mform2->is_cancelled()) {
                 }
             }
 
+            if ($dologout) {
+                session_kill_user($existinguser->id);
+            }
+
         } else {
             // save the new user to the database
             $user->confirmed    = 1;
@@ -600,6 +629,13 @@ if ($formdata = $mform2->is_cancelled()) {
             $user->timecreated  = time();
             $user->mnethostid   = $CFG->mnet_localhost_id; // we support ONLY local accounts here, sorry
 
+            if (!isset($user->suspended) or $user->suspended === '') {
+                $user->suspended = 0;
+            } else {
+                $user->suspended = $user->suspended ? 1 : 0;
+            }
+            $upt->track('suspended', $stryesnooptions[$user->suspended], 'normal', false);
+
             if (empty($user->auth)) {
                 $user->auth = 'manual';
             }
index 90713c2..74bb55e 100644 (file)
@@ -25,6 +25,7 @@
 
 $string['allowdeletes'] = 'Allow deletes';
 $string['allowrenames'] = 'Allow renames';
+$string['allowsuspends'] = 'Allow suspending and activating of accounts';
 $string['csvdelimiter'] = 'CSV delimiter';
 $string['defaultvalues'] = 'Default values';
 $string['deleteerrors'] = 'Delete errors';
index 0917c2e..83b648c 100644 (file)
@@ -56,7 +56,7 @@ define('UU_PWRESET_ALL', 2);
  */
 class uu_progress_tracker {
     private $_row;
-    public $columns = array('status', 'line', 'id', 'username', 'firstname', 'lastname', 'email', 'password', 'auth', 'enrolments', 'deleted');
+    public $columns = array('status', 'line', 'id', 'username', 'firstname', 'lastname', 'email', 'password', 'auth', 'enrolments', 'suspended', 'deleted');
 
     /**
      * Print table header.
@@ -76,6 +76,7 @@ class uu_progress_tracker {
         echo '<th class="header c'.$ci++.'" scope="col">'.get_string('password').'</th>';
         echo '<th class="header c'.$ci++.'" scope="col">'.get_string('authentication').'</th>';
         echo '<th class="header c'.$ci++.'" scope="col">'.get_string('enrolments', 'enrol').'</th>';
+        echo '<th class="header c'.$ci++.'" scope="col">'.get_string('suspended', 'auth').'</th>';
         echo '<th class="header c'.$ci++.'" scope="col">'.get_string('delete').'</th>';
         echo '</tr>';
         $this->_row = null;
index 6faa4dd..33b1119 100644 (file)
@@ -134,6 +134,11 @@ class admin_uploaduser_form2 extends moodleform {
         $mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_USER_ADDNEW);
         $mform->disabledIf('uuallowdeletes', 'uutype', 'eq', UU_USER_ADDINC);
 
+        $mform->addElement('selectyesno', 'uuallowsuspends', get_string('allowsuspends', 'tool_uploaduser'));
+        $mform->setDefault('uuallowsuspends', 1);
+        $mform->disabledIf('uuallowsuspends', 'uutype', 'eq', UU_USER_ADDNEW);
+        $mform->disabledIf('uuallowsuspends', 'uutype', 'eq', UU_USER_ADDINC);
+
         $mform->addElement('selectyesno', 'uunoemailduplicates', get_string('uunoemailduplicates', 'tool_uploaduser'));
         $mform->setDefault('uunoemailduplicates', 1);