? 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; < } < < /**