/** * Dotmailer Get Data Fields API * * @param array $params * @return array API result descriptor * @see civicrm_api3_create_success * @see civicrm_api3_create_error * @throws API_Exception */ function civicrm_api3_dotmailer_getdatafields($params) { $dotmailer = CRM_Dotmailer_Utils::dotmailer(); // Get list of data fields try { $results = $dotmailer->ContactDataFields(); } catch (Exception $e) { return array(); } $dataFields = array(); foreach ($results as $campaign) { $dataFields[$campaign->Id] = $campaign->Name; } return civicrm_api3_create_success($campaigns); }
static function processDotmailerSubscription($activityId) { // Check if API user details are set $apiEmail = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_email_address'); $apiPassword = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_password'); if (empty($apiEmail) || empty($apiPassword)) { return; } if (empty($activityId)) { return; } // Get activity details $activityDetails = civicrm_api3('Activity', 'getsingle', array('id' => $activityId)); // Return, if activity is not linked with any campaign if (empty($activityDetails['activity_type_id'])) { return; } if (!isset($activityDetails['campaign_id'])) { $activityDetails['campaign_id'] = 'NULL'; } // Check if we need to process this activity type /*$activityTypesToProcess = array(); $activityTypes = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'activity_types', NULL, FALSE ); $activityTypesToProcess = @unserialize($activityTypes); if (!in_array($activityDetails['activity_type_id'], $activityTypesToProcess)) { return; }*/ // Get Dotmailer subscription settings for the ACTIVITY TYPE & Campaign $dmSubscriptionSettings = CRM_Dotmailer_Utils::getDotmailerMappingDetailSingle($activityDetails['activity_type_id'], $activityDetails['campaign_id']); //if (empty($dmSubscriptionSettings)) { // Get Dotmailer subscription settings for the campaign //$dmSubscriptionSettings = CRM_Dotmailer_Utils::getDotmailerDetailsForCampaign($activityDetails['campaign_id']); //} if (empty($dmSubscriptionSettings->dotmailer_address_book_id) && empty($dmSubscriptionSettings->dotmailer_campaign_id)) { return; } //CRM_Core_Error::debug_var('dmSubscriptionSettings', $dmSubscriptionSettings); // Try to get contactId from activity, if not passed /*if (empty($contactId)) { // Get contact id for activity $contactId = CRM_Dotmailer_Utils::getContactIdForActivity($activityId); }*/ $contactId = CRM_Dotmailer_Utils::getContactIdForActivity($activityId); //CRM_Core_Error::debug_var('contactId', $contactId); // Return, if contact cant be found if (empty($contactId)) { return; } // Get contact details $contactDetails = civicrm_api3('Contact', 'getsingle', array('contact_id' => $contactId)); //CRM_Core_Error::debug_var('Contact Details', $result); // Dont subscribe to dotmailer, if email is empty if (empty($contactDetails['email'])) { return; } $params = array('version' => 3, 'sequential' => 1); $dotmailerAddressBookName = $dotmailerCampaignName = ''; $dotmailer = CRM_Dotmailer_Utils::dotmailer(); // Add to address book, if set if (!empty($dmSubscriptionSettings->dotmailer_address_book_id)) { $audienceType = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_audience_type'); if (empty($audienceType)) { $audienceType = 'B2B'; } $optInType = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_opt_in_type'); if (empty($optInType)) { $optInType = 'Single'; } $emailType = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_email_type'); if (empty($emailType)) { $emailType = 'Html'; } $notes = CRM_Core_BAO_Setting::getItem(CRM_Dotmailer_Form_Setting::DOTMAILER_SETTING_GROUP, 'api_notes'); if (empty($notes)) { $notes = 'Added from CiviCRM via API'; } $contact = array('Email' => $contactDetails['email'], 'AudienceType' => $audienceType, 'OptInType' => $optInType, 'EmailType' => $emailType, 'Notes' => $notes); $fields = array('FIRSTNAME' => $contactDetails['first_name'], 'LASTNAME' => $contactDetails['last_name'], 'FULLNAME' => $contactDetails['display_name'], 'GENDER' => $contactDetails['gender'], 'POSTCODE' => $contactDetails['postal_code']); // Populate data fields for Dotmailer with CiviCRM field values // if process custom field flag is set to yes if (DOTMAILER_PROCESS_CUSTOM_DATA_FIELDS == 1) { CRM_Dotmailer_Utils::populateDotmailerDataFields($fields, $activityId); } try { // Add the contact to address book using API $apiResult = $dotmailer->AddContactToAddressBook($contact, $fields, $dmSubscriptionSettings->dotmailer_address_book_id); //CRM_Core_Error::debug_var('apiResultAddressBook', $apiResult); if (!empty($apiResult->ID)) { // Get the address book name to save against activity $dmAddressBooks = civicrm_api('Dotmailer', 'getaddressbooks', $params); $dotmailerAddressBookName = $dmSubscriptionSettings->dotmailer_address_book_id . ' - ' . $dmAddressBooks['values'][$dmSubscriptionSettings->dotmailer_address_book_id]; } } catch (Exception $e) { CRM_Core_Error::debug_log_message('Dotmailer API - Not able to add contact to address book' . print_r($e, true)); } } // Send campaign to contact, if set if (!empty($dmSubscriptionSettings->dotmailer_campaign_id) && $dmSubscriptionSettings->dotmailer_campaign_id != 'NULL') { // Get the contact in Dotmailer $foundContact = $dotmailer->GetContactByEmail($contactDetails['email']); try { // Send the campaign for contact using API $apiResult = $dotmailer->SendCampaignToContact($dmSubscriptionSettings->dotmailer_campaign_id, $foundContact->ID, date('Y-m-d\\TH:i:s')); //CRM_Core_Error::debug_var('apiResultCampaign', $apiResult); if ($apiResult == 1) { // Get campaign name to save against activity $dmCampaigns = civicrm_api('Dotmailer', 'getcampaigns', $params); $dotmailerCampaignName = $dmSubscriptionSettings->dotmailer_campaign_id . ' - ' . $dmCampaigns['values'][$dmSubscriptionSettings->dotmailer_campaign_id]; } } catch (Exception $e) { CRM_Core_Error::debug_log_message('Dotmailer API - Not able to send campaign to contact' . print_r($e, true)); } } // Update activity custom fields $query = "REPLACE INTO civicrm_value_dotmailer_subscription SET entity_id = %1"; $params[1] = array($activityId, 'String'); if (!empty($dotmailerAddressBookName)) { $query .= ", dotmailer_address_book = %2"; $params[2] = array($dotmailerAddressBookName, 'String'); } if (!empty($dotmailerCampaignName)) { $query .= ", dotmailer_campaign = %3"; $params[3] = array($dotmailerCampaignName, 'String'); } CRM_Core_DAO::executeQuery($query, $params); }