You are here

multiple_email_confirm_page.inc in Multiple E-mail Addresses 6

Functions for displaying and processing the confirmation page

File

multiple_email_confirm_page.inc
View source
<?php

/**
 * @file
 * Functions for displaying and processing the confirmation page
 */

/**
 * Renders the page to confirm an e-mail address.
 *
 * If code is passed in on URL, then it will populate that value in the
 * text field.
 *
 * @param object $account
 *  Loaded user account object.
 * @param object $email
 *  Loaded e-mail object.
 * @param string $code
 *  Optional confirmation code.
 *
 * @return string
 */
function multiple_email_confirm_page($account, $email, $code = NULL) {
  global $user;
  if (_multiple_email_access('confirm', $account, $email)) {
    menu_set_active_item('user/' . $account->uid . '/edit/email-addresses');
    return drupal_get_form('multiple_email_confirm_form', $account, $email, $code);
  }
  elseif (empty($user->uid)) {
    drupal_set_message(t('You must be signed in to confirm an address.'));
    drupal_goto('user/login', drupal_get_destination());
  }
  else {
    drupal_access_denied();
  }
}

/**
 * Builds e-mail confirmation form
 *
 * @ingroup forms
 *
 * @see multiple_email_confirm_form_submit()
 *
 * @param object $email
 * @param string $confirm_code
 *
 * @return array
 */
function multiple_email_confirm_form(&$form_state, $account, $email, $confirm_code) {
  $form = array();
  $form[] = array(
    '#type' => 'markup',
    '#value' => '<p>' . t('The e-mail address %email is awaiting confirmation. You should have received an e-mail at that address with a confirmation code in it. Enter the code below and click confirm. If you have lost this e-mail or did not recieve a confirmation code you can try <a href="!resend">resending</a> it.', array(
      '%email' => $email->email,
      '!resend' => url('user/' . $account->uid . '/edit/email-addresses/confirm/' . $email->eid . '/resend'),
    )) . '</p>',
  );
  $form['#email'] = $email;
  $form['#account'] = $account;
  $form['code'] = array(
    '#type' => 'textfield',
    '#title' => t('Confirmation Code'),
    '#required' => TRUE,
    '#default_value' => check_plain($confirm_code),
  );
  $form['#redirect'] = 'user/' . $account->uid . '/edit/email-addresses';
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Confirm'),
  );
  return $form;
}
function multiple_email_confirm_form_validate($form, &$form_state) {
  $code = trim($form_state['values']['code']);
  $email = $form['#email'];
  $account = $form['#account'];
  if ($code != '') {
    $attempts = $email->attempts + 1;
    $allowed = (int) variable_get('multiple_email_confirm_attempts', 3);
    db_query("UPDATE {multiple_email} SET attempts = %d WHERE eid = %d", $attempts, $email->eid);
    if (!$allowed || $attempts <= $allowed) {
      if ($code != $email->confirm_code) {
        form_set_error('', t('The confirmation code was incorrect'));
      }
    }
    else {
      $email->confirm_code = multiple_email_code();
      db_query("UPDATE {multiple_email} SET confirm_code = '%s', time_code_generated = %d, attempts = 0 WHERE eid = %d", $email->confirm_code, time(), $email->eid);
      multiple_email_send_confirmation($account, $email);

      // Redirect & Message
      drupal_set_message(t('You have exhausted your allowed attempts at confirming this e-mail address. A new confirmation code has been sent.'), 'error');
      drupal_goto('user/' . $account->uid . '/edit/email-addresses');
    }
  }
}

/**
 * Process multiple_email_confirm_form submission.
 *
 * @param string $form_id
 * @param array $form_values
 */
function multiple_email_confirm_form_submit($form, &$form_state) {

  // Confirmation successful!
  $email = $form['#email'];
  multiple_email_confirm_email($email);
  drupal_set_message(t('The address %email has been confirmed!', array(
    '%email' => $email->email,
  )));
}

/**
 * Confirmation form for resending a confirmation code.
 *
 * @param array $form_state
 * FormAPI state array.
 * @param object $account
 * Drupal user account object.
 * @param object $email
 * Multiple E-Mails email object.
 */
function multiple_email_confirm_page_resend(&$form_state, $account, $email) {
  $msg = t('Please make sure that %email is correct. If not, please <a href="!delete">delete</a> it and add the correct address.', array(
    '%email' => $email->email,
    '!delete' => url('user/' . $account->uid . '/edit/email-addresses/delete/' . $email->eid),
  ));

  // TODO Should this redirect to the confirmation page or the address listing page?
  $form['#redirect'] = 'user/' . $account->uid . '/edit/email-addresses/confirm/' . $email->eid;
  $form['#email'] = $email;
  $form['#account'] = $account;
  return confirm_form($form, t('Resend confirmation to %email.', array(
    '%email' => $email->email,
  )), 'user/' . $account->uid . '/edit/email-addresses/confirm/' . $email->eid, $msg, t('Resend'));
}

/**
 * Callback for resending a confirmation email.
 */
function multiple_email_confirm_page_resend_submit($form, &$form_state) {
  $email = $form['#email'];
  $account = $form['#account'];

  // Send a confirmation e-mail if one has not been sent within the specified days.
  $email->confirm_code = multiple_email_code();
  db_query("UPDATE {multiple_email} SET confirm_code = '%s', time_code_generated = %d, attempts = 0 WHERE eid = %d", $email->confirm_code, time(), $email->eid);
  multiple_email_send_confirmation($account, $email);
}

Functions

Namesort descending Description
multiple_email_confirm_form Builds e-mail confirmation form
multiple_email_confirm_form_submit Process multiple_email_confirm_form submission.
multiple_email_confirm_form_validate
multiple_email_confirm_page Renders the page to confirm an e-mail address.
multiple_email_confirm_page_resend Confirmation form for resending a confirmation code.
multiple_email_confirm_page_resend_submit Callback for resending a confirmation email.