function autologout_cron in Automated Logout 6.4
Implements hook_cron().
File
- ./
autologout.module, line 469 - Used to automagically log out a user after a preset time.
Code
function autologout_cron() {
$timeout = variable_get('autologout_timeout', 1800);
$timeout_padding = variable_get('autologout_padding', 10);
// Get sessions, oldest first and exclude any anonymous or newer
// than the timeout.
$sess_query = "SELECT sid, uid, timestamp\n FROM {sessions}\n WHERE uid > 0 AND (%d - timestamp) >= %d\n ORDER BY sid";
$sessions = db_query_range($sess_query, time(), $timeout + $timeout_padding, 0, AUTOLOGOUT_CRON_NUM);
while ($session = db_fetch_object($sessions)) {
// Create a fake account class.
$account = new stdClass();
$account->roles = array();
$roles_query = "SELECT rid FROM {users_roles} ur WHERE ur.uid = %d";
$roles = db_query($roles_query, $session->uid);
while ($role = db_fetch_object($roles)) {
// _autologout_logout_role() doesn't care about the name of the role so
// save a join by using the rid twice here.
$account->roles[$role->rid] = $role->rid;
}
// Does the session user have a role that should be
// auto-logged out?
//
// Note: we can't use the session text field because it would mean
// switching sessions (tweaky) and even then it may not work due to
// Suhosin encrypting the data.
if (!_autologout_logout_role($account)) {
continue;
}
// If the session should be auto-logged out, destroy the session.
$session_time = time() - $session->timestamp;
if ($session_time >= $timeout + $timeout_padding) {
db_query("DELETE FROM {sessions} WHERE sid = '%s'", $session->sid);
$account->name = db_result(db_query("SELECT name FROM {users} WHERE uid = %d", $session->uid));
if (variable_get('autologout_use_watchdog', FALSE)) {
watchdog('user', 'Session automatically closed for %name by autologout (cron).', array(
'%name' => $account->name,
));
}
}
}
}