/**
  * 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']);
 }
 /**
  * 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 testGetContactsWithPrimaryOrBulkEmail()
 {
     // Contact with one primary email.
     $primary_email_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $email = $primary_email_params['email'][0]['email'];
     $primary_email_contact = CRM_Contact_BAO_Contact::create($primary_email_params);
     // Contact with bulkmail email and primary email.
     $bulkmail_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $bulkmail_params['email'][0] = array('email' => $email, 'is_bulkmail' => 1, 'is_primary' => 0);
     $bulkmail_contact = CRM_Contact_BAO_Contact::create($bulkmail_params);
     // Contact set to Do Not Email.
     $do_not_email_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $do_not_email_params['do_not_email'] = 1;
     $do_not_email_contact = CRM_Contact_BAO_Contact::create($do_not_email_params);
     // Contact set to Opt Out of Bulk Emails.
     $is_opt_out_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $is_opt_out_params['is_opt_out'] = 1;
     $is_opt_out_contact = CRM_Contact_BAO_Contact::create($is_opt_out_params);
     // Contact with all emails On Hold.
     $on_hold_params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     $on_hold_params['email'][0]['on_hold'] = 1;
     $on_hold_contact = CRM_Contact_BAO_Contact::create($on_hold_params);
     $contacts = CRM_CiviMailchimp_Utils::getContactsWithPrimaryOrBulkEmail($email, $throw_exception = TRUE);
     $this->assertCount(2, $contacts);
     // Test the first contact.
     $this->assertEquals($email, $contacts[0]->email[0]->email);
     $this->assertEquals(1, $contacts[0]->email[0]->is_primary);
     $this->assertEquals(0, $contacts[0]->email[0]->on_hold);
     $this->assertEquals(0, $contacts[0]->do_not_email);
     $this->assertEquals(0, $contacts[0]->is_opt_out);
     // Test the second contact.
     $this->assertEquals($email, $contacts[1]->email[0]->email);
     $this->assertEquals(1, $contacts[1]->email[0]->is_bulkmail);
     $this->assertEquals(0, $contacts[1]->email[0]->on_hold);
     $this->assertEquals(0, $contacts[1]->do_not_email);
     $this->assertEquals(0, $contacts[1]->is_opt_out);
 }