function mailchimp_lists_add_to_segment_action in Mailchimp 7.4
Same name and namespace in other branches
- 7.5 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_add_to_segment_action()
- 7.3 modules/mailchimp_lists/mailchimp_lists.module \mailchimp_lists_add_to_segment_action()
Action function for the Add To Segment action.
Does the actual subscription work. Builds a queue of segment adds and then intermittently builds a batched API action from the queue and sends to Mailchimp.
File
- modules/
mailchimp_lists/ mailchimp_lists.module, line 718
Code
function mailchimp_lists_add_to_segment_action($entity, $context = array()) {
list($id, $vid, $bundle) = entity_extract_ids($context['entity_type'], $entity);
$list_id = $context['mc_list_id'];
$field_instance = field_info_instance($context['entity_type'], $context['mailchimp_field'], $bundle);
$email = mailchimp_lists_load_email($field_instance, $entity);
$queue_id = 'mailchimp_lists_action_' . $list_id . '_' . $context['segment_id'];
if ($email) {
mailchimp_segment_add_subscriber($list_id, $context['segment_id'], $email, TRUE, $queue_id);
}
// Send to Mailchimp in a batch when we are done, or when we reach 10000, as
// 10000 records is the maximum batch size Mailchimp recommends.
if ($context['progress']['current'] == $context['progress']['total'] || !($context['progress']['current'] % 10000)) {
$batch_queue = DrupalQueue::get($queue_id);
$batch_queue
->createQueue();
$queue_count = $batch_queue
->numberOfItems();
if ($queue_count > 0) {
$count = 0;
$batch = array();
while ($count < $queue_count) {
if ($item = $batch_queue
->claimItem()) {
$batch[] = $item->data['item'];
$batch_queue
->deleteItem($item);
}
$count++;
}
mailchimp_segment_batch_add_subscribers($list_id, $context['segment_id'], $batch);
}
}
}