--- D:\src\drupal\4.7\modules\autologout\autologout.module	Mon Feb 12 01:18:58 2007 UTC
+++ D:\src\htdocs\sms\modules\users\autologout\autologout.module	Wed Feb 21 15:22:49 2007 UTC
@@ -30,6 +30,7 @@
   var $refresh_delta = 0;     // force browser refresh (timeout+refresh_delta)
   var $use_watchdog = 1;      // log auto-logouts to watchdog
   var $block_title = 'Automatic logout in';
+  var $autologout_mode = 1;   // policy mode (excluding overrides)
 }
 /* }}} */
 
@@ -321,16 +322,24 @@
     t('Exculde : all users in this role are excluded from auto-logout functionality'),
     t('By user : all users in this role can select to switch off this functionality')
   );
-  $markup3 = theme_item_list($markup3_items, t('Policy description')) . 
-             t('Please note, if a user is found to be in a role '. 
-               'that allows disabling this feature, this overrides '.
-               'any enforcement');
+  $markup3 = theme_item_list($markup3_items, t('Policy description'));
 
   $form['autologout']['markup3'] = array(
    '#type' => 'markup',
    '#value' => $markup3
   );
 
+  $form['autologout']['autologout_mode'] = array(
+    '#type' => 'select',
+    '#title' => t('Policy rule'),
+    '#options' => array(0 => t('Enforcement overrides'), 1 => t('Excluding overrides'), 2 => t('By user overrides')),
+    '#default_value' => _autologout_local_settings('autologout_mode'),
+    '#description' =>
+      t('<b>Enforcement overrides:</b> If a user is found to be in a role that allows enforcement, this overrides any excluding.'). '<br/>'.
+      t('<b>Excluding overrides:</b> If a user is found to be in a role that allows disabling this feature, this overrides any enforcement.'). '<br/>'.
+      t('<b>By user overrides:</b> User own autologout setting overrides any enforcement or excluding.')
+  );
+
   return $form;
 }
 /* }}} */
@@ -365,26 +374,30 @@
     $local_user = $passed_user;
   }
 
-  foreach (user_roles(TRUE) as $role) {
+  $mode = _autologout_local_settings('autologout_mode');
+  $result = FALSE;
+  foreach ($local_user->roles as $role) {
     switch (_autologout_local_settings($role)) {
       case 0: // Enforce for all in this role
+        if ($mode == 0) {
+          return FALSE;
+        } else $result = FALSE;
         break; 
       case 1: // Exclude all users in this role
-        if (in_array($role, $local_user->roles)) {
+        if ($mode == 1) {
           return TRUE;
-        }
+        } else $result = TRUE;
         break;
       case 2: // Exclude user if user set to disable
-        if (in_array($role, $local_user->roles)) {
-          if (isset($local_user->autologout) && $local_user->autologout != 0) {
-            return TRUE;
-          } 
-        }
+        $u = isset($local_user->autologout) && $local_user->autologout != 0;
+        if ($mode == 2) {
+          return $u;
+        } else $result = $u;
         break;
     }
   }
 
-  return FALSE;
+  return $result;
 }
 /* }}} */
 
