remember_me.module in Remember me 5.2
Same filename and directory in other branches
Add a "Remember me" checkbox to login forms.
File
remember_me.moduleView source
<?php
/**
* @file
* Add a "Remember me" checkbox to login forms.
*/
/**
* Implementation of hook_init().
*/
function remember_me_init() {
global $user;
// If we have a user logged in, then we have a session.
if ($user->uid) {
if ($user->remember_me && variable_get('remember_me_managed', 0) != 0) {
// Set lifetime as configured via admin settings.
if (variable_get('remember_me_lifetime', 604800) != ini_get('session.cookie_lifetime')) {
_remember_me_set_lifetime(variable_get('remember_me_lifetime', 604800));
}
}
else {
if (!$user->remember_me) {
// If we have cookie lifetime set already then unset it.
if (0 != ini_get('session.cookie_lifetime')) {
_remember_me_set_lifetime(0);
}
}
}
}
}
/**
* remember_me_init() callback helper function.
*/
function _remember_me_set_lifetime($cookie_lifetime) {
// We have session started.
// Lets close the session, change php cookie lifetime variable, and start
// session again.
// Prevent sess_write from persisting the session object at this time,
// it will happen on shutdown.
session_save_session(FALSE);
session_write_close();
session_save_session(TRUE);
ini_set('session.cookie_lifetime', $cookie_lifetime);
// Use remember_me_sess_read() to avoid reloading of user object, because
// it might be once more reloaded in some other hook_init().
session_set_save_handler("sess_open", "sess_close", "remember_me_sess_read", "sess_write", "sess_destroy_sid", "sess_gc");
session_start();
}
/**
* Session handler 'read' callback.
*/
function remember_me_sess_read() {
global $user;
static $run = FALSE;
if (!$run) {
$run = TRUE;
return !empty($user->session) ? $user->session : '';
}
$args = func_get_args();
return call_user_func_array('sess_read', $args);
}
/**
* Implementation of hook_user().
*/
function remember_me_user($type, &$edit, &$user, $category = NULL) {
if (NULL === $category && 'login' == $type) {
$remember_me = isset($edit['remember_me']) ? $edit['remember_me'] : NULL;
if (isset($remember_me)) {
if ($user->uid) {
$user = user_save($user, array(
'remember_me' => (bool) $remember_me,
), NULL);
}
}
if (variable_get('remember_me_phantom_session', 0)) {
require_once './' . drupal_get_path('module', 'remember_me') . '/remember_me.inc';
remember_me_manage_phantom_sessions();
}
}
}
/**
* Implementation of hook_form_alter().
*/
function remember_me_form_alter($form_id, &$form) {
$user_login_forms = array(
'user_login',
'user_login_block',
);
if (in_array($form_id, $user_login_forms)) {
require_once './' . drupal_get_path('module', 'remember_me') . '/remember_me.inc';
remember_me_insert_checkbox($form);
}
}
/**
* Implementation of hook_menu().
*/
function remember_me_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'admin/settings/remember_me',
'title' => t('Remember me settings'),
'description' => t('Configure settings like session time out for remember_me module.'),
'callback' => 'drupal_get_form',
'callback arguments' => array(
'remember_me_admin_settings',
),
'access' => user_access('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);
$items[] = array(
'path' => 'admin/settings/remember_me/users/online',
'title' => t("'Who's online' settings"),
'callback' => 'drupal_get_form',
'callback arguments' => array(
'remember_me_users_online_form',
),
'access' => user_access('administer site configuration'),
'type' => MENU_CALLBACK,
);
}
return $items;
}
/**
* Implementation of hook_help().
*/
function remember_me_help($section) {
switch ($section) {
case 'admin/help#remember_me':
return t('Allows users to have persistent sessions via a checkbox "Remember me" on the login form.');
}
}
/**
* Implementation of menu callback
*/
function remember_me_admin_settings() {
global $user;
$options = drupal_map_assoc(array(
3600,
10800,
21600,
43200,
86400,
172800,
259200,
604800,
1209600,
2419200,
), 'format_interval');
$link = l(t('Configure Who\'s online settings'), 'admin/settings/remember_me/users/online', array(
'title' => t('Who\'s online settings.'),
'class' => 'remember-me-users-online',
), 'destination=admin/settings/remember_me');
$vars = array(
'remember' => array(
'#type' => 'item',
'#title' => t('Remember me'),
'#value' => $user->remember_me ? t('Yes') : t('No'),
'#description' => t("Current user chose at log in."),
),
'session' => array(
'#type' => 'item',
'#title' => t('Session lifetime'),
'#value' => format_interval(ini_get('session.cookie_lifetime')),
'#description' => t("Currently configured session cookie lifetime."),
),
'activity' => array(
'#type' => 'item',
'#title' => t('User activity'),
'#value' => '<span id="remember-me-timeout">' . format_interval(variable_get('user_block_seconds_online', 900)) . '</span>',
'#description' => t("Period a user is considered to be online for after they have last viewed a page."),
),
);
$form['legend'] = array(
'#type' => 'markup',
'#value' => theme('remember_me_settings_display', $vars),
);
$form['remember_me_phantom_session'] = array(
'#type' => 'checkbox',
'#title' => t('Manage phantom sessions'),
'#default_value' => variable_get('remember_me_phantom_session', 0),
'#description' => t("Prevent phantom sessions from causing duplicate entries on the Who's online list."),
);
$form['user_activity'] = array(
'#type' => 'item',
'#value' => $link,
'#description' => t("Decrease the likelihood of trapping phantom sessions by shortening the Who's online user activity period."),
);
$form['remember_me_managed'] = array(
'#type' => 'checkbox',
'#title' => t('Manage session lifetime'),
'#default_value' => variable_get('remember_me_managed', 0),
'#description' => t('Choose to manually overwrite the configuration value from settings.php.'),
);
$form['remember_me_lifetime'] = array(
'#type' => 'select',
'#title' => t('Lifetime'),
'#default_value' => variable_get('remember_me_lifetime', 604800),
'#options' => $options,
'#description' => t('Duration a user will be remembered for. This setting is ignored if Manage session lifetime (above) is disabled.'),
);
$form['remember_me_checkbox'] = array(
'#type' => 'checkbox',
'#title' => t('Remember me field'),
'#default_value' => variable_get('remember_me_checkbox', 1),
'#description' => t('Default state of the "Remember me" field on the login forms.'),
);
return system_settings_form($form);
}
function theme_remember_me_settings_display($vars) {
$rows = array();
foreach ($vars as $var) {
$desc = $var['#description'];
unset($var['#description']);
$output = '<div class="container-inline">' . theme('item', $var) . '</div>';
$output .= '<div class="description">' . $desc . '</div>';
$rows[] = $output;
if (is_array($rows[0])) {
$rows[1] = array(
$rows[1],
);
}
else {
if (sizeof($rows) == 2) {
$rows = array(
array(
'data' => $rows,
'class' => 'even',
),
);
}
}
}
return theme('table', array(), $rows);
}
/**
* Who's online form callback.
* Extract form from user_block method and add buttons.
*/
function remember_me_users_online_form() {
$form['conf'] = array();
$form['conf'] += user_block('configure', 3);
$form['disp'] = array(
'#type' => 'fieldset',
'#title' => t("'Who's online' block preview"),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$view = user_block('view', 3);
$form['disp']['items'] = array(
'#type' => 'markup',
'#value' => '<div>' . $view['content'] . '</div>',
);
return system_settings_form($form);
}
Functions
Name![]() |
Description |
---|---|
remember_me_admin_settings | Implementation of menu callback |
remember_me_form_alter | Implementation of hook_form_alter(). |
remember_me_help | Implementation of hook_help(). |
remember_me_init | Implementation of hook_init(). |
remember_me_menu | Implementation of hook_menu(). |
remember_me_sess_read | Session handler 'read' callback. |
remember_me_user | Implementation of hook_user(). |
remember_me_users_online_form | Who's online form callback. Extract form from user_block method and add buttons. |
theme_remember_me_settings_display | |
_remember_me_set_lifetime | remember_me_init() callback helper function. |