? 534948-5.signup_confirm_email_fixes.patch
? signup-534948-diff.txt
? modules/signup_confirm_email/signup_confirm_email.install
? modules/signup_confirm_email/signup_confirm_email.js
Index: modules/signup_confirm_email/signup_confirm_email.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/modules/signup_confirm_email/signup_confirm_email.inc,v
retrieving revision 1.1
diff -r1.1 signup_confirm_email.inc
17,18c17,21
< unset($_SESSION['signup_email_confirm_sid']);
< unset($_SESSION['signup_email_confirm_values']);
---
>
> // We only need to do this for authenticated users signing up
> // themselves. We already collect the (presumably current) e-mail for
> // "anonymous" signups. If an administrator is signing up another user,
> // there's no reason to include the e-mail confirmation field, either.
20,24c23,25
< // We only need to do this for authenticated users signing up
< // themselves. We already collect the (presumably current) e-mail for
< // "anonymous" signups. If an administrator is signing up another user,
< // there's no reason to include the e-mail confirmation field, either.
< $email_confirm = array(
---
> drupal_add_js(drupal_get_path('module', 'signup_confirm_email') . '/signup_confirm_email.js');
> $email = array();
> $email['email_address'] = array(
30a32,41
> $email['email_confirm'] = array(
> '#title' => t('Update e-mail address in user profile'),
> '#type' => 'checkbox',
> '#default_value' => 0,
> '#description' => t('You must confirm any changes to the e-mail address stored in your user profile by selecting this checkbox.'),
> // This div is used to hide the checkbox on page load when JS is
> // enabled, and to reveal it once the 'email_address' field is edited.
> '#prefix' => '
',
> '#suffix' => '
',
> );
32,33c43,44
< $form['collapse']['email_confirm'] = $email_confirm;
< $form['signup_type'] = array('#type' => 'value', '#value' => 'new');
---
> $form['collapse']['email'] = $email;
> $form['#submit'][] = 'signup_email_confirm_submit';
36,37c47,48
< $form['elements']['email_confirm'] = $email_confirm;
< $form['signup_type'] = array('#type' => 'value', '#value' => 'edit');
---
> $form['elements']['email'] = $email;
> $form['elements']['save']['#submit'][] = 'signup_email_confirm_submit';
40,50d50
< if (!empty($form['#submit'])) {
< foreach ($form['#submit'] as $key => $callback) {
< if ($callback == 'signup_form_submit') {
< unset($form['#submit'][$key]);
< }
< }
< }
< elseif (!empty($form['elements']['save']['#submit'])) {
< unset($form['elements']['save']['#submit']);
< }
< $form['#submit'][] = 'signup_email_confirm_submit';
58,60c58,67
< if (!empty($form_state['values']['email_confirm']) &&
< !valid_email_address($form_state['values']['email_confirm'])) {
< form_set_error('email_confirm', t('Invalid e-mail address'));
---
> global $user;
> $error = FALSE;
> if (!empty($form_state['values']['email_address'])) {
> if (!valid_email_address($form_state['values']['email_address'])) {
> form_set_error('email_address', t('Invalid e-mail address'));
> }
> if ($form_state['values']['email_address'] != $user->mail && empty($form_state['values']['email_confirm'])) {
> form_set_error('email_confirm', t('Please confirm that you wish to save this new e-mail address into your user profile.'));
> $error = TRUE;
> }
61a69,71
> // Add a JS setting for if the checkbox has a validation error, in which
> // case we display it, even if the 'E-mail address' field isn't re-edited.
> drupal_add_js(array('signupConfirmEmailCheckboxError' => $error), 'setting');
75,86c85,91
< if (!empty($form_state['values']['email_confirm'])) {
< if ($form_state['values']['email_confirm'] != $user->mail) {
< if (!empty($form['#signup'])) {
< $_SESSION['signup_email_confirm_sid'] = $form['#signup']->sid;
< }
< $_SESSION['signup_email_confirm_values'] = $form_state['values'];
< if (empty($_SESSION['signup_email_confirm_values']['nid'])) {
< $_SESSION['signup_email_confirm_values']['nid'] = arg(1);
< }
< $nid = $_SESSION['signup_email_confirm_values']['nid'];
< $form_state['redirect'] = "node/$nid/signup/confirm-email";
< return;
---
> if (!empty($form_state['values']['email_confirm']) &&
> !empty($form_state['values']['email_address'])) {
> if ($form_state['values']['email_address'] != $user->mail) {
> // Update the user's e-mail address in their profile.
> $user->mail = $form_state['values']['email_address'];
> user_save($user, array('mail' => $user->mail));
> drupal_set_message(t('Updated the e-mail address in your profile to %new_address.', array('%new_address' => $user->mail)));
89,142d93
< if ($form_state['values']['signup_type'] == 'new') {
< signup_form_submit($form, $form_state);
< }
< else {
< module_load_include('inc', 'signup', 'includes/signup_edit_form');
< signup_edit_form_save_submit($form, $form_state);
< }
< }
<
< /**
< * Builds the confirmation form when the user is changing their e-mail address.
< */
< function signup_confirm_email_confirm_form() {
< global $user;
< $form['#submit'][] = 'signup_confirm_email_confirm_form_submit';
< $abort_url = isset($_REQUEST['destination']) ? $_REQUEST['destination'] : 'node/' . $_SESSION['signup_email_confirm_values']['nid'];
< $button_text = $_SESSION['signup_email_confirm_values']['signup_type'] == 'new' ? t('Change e-mail address and sign up') : t('Save changes');
< return confirm_form(
< $form,
< t('Are you sure you want to change your e-mail address?'),
< $abort_url,
< t('You have entered a new e-mail address (%new_address) which is different from the one currently saved in your profile (%current_address). If you continue, the new address will be used for future e-mail messages from this site.', array('%new_address' => $_SESSION['signup_email_confirm_values']['email_confirm'], '%current_address' => $user->mail)),
< $button_text, t('Cancel')
< );
< }
<
< /**
< * Submit callback for the confirmation form when a user changes their e-mail.
< */
< function signup_confirm_email_confirm_form_submit($form, &$form_state) {
< global $user;
<
< // Update the user's e-mail address in their profile.
< $user->mail = $_SESSION['signup_email_confirm_values']['email_confirm'];
< user_save($user, array('mail' => $user->mail));
< drupal_set_message(t('Updated the e-mail address in your profile to %new_address.', array('%new_address' => $user->mail)));
<
< // Complete the signup and clear out the SESSION variable.
< $nid = $_SESSION['signup_email_confirm_values']['nid'];
< if ($_SESSION['signup_email_confirm_values']['signup_type'] == 'new') {
< signup_sign_up_user($_SESSION['signup_email_confirm_values']);
< }
< else {
< $signup->sid = $_SESSION['signup_email_confirm_sid'];
< $edit_form['#signup'] = $signup;
< $edit_form_state['values'] = $_SESSION['signup_email_confirm_values'];
< module_load_include('inc', 'signup', 'includes/signup_edit_form');
< signup_edit_form_save_submit($edit_form, $edit_form_state);
< }
< unset($_SESSION['signup_email_confirm_sid']);
< unset($_SESSION['signup_email_confirm_values']);
<
< // Return to the node they signed up to.
< $form_state['redirect'] = "node/$nid";
Index: modules/signup_confirm_email/signup_confirm_email.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/signup/modules/signup_confirm_email/signup_confirm_email.module,v
retrieving revision 1.1
diff -r1.1 signup_confirm_email.module
9,11c9,11
< * current e-mail address. If the user changes this field, they are presented
< * with a confirmation form, and if they accept, their e-mail address in their
< * user profile is updated accordingly.
---
> * current e-mail address. If the user changes this field, and they confirm
> * they want to modify their profile, their e-mail address in their user
> * profile is updated accordingly.
16,30d15
< * Implement hook_menu().
< */
< function signup_confirm_email_menu() {
< $items['node/%node/signup/confirm-email'] = array(
< 'type' => MENU_CALLBACK,
< 'description' => 'Confirmation page when changing e-mail during a signup.',
< 'access arguments' => array('sign up for content'),
< 'page callback' => 'drupal_get_form',
< 'page arguments' => array('signup_confirm_email_confirm_form'),
< 'file' => 'signup_confirm_email.inc',
< );
< return $items;
< }
<
< /**