You are here

function mailchimp_lists_process_subscribe_form_choices in Mailchimp 7.5

Same name and namespace in other branches
  1. 8 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
  2. 7.2 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
  3. 7.3 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
  4. 7.4 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
  5. 2.x modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()

Processor for various list/audience form submissions.

Subscription blocks, user settings, and new user creation.

@array $choices An array representing the form values selected. @array $instance A mailchimp_lists_subscription field instance configuration. @array $field A mailchimp_lists_subscription field definition. @entity $entity An Entity that has the $instance field.

4 calls to mailchimp_lists_process_subscribe_form_choices()
mailchimp_lists_entity_delete in modules/mailchimp_lists/mailchimp_lists.module
Implements hook_entity_delete().
mailchimp_lists_rules_action_entity_subscribe in modules/mailchimp_lists/mailchimp_lists.rules.inc
Action callback: Subscribe an entity to a list/audience.
mailchimp_lists_subscribe_form_submit in modules/mailchimp_lists/mailchimp_lists.module
Submit handler to add emails to lists/audiences when editing/creating an entity.
_mailchimp_lists_field_postsave in modules/mailchimp_lists/includes/mailchimp_lists.field.inc
If we have any mailchimp_lists_subscription fields, we handle any changes to them by making appropriate subscription calls.

File

modules/mailchimp_lists/mailchimp_lists.module, line 228

Code

function mailchimp_lists_process_subscribe_form_choices($choices, $instance, $field, $entity) {
  $email = mailchimp_lists_load_email($instance, $entity);
  if (!$email) {

    // We can't do much subscribing without an email address.
    return;
  }
  $function = FALSE;
  $list_id = $field['settings']['mc_list_id'];
  $subscribed = mailchimp_is_subscribed($list_id, $email);
  if ($choices['subscribe'] != $subscribed) {

    // Subscription selection has changed.
    if ($choices['subscribe']) {
      $function = 'add';
    }
    elseif (isset($field['settings']['unsubscribe_action'])) {
      $function = $field['settings']['unsubscribe_action'];
    }
    else {
      $function = 'remove';
    }
  }
  elseif ($choices['subscribe']) {
    $function = 'update';
  }
  if ($function) {
    if ($function == 'remove') {
      $mergevars = array();
    }
    else {
      $mergevars = _mailchimp_lists_mergevars_populate($instance['settings']['mergefields'], $entity, $instance['entity_type'], $list_id);
    }
    $interest_groups = isset($choices['interest_groups']) ? $choices['interest_groups'] : array();

    // Parse interests from interest groups.
    $interests = array();
    foreach ($interest_groups as $interest_group) {
      foreach ($interest_group as $interest_id => $interest_status) {
        $interests[$interest_id] = $interest_status !== 0;
      }
    }
    if (count($interests) > 0 && $function == $field['settings']['unsubscribe_action']) {
      $function = 'update';
    }
    switch ($function) {
      case 'add':
        $ret = mailchimp_subscribe($list_id, $email, $mergevars, $interests, $field['settings']['double_opt_in']);
        break;
      case 'unsubscribe':
        $ret = mailchimp_unsubscribe_member($list_id, $email, FALSE);
        break;
      case 'remove':
        $ret = mailchimp_unsubscribe_member($list_id, $email, TRUE);
        break;
      case 'update':
        if (_mailchimp_lists_subscription_has_changed($instance, $field, $entity, $email, $choices)) {
          $ret = mailchimp_update_member($list_id, $email, $mergevars, $interests);
        }
        else {
          $ret = TRUE;
        }
        break;
    }
    if (empty($ret) || isset($ret->success) && $ret->success === FALSE) {
      drupal_set_message(t('There was a problem with your newsletter signup.'), 'warning');
    }
  }
}