remember_me.module in Remember me 5
Same filename and directory in other branches
Puts a "Remember me" checkbox to login forms.
@todo User object data field will have 'remember_me' key forever after you disable the module.
File
remember_me.moduleView source
<?php
/**
* @file
* Puts a "Remember me" checkbox to login forms.
*
* @todo
* User object data field will have 'remember_me' key forever after you
* disable the module.
*/
/**
* Implementation of hook_init().
*/
function remember_me_init() {
global $user;
// If we have user logged in, then we have session started.
if ($user->uid) {
// Get the cookie life time.
$cookie_lifetime = ini_get('session.cookie_lifetime');
if ($user->remember_me) {
// If we have no cookie life time set already then set it.
if (0 == $cookie_lifetime) {
_remember_me_set_lifetime(2000000);
}
}
else {
// If we have cookie life time set already then unset it.
if (0 != $cookie_lifetime) {
_remember_me_set_lifetime(0);
}
}
}
}
/**
* remember_me_init() callback helper function.
*/
function _remember_me_set_lifetime($cookie_lifetime) {
// We have session started.
// We need to commit it, change php variable, and start session again.
session_write_close();
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 (!$remember_me) {
ini_set('session.cookie_lifetime', '0');
}
else {
// 2000000 is ~23 days. This value is in basic Drupal settings.
ini_set('session.cookie_lifetime', 2000000);
}
if ($user->uid) {
$user = user_save($user, array(
'remember_me' => (bool) $remember_me,
), NULL);
}
}
}
}
/**
* 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)) {
// Try to insert 'Remember me' checkbox between 'Username', 'Password' and
// 'Log in' form elements.
$form1['remember_me'] = array(
'#title' => t('Remember me'),
'#type' => 'checkbox',
);
_remember_me_array_insert_after_key('pass', $form, $form1);
}
}
/**
* Insert elements into array after the element with $searck_key key and
* maintain index association.
*
* @param $search_key
* Key of array element to insert elements after.
* @param $array
* Given array.
* @param $elements_to_insert
* Array of elements to be inserted.
*/
function _remember_me_array_insert_after_key($search_key, &$array, $elements_to_insert) {
// Split array into two arrays: prior $search_key element including
// $search_key element and after $search_key element.
$array1 = array();
$array2 = array();
$curr_array =& $array1;
foreach ($array as $key => $value) {
$curr_array[$key] = $value;
if ($search_key == $key) {
$curr_array =& $array2;
}
}
// Add $elements_to_insert to the end of the first array.
$array1 = $array1 + $elements_to_insert;
$array = $array1 + $array2;
}
Functions
Name![]() |
Description |
---|---|
remember_me_form_alter | Implementation of hook_form_alter(). |
remember_me_init | Implementation of hook_init(). |
remember_me_sess_read | Session handler 'read' callback. |
remember_me_user | Implementation of hook_user(). |
_remember_me_array_insert_after_key | Insert elements into array after the element with $searck_key key and maintain index association. |
_remember_me_set_lifetime | remember_me_init() callback helper function. |