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 testRemoveContactFromGroupMarkedAsNoBulkEmails()
 {
     $no_bulk_emails_on_unsubscribe = CRM_Core_BAO_Setting::setItem(1, 'CiviMailchimp Preferences', 'mailchimp_no_bulk_emails_on_unsubscribe');
     $params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $contact = CRM_Contact_BAO_Contact::create($params);
     $mailchimp_sync_setting = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('Test group testRemoveContactFromGroupMarkedAsNoBulkEmails');
     // Test that the contact is in the group
     $contact_ids = array($contact->id);
     CRM_Contact_BAO_GroupContact::addContactsToGroup($contact_ids, $mailchimp_sync_setting->civicrm_group_id);
     $contact_added_to_group = CRM_Contact_BAO_GroupContact::isContactInGroup($contact->id, $mailchimp_sync_setting->civicrm_group_id);
     $this->assertTrue($contact_added_to_group);
     // Test that the contact is removed from the group
     CRM_CiviMailchimp_Utils::removeContactFromGroup($contact, $mailchimp_sync_setting->mailchimp_list_id);
     $contact_added_to_group = CRM_Contact_BAO_GroupContact::isContactInGroup($contact->id, $mailchimp_sync_setting->civicrm_group_id);
     $this->assertFalse($contact_added_to_group);
     // Test that contact is marked as No Bulk Emails
     $updated_contact = CRM_CiviMailchimp_Utils::getContactById($contact->id);
     $this->assertEquals(1, $updated_contact->is_opt_out);
 }
/**
 * Implements hook_civicrm_pre for Individual and Organization edit.
 */
function civimailchimp_civicrm_pre_Contact_edit($contact_id, &$contact)
{
    $old_contact = CRM_CiviMailchimp_Utils::getContactById($contact_id);
    civimailchimp_static('old_contact', $old_contact);
}
 function testMailchimpWebhookCleaned()
 {
     $sample_data = self::sampleRequestSubscribeOrProfileUpdate();
     $contact = CRM_CiviMailchimp_Utils::createContactFromMailchimpRequest($sample_data);
     $sync_settings = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('test_group_mailchimp_webhook_cleaned');
     CRM_Contact_BAO_GroupContact::addContactsToGroup(array($contact->id), $sync_settings->civicrm_group_id);
     $email2 = new CRM_Core_BAO_Email();
     $email2->contact_id = $contact->id;
     $email2->email = 'civimailchimp_cleaned_test' . rand() . '@civimailchimp.org';
     $email2->save();
     $clean_request = self::getCleanRequestFromSampleProfileData($sample_data);
     CRM_CiviMailchimp_Page_Webhook::mailchimpWebhookCleaned($clean_request);
     $mailchimp_contact = CRM_CiviMailchimp_Utils::getContactById($contact->id);
     $this->assertEquals($mailchimp_contact->email[0]->on_hold, 1);
     $this->assertEquals($mailchimp_contact->email[1]->on_hold, 0);
 }
 function test_civimailchimp_civicrm_post_email_no_op()
 {
     $mailchimp_list_id = 'MailchimpListsTestListA';
     $mailchimp_sync_setting = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('Test Group test_civimailchimp_civicrm_post_email_no_op', $mailchimp_list_id);
     $op = 'edit';
     $object_name = 'Email';
     $params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $contact_created = CRM_Contact_BAO_Contact::create($params);
     $contact = CRM_CiviMailchimp_Utils::getContactById($contact_created->id);
     $contact->email[0]->email = "old_{$params['email'][0]['email']}";
     $contact_ids = array($contact->id);
     CRM_Contact_BAO_GroupContact::addContactsToGroup($contact_ids, $mailchimp_sync_setting->civicrm_group_id);
     $email_id = $contact->email[0]->id;
     $email = array();
     civimailchimp_static('mailchimp_static_reset', NULL, TRUE);
     civimailchimp_static('old_contact_from_email', $contact);
     $queue = CRM_Queue_Service::singleton()->create(array('type' => 'Sql', 'name' => 'mailchimp-sync', 'reset' => TRUE));
     civimailchimp_civicrm_post($op, $object_name, $email_id, $email);
     $item = $queue->claimItem();
     $this->assertEquals('updateContactProfileInMailchimp', $item->data->arguments[0]);
     $this->assertEquals($mailchimp_list_id, $item->data->arguments[1]);
     $this->assertEquals($contact->email[0]->email, $item->data->arguments[2]);
     $this->assertEquals($params['email'][0]['email'], $item->data->arguments[3]['new-email']);
 }