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