$to_add = array(); foreach (array_chunk($report_members, 49, true) as $chunk) { $list_infos = $api->listMemberInfo($list_id, array_keys($chunk)); if (!empty($api->errorMessage)) { trigger_error("Mailchimp API Error calling listMemberInfo(): " . $api->errorMessage, E_USER_ERROR); } if ($DEBUG > 1) { bam("LIST INFOS:"); bam($list_infos); bam("========================"); } foreach ($list_infos['data'] as $list_member) { if (!empty($list_member['error'])) { $to_add[] = getMergeVars($chunk[strtolower($list_member['email_address'])], $list_member['email_address']); } else { $merge_vars = getMergeVars($chunk[strtolower($list_member['email'])], $list_member['email']); $do_update = FALSE; foreach ($merge_vars as $k => $v) { if (trim($list_member['merges'][$k]) != trim($v)) { if ($DEBUG) { bam("Difference found for " . $list_member['email']); } if ($DEBUG > 1) { bam("-------------\nJethro:"); bam($merge_vars); bam("-------------\nMailchimp:"); bam($list_member); bam("-------------"); } $do_update = TRUE; }
} if ($DEBUG) { bam($list_infos); } foreach ($list_infos['data'] as $list_member) { if (empty($list_member['error'])) { $merge_vars = getMergeVars($chunk[$list_member['email']], $list_member['email']); if ($merge_vars == $list_member['merges']) { // nothing to add or update so delete from $chunk unset($chunk[$list_member['email']]); } } } // $chunk now only contains report members who need to be added or updated. foreach ($chunk as $email => $data) { $to_add[] = getMergeVars($data, $email); } } if ($DEBUG) { bam("TO ADD / UPDATE:"); bam($to_add); } if (!empty($to_add)) { $api->listBatchSubscribe($list_id, $to_add, false, true); if (!empty($api->errorMessage)) { trigger_error("Mailchimp API Error calling listBatchSubscribe(): " . $api->errorMessage, E_USER_ERROR); } } // Then, for all list members, check if they are in the report members list and if not add them to the "remove" list. $list_members = $api->listMembers($list_id, 'subscribed', null, 0, 10000); if (!empty($api->errorMessage)) {