You are here

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);
      }
    }
  }
}