You are here

function mailchimp_signup_subscribe_form_submit in Mailchimp 7.5

Same name and namespace in other branches
  1. 7.3 modules/mailchimp_signup/mailchimp_signup.module \mailchimp_signup_subscribe_form_submit()
  2. 7.4 modules/mailchimp_signup/mailchimp_signup.module \mailchimp_signup_subscribe_form_submit()

Submit handler to add users to lists/audiences on subscription form submission.

File

modules/mailchimp_signup/mailchimp_signup.module, line 422
Mailchimp Signup module. Allows creation of signup forms integrated with Mailchimp.

Code

function mailchimp_signup_subscribe_form_submit($form, &$form_state) {
  $signup = reset($form_state['build_info']['args']);
  $list_details = mailchimp_get_lists($signup->mc_lists);
  $subscribe_lists = array();

  // Filter out blank fields so we don't erase values on the Mailchimp side.
  $mergevars = array_filter($form_state['values']['mergevars']);

  // Format mergevar values.
  foreach ($mergevars as $mergevar_key => $mergevar_value) {
    if (isset($form['mergevars'][$mergevar_key]['#attributes']['type']) && $form['mergevars'][$mergevar_key]['#attributes']['type'] == 'tel') {
      $mergevars[$mergevar_key] = mailchimp_format_phone_number($mergevar_value);
    }
  }
  $email = $mergevars['EMAIL'];

  // If we only have one list/audience we won't have checkbox values to investigate:
  if (count($signup->mc_lists) == 1) {
    $subscribe_lists[0] = array(
      'subscribe' => reset($signup->mc_lists),
      'interest_groups' => isset($form_state['values']['mailchimp_lists']['interest_groups']) ? $form_state['values']['mailchimp_lists']['interest_groups'] : NULL,
    );
  }
  else {

    // We can look at the checkbox values now:
    foreach ($form_state['values']['mailchimp_lists'] as $list) {
      if ($list['subscribe']) {
        $subscribe_lists[] = $list;
      }
    }
  }
  $successes = array();

  // Loop through the selected lists/audiences and try to subscribe:
  foreach ($subscribe_lists as $list_choices) {
    $list_id = $list_choices['subscribe'];
    $interest_groups = isset($list_choices['interest_groups']) ? $list_choices['interest_groups'] : array();

    // Parse interests from interest groups.
    $interests = array();
    foreach ($interest_groups as $interest_group) {

      // Check if interest group is an array. Checkbox options will appear in an
      // array, and unset options will be an empty array.
      if (is_array($interest_group)) {
        foreach ($interest_group as $interest_id => $interest_status) {
          $interests[$interest_id] = $interest_status !== 0;
        }
      }
      else {
        if ($interest_group != 0) {
          $interests[$interest_group] = TRUE;
        }
      }
    }
    $gdpr_consent = isset($form_state['values']['gdpr_consent']) ? (bool) $form_state['values']['gdpr_consent'] : FALSE;
    $result = mailchimp_subscribe($list_id, $email, $mergevars, $interests, $signup->settings['doublein'], 'html', $gdpr_consent);

    // Let other modules act on the results in hook_form_alter.
    $form_state['mailchimp_results'][$list_id] = $result;
    if (empty($result) || isset($result->success) && $result->success === FALSE) {
      drupal_set_message(t('There was a problem with your newsletter signup to %list.', array(
        '%list' => $list_details[$list_id]->name,
      )), 'warning');
    }
    else {
      $successes[] = $list_details[$list_id]->name;
    }
  }
  if (count($successes) && !empty($signup->settings['confirmation_message'])) {
    $message = mailchimp_signup_tt("mailchimp_signup:mailchimp_signup:{$signup->name}:confirmation_message", check_plain($signup->settings['confirmation_message']));
    drupal_set_message($message, 'status');
  }
  if (!empty($signup->settings['destination'])) {
    $form_state['redirect'] = $signup->settings['destination'];
  }
}