/**
  * Add a Mailchimp subscriber to a CiviCRM Group.
  */
 static function mailchimpWebhookSubscribe($request_data)
 {
     $contacts = CRM_CiviMailchimp_Utils::getContactsWithPrimaryOrBulkEmail($request_data['email'], FALSE);
     if (empty($contacts)) {
         $mailchimp_contact = CRM_CiviMailchimp_Utils::createContactFromMailchimpRequest($request_data);
     } else {
         $mailchimp_contact = $contacts[0];
     }
     CRM_CiviMailchimp_Utils::addContactToGroup($mailchimp_contact, $request_data['list_id']);
 }
 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);
 }
 /**
  * Add a Mailchimp subscriber to a CiviCRM Group.
  */
 static function mailchimpWebhookSubscribe($request_data)
 {
     $config = CRM_Core_Config::singleton();
     if ($config->debug) {
         $request_data_log = print_r($request_data, TRUE);
         CRM_Core_Error::debug_log_message("Mailchimp Webhook Request [subscribe]: \nSearching for contacts with the following data.\n{$request_data_log}");
     }
     $contacts = CRM_CiviMailchimp_Utils::getContactsWithPrimaryOrBulkEmail($request_data['email'], FALSE);
     if (empty($contacts)) {
         $mailchimp_contact = CRM_CiviMailchimp_Utils::createContactFromMailchimpRequest($request_data);
         if ($config->debug) {
             $request_data_log = print_r($mailchimp_contact, TRUE);
             CRM_Core_Error::debug_log_message("Mailchimp Webhook Request [subscribe]: \nExisting contact not found, so a new contact record was created with the following details.\n{$request_data_log}");
         }
     } else {
         $mailchimp_contact = $contacts[0];
         if ($config->debug) {
             $request_data_log = print_r($mailchimp_contact, TRUE);
             CRM_Core_Error::debug_log_message("Mailchimp Webhook Request [subscribe]: \nExisting contact found with the following details.\n{$request_data_log}");
         }
     }
     CRM_CiviMailchimp_Utils::addContactToGroup($mailchimp_contact, $request_data['list_id']);
 }
 function testUpdateContactFromMailchimpRequest()
 {
     $request_data = CRM_CiviMailchimp_Page_WebhookTest::sampleRequestSubscribeOrProfileUpdate();
     $contact = CRM_CiviMailchimp_Utils::createContactFromMailchimpRequest($request_data);
     $rand = rand();
     $request_data['merges']['FNAME'] = "CiviNew{$rand}";
     $request_data['merges']['LNAME'] = "MailchimpNew{$rand}";
     $updated_contact = CRM_CiviMailchimp_Utils::updateContactFromMailchimpRequest($request_data, $contact);
     $this->assertEquals($contact->id, $updated_contact->id);
     $this->assertEquals($request_data['merges']['FNAME'], $updated_contact->first_name);
     $this->assertEquals($request_data['merges']['LNAME'], $updated_contact->last_name);
 }