password_policy_password_tab.pages.inc in Password Policy 7
Same filename and directory in other branches
The password policy password tab page callbacks.
File
contrib/password_tab/password_policy_password_tab.pages.incView source
<?php
/**
* @file
* The password policy password tab page callbacks.
*/
/**
* Password change form.
*/
function password_policy_password_tab($form, &$form_state, $account) {
global $user;
// During initial form build, add the entity to the form state for use during
// form building and processing. During a rebuild, use what is in the form
// state.
if (!isset($form_state['user'])) {
$form_state['user'] = $account;
}
else {
$account = $form_state['user'];
}
if ($user->uid == $account->uid) {
// To skip the current password field, the user must have logged in via a
// one-time link and have the token in the URL.
$pass_reset = isset($_SESSION['pass_reset_' . $account->uid]) && isset($_GET['pass-reset-token']) && $_GET['pass-reset-token'] == $_SESSION['pass_reset_' . $account->uid];
$protected_values = array();
$current_pass_description = '';
// The user may only change their own password without their current
// password if they logged in via a one-time login link.
if (!$pass_reset) {
$protected_values['mail'] = t('E-mail address');
$protected_values['pass'] = t('Password');
$request_new = l(t('Request new password'), 'user/password', array(
'attributes' => array(
'title' => t('Request new password via e-mail.'),
),
));
$current_pass_description = t('Enter your current password to change the %pass. !request_new.', array(
'%pass' => $protected_values['pass'],
'!request_new' => $request_new,
));
}
// The user must enter their current password to change to a new one.
if (isset($protected_values['pass'])) {
$form['account']['current_pass_required_values'] = array(
'#type' => 'value',
'#value' => array(
'pass' => $protected_values['pass'],
),
);
$form['account']['current_pass'] = array(
'#type' => 'password',
'#title' => t('Current password'),
'#size' => 25,
'#access' => !empty($protected_values),
'#description' => $current_pass_description,
'#weight' => -5,
'#attributes' => array(
'autocomplete' => 'off',
),
);
$form['#validate'][] = 'user_validate_current_pass';
}
}
$form['account']['pass'] = array(
'#type' => 'password_confirm',
'#size' => 25,
'#required' => TRUE,
'#description' => t('To change the current user password, enter the new password in both fields.'),
);
// @TODO Remove this as it supports a D6-style of interacting with a user form
// In the future, this data should be stored in $form_state.
$form['#uid'] = $account->uid;
$form['#user'] = $account;
$form['_account'] = array(
'#type' => 'value',
'#value' => $account,
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
/**
* Password change form validation.
*/
function password_policy_password_tab_validate($form, &$form_state) {
$pass = trim($form_state['values']['pass']);
if (empty($pass)) {
form_set_error('pass', t('Your password cannot be empty.'));
}
}
/**
* Password change form submit.
*/
function password_policy_password_tab_submit($form, &$form_state) {
global $user;
$account = $form['_account']['#value'];
$account = $form_state['user'];
user_module_invoke('submit', $form_state['values'], $account, 'account');
user_save($account, array(
'pass' => $form_state['values']['pass'],
));
unset($_SESSION['pass_reset_' . $account->uid]);
drupal_set_message(t('Password has been changed.'));
if (variable_get('password_policy_password_tab_redirect', '') && !preg_match('/[?&]destination=/', $form['#action'])) {
$redirect = drupal_parse_url(strtr(variable_get('password_policy_password_tab_redirect', ''), array(
'%uid' => $user->uid,
)));
$form_state['redirect'] = array(
$redirect['path'],
$redirect,
);
}
}
Functions
Name | Description |
---|---|
password_policy_password_tab | Password change form. |
password_policy_password_tab_submit | Password change form submit. |
password_policy_password_tab_validate | Password change form validation. |