function mailchimp_lists_user_sync in Mailchimp 7.2
Update a user's setting in all required lists or add to cron queue.
@account $account @email string $old_email @email string $new_email @array $removed_roles
2 calls to mailchimp_lists_user_sync()
- mailchimp_lists_user_insert in modules/
mailchimp_lists/ mailchimp_lists.module - Implements hook_user_insert().
- mailchimp_lists_user_update in modules/
mailchimp_lists/ mailchimp_lists.module - Implements hook_user_update().
File
- modules/
mailchimp_lists/ mailchimp_lists.module, line 322 - Mailchimp lists module.
Code
function mailchimp_lists_user_sync($account, $old_email = '', $new_email = '', $roles_removed = FALSE) {
// Remove subscriptions if necessary:
// @todo: account for account status?
if ($roles_removed && !empty($old_email)) {
// Get a list of existing subscriptions:
$all_lists = mailchimp_lists_load_multiple();
foreach ($all_lists as $list) {
if (mailchimp_is_subscribed($list->mc_list_id, $old_email)) {
// Check if user still has a valid role for this list.
$valid_role = FALSE;
foreach ($account->roles as $role_id => $role_label) {
if (array_key_exists($role_id, $list->settings['roles'])) {
$valid_role = TRUE;
}
}
// Remove the user if they do not have a valid role:
if (!$valid_role) {
mailchimp_lists_execute_change('remove', $list, $account->mail);
}
}
}
}
// Add/update subscriptions if necessary:
$lists = mailchimp_lists_get_available_lists($account);
if (!empty($lists) && $account->status) {
// @todo: what about inactive accounts that are still registering?
$mcapi = mailchimp_get_api_object();
$lookup_email = !empty($old_email) ? $old_email : $account->mail;
$proper_email = !empty($new_email) ? $new_email : $account->mail;
foreach ($lists as $list) {
// Now we are ready to update or add this subscription.
// Was this account already subscribed?
if (mailchimp_is_subscribed($list->mc_list_id, $lookup_email)) {
// If so, we call for an update.
$mergevars = _mailchimp_lists_build_update_mergevars($account, $list, $lookup_email, $proper_email);
mailchimp_lists_execute_change('update', $list, $lookup_email, $mergevars, NULL, $mcapi);
}
elseif ($list->settings['required']) {
// This is a new account or required list that the account isn't already
// subscribed to, so we add them...
$mergevars = _mailchimp_lists_build_update_mergevars($account, $list, $lookup_email, $proper_email);
mailchimp_lists_execute_change('add', $list, $proper_email, $mergevars, $account, $mcapi);
}
}
}
}