function mailchimp_lists_process_subscribe_form_choices in Mailchimp 7.5
Same name and namespace in other branches
- 8 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/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');
}
}
}