function mailchimp_lists_process_subscribe_form_choices in Mailchimp 8
Same name and namespace in other branches
- 7.5 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
- 7.2 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
- 7.3 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
- 7.4 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_process_subscribe_form_choices()
- 2.x 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.'));
}
}
}