function _mailchimp_lists_subscription_has_changed in Mailchimp 8
Same name and namespace in other branches
- 7.5 modules/mailchimp_lists/mailchimp_lists.module \_mailchimp_lists_subscription_has_changed()
- 7.3 modules/mailchimp_lists/mailchimp_lists.module \_mailchimp_lists_subscription_has_changed()
- 7.4 modules/mailchimp_lists/mailchimp_lists.module \_mailchimp_lists_subscription_has_changed()
- 2.x modules/mailchimp_lists/mailchimp_lists.module \_mailchimp_lists_subscription_has_changed()
Helper function to avoid sending superfluous updates to Mailchimp.
This is necessary due to the nature of the field implementation of subscriptions. If we don't do this, we send an update to mailchimp every time an entity is updated.
returns bool
1 call to _mailchimp_lists_subscription_has_changed()
- mailchimp_lists_process_subscribe_form_choices in modules/
mailchimp_lists/ mailchimp_lists.module - Processor for various list form submissions.
File
- modules/
mailchimp_lists/ mailchimp_lists.module, line 210 - Mailchimp lists/audiences module.
Code
function _mailchimp_lists_subscription_has_changed(MailchimpListsSubscription $instance, EntityInterface $entity, $email, $choices) {
$settings = $instance
->getFieldDefinition()
->getSettings();
if (isset($entity->original)) {
/* @var $original \Drupal\Core\Entity\EntityInterface */
$original = $entity->original;
// First compare Interest Group settings.
if ($settings['show_interest_groups']) {
$field_name = $instance
->getFieldDefinition()
->getName();
/* @var $old_field_settings \Drupal\mailchimp_lists\Plugin\Field\FieldType\MailchimpListsSubscription */
$old_field_settings = $original->{$field_name}
->get(0);
/* @var $new_field_settings \Drupal\mailchimp_lists\Plugin\Field\FieldType\MailchimpListsSubscription */
$new_field_settings = $entity->{$field_name}
->get(0);
$old_interest_groups = is_null($old_field_settings) ? [] : $old_field_settings
->getInterestGroups();
$new_interest_groups = $new_field_settings
->getInterestGroups();
foreach ($new_interest_groups as $id => $new_interests) {
// Check for change in entire interest group.
if (!isset($old_interest_groups[$id])) {
return TRUE;
}
$old_interests = $old_interest_groups[$id];
// Check for changes in individual interests.
foreach ($new_interests as $interest_id => $interest_status) {
if (!isset($old_interests[$interest_id]) || $old_interests[$interest_id] !== $interest_status) {
return TRUE;
}
}
}
}
// Compare merge field settings.
$mergevars = _mailchimp_lists_mergevars_populate($settings['merge_fields'], $entity);
$original_mergevars = _mailchimp_lists_mergevars_populate($settings['merge_fields'], $original);
return $mergevars != $original_mergevars;
}
else {
$member_info = mailchimp_get_memberinfo($settings['mc_list_id'], $email);
if (isset($member_info->merge_fields->GROUPINGS)) {
foreach ($member_info->merge_fields->GROUPINGS as $grouping) {
if (!isset($choices['interest_groups'][$grouping['id']])) {
return TRUE;
}
else {
if (!is_array($choices['interest_groups'][$grouping['id']])) {
// Standardize formatting of choices:
$choices['interest_groups'][$grouping['id']] = [
$choices['interest_groups'][$grouping['id']] => $choices['interest_groups'][$grouping['id']],
];
}
foreach ($grouping['groups'] as $group) {
$selected = isset($choices['interest_groups'][$grouping['id']][$group['name']]) && $choices['interest_groups'][$grouping['id']][$group['name']];
if ($group['interested'] && !$selected || !$group['interested'] && $selected) {
return TRUE;
}
}
}
}
}
}
// No changes detected.
return FALSE;
}