function run()
 {
     if (CRM_Utils_System::authenticateKey()) {
         $request_type = CRM_Utils_Request::retrieve('type', 'String');
         $request_data = CRM_Utils_Request::retrieve('data', 'String');
         $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 [{$request_type}]: \n{$request_data_log}");
         }
         $function_name = 'self::mailchimpWebhook' . ucwords($request_type);
         if (is_callable($function_name)) {
             // Set a canary to prevent CiviMailchimp hooks from firing, which
             // would trigger updates back to Mailchimp, resulting in an endless
             // loop.
             civimailchimp_static('mailchimp_do_not_run_hooks', TRUE);
             try {
                 call_user_func($function_name, $request_data);
             } catch (Exception $e) {
                 $error = array('code' => get_class($e), 'message' => $e->getMessage(), 'exception' => $e);
                 $message = "Mailchimp Webhook Request [{$request_type}]: {$error['code']}: {$error['message']}";
                 CRM_CiviMailchimp_BAO_SyncLog::saveMessage('error', 'mailchimp_to_civicrm', $message, $request_data);
                 CRM_Core_Error::debug_var('Fatal Error Details', $error);
                 CRM_Core_Error::backtrace('backTrace', TRUE);
                 throw $e;
             }
         }
     }
     parent::run();
 }
 function tearDown()
 {
     // Normally, we wouldn't want to truncate any tables as it makes running
     // the tests slower and opens the door for writing test that aren't self-
     // sufficient, but we're forced into this as CiviUnitTestCase forces a
     // quickCleanup on civicrm_contact in its tearDown. :(
     $this->quickCleanup(array('civicrm_email', 'civicrm_queue_item', 'civimailchimp_sync_settings', 'civimailchimp_interest_groups_sync_settings', 'civimailchimp_sync_log'));
     civimailchimp_static('mailchimp_static_reset', NULL, TRUE);
     parent::tearDown();
 }
 function testForceCiviToMailchimpSyncNullEmail()
 {
     $mailchimp_sync_setting = CRM_CiviMailchimp_BAO_SyncSettingsTest::createTestGroupAndSyncSettings('Test Group testForceCiviToMailchimpSyncNullEmail');
     $params = CRM_CiviMailchimp_UtilsTest::sampleContactParams();
     unset($params['email']);
     $contact = CRM_Contact_BAO_Contact::create($params);
     $contact_ids = array($contact->id);
     CRM_Contact_BAO_GroupContact::addContactsToGroup($contact_ids, $mailchimp_sync_setting->civicrm_group_id);
     $contacts = CRM_CiviMailchimp_Form_Sync::forceCiviToMailchimpSync($mailchimp_sync_setting);
     $mailchimp_api_subscribe = civimailchimp_static('mailchimp_api_subscribe');
     $this->assertCount(0, $contacts);
     $this->assertNull($mailchimp_api_subscribe);
 }
 /**
  * @see Mailchimp_Lists::webhookDel()
  */
 public function webhookDel($id, $url)
 {
     $webhooks = $this->defaultWebhooks();
     if (isset($webhooks[$id])) {
         if ($url === $webhooks[$id]) {
             $response = array('complete' => true);
         } else {
             $response = array('status' => 'error', 'code' => 200, 'name' => 'Invalid_URL');
         }
     } else {
         $response = array('status' => 'error', 'code' => 200, 'name' => 'List_DoesNotExist');
     }
     civimailchimp_static('mailchimp_api_webhookDel', TRUE);
     return $response;
 }
/**
 * Implementation of hook_civicrm_post
 */
function civimailchimp_civicrm_post($op, $object_name, $object_id, &$object)
{
    if (!civimailchimp_static('mailchimp_do_not_run_hooks')) {
        if ($object_name === "Individual" || $object_name === "Organization") {
            $object_name = "Contact";
        }
        $function_name_object_op = "civimailchimp_civicrm_post_{$object_name}_{$op}";
        $function_name_object = "civimailchimp_civicrm_post_{$object_name}";
        if (is_callable($function_name_object_op)) {
            call_user_func($function_name_object_op, $object_id, $object);
        } elseif (is_callable($function_name_object)) {
            call_user_func($function_name_object, $op, $object_id, $object);
        }
    }
}
 function test_civimailchimp_static_reset()
 {
     civimailchimp_static('test_civimailchimp_static_reset', TRUE);
     civimailchimp_static('test_civimailchimp_static_reset', NULL, TRUE);
     $test_civimailchimp_static_reset = civimailchimp_static('test_civimailchimp_static_reset');
     $this->assertEmpty($test_civimailchimp_static_reset);
 }