/[drupal]/contributions/modules/remember_me/remember_me.module
ViewVC logotype

Contents of /contributions/modules/remember_me/remember_me.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.13 - (show annotations) (download) (as text)
Wed Nov 26 11:01:42 2008 UTC (12 months ago) by nickl
Branch: MAIN
CVS Tags: DRUPAL-6--2-0, HEAD
Branch point for: DRUPAL-6--2
Changes since 1.12: +16 -20 lines
File MIME type: text/x-php
6.x version update.
No other changes applied to this module.
1 <?php
2 // $Id: remember_me.module,v 1.10 2007/02/09 09:30:10 doq Exp $
3
4 /**
5 * @file
6 * Puts a "Remember me" checkbox on the login forms.
7 *
8 */
9
10 /**
11 * Implementation of hook_init().
12 */
13 function remember_me_init() {
14 global $user;
15
16 // If we have user logged in, then we have session started.
17 if ($user->uid) {
18
19 // Get the cookie life time.
20 $cookie_lifetime = ini_get('session.cookie_lifetime');
21
22 if ($user->remember_me && variable_get('remember_me_managed', 0) != 0) {
23 // Set lifetime as configured via admin settings.
24 if (variable_get('remember_me_lifetime', 604800) != $cookie_lifetime) {
25 _remember_me_set_lifetime(variable_get('remember_me_lifetime', 604800));
26 }
27 }
28 else if (!$user->remember_me) {
29 // If we have cookie life time set already then unset it.
30 if (0 != $cookie_lifetime) {
31 _remember_me_set_lifetime(0);
32 }
33 }
34 }
35 }
36
37 /**
38 * remember_me_init() callback helper function.
39 */
40 function _remember_me_set_lifetime($cookie_lifetime) {
41 // We have session started.
42 // Lets close the session, change php cookie lifetime variable, and start session again.
43 // Prevent sess_write from persisting the session object at this time, it will happen on shutdown.
44 session_save_session(FALSE);
45 session_write_close();
46 session_save_session(TRUE);
47
48 ini_set('session.cookie_lifetime', $cookie_lifetime);
49
50 // Use remember_me_sess_read() to avoid reloading of user object, because
51 // it might be once more reloaded in some other hook_init().
52 session_set_save_handler("sess_open", "sess_close", "remember_me_sess_read", "sess_write", "sess_destroy_sid", "sess_gc");
53 session_start();
54 }
55
56 /**
57 * Session handler 'read' callback.
58 */
59 function remember_me_sess_read() {
60 global $user;
61 static $run = FALSE;
62
63 if (!$run) {
64 $run = TRUE;
65 return !empty($user->session) ? $user->session : '';
66 }
67
68 $args = func_get_args();
69 return call_user_func_array('sess_read', $args);
70 }
71
72 /**
73 * Implementation of hook_user().
74 */
75 function remember_me_user($type, &$edit, &$user, $category = NULL) {
76 if (NULL === $category && 'login' == $type) {
77 $remember_me = isset($edit['remember_me']) ? $edit['remember_me'] : NULL;
78 if (isset($remember_me)) {
79 if ($user->uid) {
80 $user = user_save($user, array('remember_me' => (bool)$remember_me), NULL);
81 }
82 }
83 }
84 }
85
86 /**
87 * Implementation of hook_form_alter().
88 */
89 function remember_me_form_alter(&$form, $form_state, $form_id) {
90 $user_login_forms = array('user_login', 'user_login_block');
91
92 if (in_array($form_id, $user_login_forms)) {
93 // Insert 'Remember me' checkbox between 'Username', 'Password' and
94 // 'Log in' form elements.
95 $form1['remember_me'] = array(
96 '#title' => t('Remember me'),
97 '#type' => 'checkbox',
98 '#default_value' => variable_get('remember_me_checkbox', 0),
99 '#attributes' => array('tabindex' => '3'),
100 );
101 $form['name']['#attributes']['tabindex'] = '1';
102 $form['pass']['#attributes']['tabindex'] = '2';
103 $form['submit']['#attributes']['tabindex'] = '4';
104 _remember_me_array_insert_after_key('pass', $form, $form1);
105 }
106 }
107
108 /**
109 * Insert elements into array after the element with $searck_key key and
110 * maintain index association.
111 *
112 * @param $search_key
113 * Key of array element to insert elements after.
114 * @param $array
115 * Given array.
116 * @param $elements_to_insert
117 * Array of elements to be inserted.
118 */
119 function _remember_me_array_insert_after_key($search_key, &$array, $elements_to_insert) {
120 // Split array into two arrays: prior $search_key element including
121 // $search_key element and after $search_key element.
122 $array1 = array();
123 $array2 = array();
124 $curr_array = &$array1;
125 foreach ($array as $key => $value) {
126 $curr_array[$key] = $value;
127 if ($search_key == $key) {
128 $curr_array = &$array2;
129 }
130 }
131
132 // Add $elements_to_insert to the end of the first array.
133 $array1 = $array1 + $elements_to_insert;
134
135 $array = $array1 + $array2;
136 }
137
138 /**
139 * Implementation of hook_menu().
140 */
141 function remember_me_menu() {
142 $items = array();
143 $items['admin/settings/remember_me'] = array(
144 'title' => 'Remember me',
145 'description' => 'Configure settings like session time out for remember_me module.',
146 'page callback' => 'drupal_get_form',
147 'page arguments' => array('remember_me_admin_settings'),
148 'access arguments' => array('administer site configuration'),
149 'type' => MENU_NORMAL_ITEM
150 );
151 return $items;
152 }
153
154 /**
155 * Implementation of hook_help
156 */
157 function remember_me_help($section, $arg) {
158 switch ($section) {
159 case 'admin/help#remember_me' :
160 return t('Allows users to have persistent sessions via a checkbox "Remember me" on the login form.');
161 }
162 }
163
164 /**
165 * Implementation of menu callback
166 */
167 function remember_me_admin_settings() {
168 $options = drupal_map_assoc(array(3600, 10800, 21600, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
169
170 $form['remember_me_managed'] = array(
171 '#type' => 'checkbox',
172 '#title' => t('Manage session lifetime'),
173 '#default_value' => variable_get('remember_me_managed', 0),
174 '#description' => t('Should the lifetime configuration in settings.php be ignored and managed by this module?'),
175 );
176
177 $form['remember_me_lifetime'] = array(
178 '#type' => 'select',
179 '#title' => t('Lifetime'),
180 '#default_value' => variable_get('remember_me_lifetime', 604800),
181 '#options' => $options,
182 '#description' => t('Duration to keep users logged in if they check "Remember me" option on the login form. This value is ignored if Manage session lifetime (above) is not enabled.'),
183 );
184
185 $form['remember_me_checkbox'] = array(
186 '#type' => 'checkbox',
187 '#title' => t('Remember me'),
188 '#default_value' => variable_get('remember_me_checkbox', 0),
189 '#description' => t('Default state for "Remember me" on the login form.'),
190 );
191
192 return system_settings_form($form);
193 }

  ViewVC Help
Powered by ViewVC 1.1.2