You are here

function mailchimp_lists_process_subscribe_form_choices in Mailchimp 2.x

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

Processor for various list form submissions.

Subscription blocks, user settings, and new user creation.

Parameters

array $choices: An array representing the form values selected.

\Drupal\mailchimp_lists\Plugin\Field\FieldType\MailchimpListsSubscription $instance: A mailchimp_lists_subscription field instance configuration.

\Drupal\Core\Entity\EntityInterface $entity: An Entity that has the $instance field.

4 calls to mailchimp_lists_process_subscribe_form_choices()
MailchimpListsSubscribeForm::submitForm in modules/mailchimp_lists/src/Form/MailchimpListsSubscribeForm.php
Form submission handler.
MailchimpListsSubscription::postSave in modules/mailchimp_lists/src/Plugin/Field/FieldType/MailchimpListsSubscription.php
Defines custom post-save behavior for field values.
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.

File

modules/mailchimp_lists/mailchimp_lists.module, line 133
Mailchimp lists/audiences module.

Code

function mailchimp_lists_process_subscribe_form_choices(array $choices, MailchimpListsSubscription $instance, EntityInterface $entity) {

  // Never process a unsubscribe when the entity is new.
  // This is important to prevent unwanted subscription overwrites.
  if ($entity
    ->isNew() && $choices['subscribe'] == 0) {
    return;
  }
  $email = mailchimp_lists_load_email($instance, $entity);
  if (!$email) {

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

    // Subscription selection has changed.
    if ($choices['subscribe']) {
      $function = 'add';
    }
    else {
      $function = 'remove';
    }
  }
  elseif ($choices['subscribe']) {
    $function = 'update';
  }
  if ($function) {
    if ($function == 'remove') {
      $mergevars = [];
    }
    else {
      $mergevars = _mailchimp_lists_mergevars_populate($settings['merge_fields'], $entity);
    }
    $interests = isset($choices['interest_groups']) ? $choices['interest_groups'] : [];
    switch ($function) {
      case 'add':
        $ret = mailchimp_subscribe($settings['mc_list_id'], $email, $mergevars, $interests, $settings['double_opt_in']);
        break;
      case 'remove':
        $ret = mailchimp_unsubscribe($settings['mc_list_id'], $email);
        break;
      case 'update':
        if (_mailchimp_lists_subscription_has_changed($instance, $entity, $email, $choices)) {
          $ret = mailchimp_update_member($settings['mc_list_id'], $email, $mergevars, $interests);
        }
        else {
          $ret = TRUE;
        }
        break;
    }
    if (empty($ret)) {
      \Drupal::messenger()
        ->addWarning(t('There was a problem with your newsletter signup.'));
    }
  }
}