function civimailchimp_civicrm_contact_updated($old_contact, $new_contact)
{
    $mailchimp_sync_settings = CRM_CiviMailchimp_BAO_SyncSettings::findByContactId($new_contact->id);
    if ($mailchimp_sync_settings) {
        $old_contact_email = CRM_CiviMailchimp_Utils::determineMailchimpEmailForContact($old_contact);
        $new_contact_email = CRM_CiviMailchimp_Utils::determineMailchimpEmailForContact($new_contact);
        if ($old_contact_email === NULL && $new_contact_email !== NULL) {
            // Add contact to mailchimp list.
            CRM_CiviMailchimp_Utils::addUpdatedContactToMailchimpList($new_contact, $new_contact_email, $mailchimp_sync_settings);
        } elseif ($old_contact_email !== NULL && $new_contact_email === NULL) {
            // Remove contact from mailchimp list.
            CRM_CiviMailchimp_Utils::removeUpdatedContactFromMailchimpList($old_contact_email, $mailchimp_sync_settings);
        } elseif ($old_contact_email !== NULL && $new_contact_email !== NULL) {
            // Update contact record in mailcimp.
            CRM_CiviMailchimp_Utils::updateContactInMailchimpList($old_contact_email, $new_contact_email, $old_contact, $new_contact, $mailchimp_sync_settings);
        }
    }
}
 static function forceCiviToMailchimpSync($mailchimp_sync_setting)
 {
     $contacts = CRM_CiviMailchimp_Utils::getActiveGroupMembers($mailchimp_sync_setting->civicrm_group_id);
     $skipped_contacts = 0;
     foreach ($contacts as $key => $contact_id) {
         $contact = CRM_CiviMailchimp_Utils::getContactById($contact_id);
         if ($contact->is_deleted != 1) {
             $email = CRM_CiviMailchimp_Utils::determineMailchimpEmailForContact($contact);
             if ($email === NULL) {
                 ++$skipped_contacts;
                 unset($contacts[$key]);
             } else {
                 $merge_fields = CRM_CiviMailchimp_Utils::getMailchimpMergeFields($mailchimp_sync_setting->mailchimp_list_id);
                 $merge_vars = CRM_CiviMailchimp_Utils::formatMailchimpMergeVars($merge_fields, $contact);
                 CRM_CiviMailchimp_Utils::subscribeContactToMailchimpList($mailchimp_sync_setting->mailchimp_list_id, $email, $merge_vars);
             }
         }
     }
     if ($skipped_contacts > 0) {
         $message = ts('%1 records were not synced to Mailchimp because they did not have a valid email address.', array(1 => $skipped_contacts));
         CRM_CiviMailchimp_BAO_SyncLog::saveMessage('error', 'civicrm_to_mailchimp', $message);
     }
     return $contacts;
 }
 function testUpdateContactInMailchimpListNothingChanged()
 {
     $mailchimp_list_id = 'MailchimpListsTestListA';
     $mailchimp_sync_setting = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('Test Group test_contact_removed_from_group_nothing_changed', $mailchimp_list_id);
     $mailchimp_sync_settings = array($mailchimp_sync_setting);
     $old_contact_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $new_contact_params = $old_contact_params;
     $old_contact_created = CRM_Contact_BAO_Contact::create($old_contact_params);
     $old_contact = CRM_CiviMailchimp_Utils::getContactById($old_contact_created->id);
     $old_contact_email = CRM_CiviMailchimp_Utils::determineMailchimpEmailForContact($old_contact);
     $contact_ids = array($old_contact->id);
     CRM_Contact_BAO_GroupContact::addContactsToGroup($contact_ids, $mailchimp_sync_setting->civicrm_group_id);
     $new_contact_params['contact_id'] = $old_contact->id;
     $new_contact_created = CRM_Contact_BAO_Contact::create($new_contact_params);
     $new_contact = CRM_CiviMailchimp_Utils::getContactById($new_contact_created->id);
     $new_contact_email = CRM_CiviMailchimp_Utils::determineMailchimpEmailForContact($new_contact);
     $queue = CRM_Queue_Service::singleton()->create(array('type' => 'Sql', 'name' => 'mailchimp-sync', 'reset' => TRUE));
     CRM_CiviMailchimp_Utils::updateContactInMailchimpList($old_contact_email, $new_contact_email, $old_contact, $new_contact, $mailchimp_sync_settings);
     $this->assertEquals(0, $queue->numberOfItems());
 }