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