/** * Subscribes to Campaign Monitor list. Returns either "success" string or error message. * @return string */ function subscribe_campaign_monitor($api_key, $email, $list_id, $name = '') { require_once RAD_RAPIDOLOGY_PLUGIN_DIR . 'subscription/createsend-php-4.0.2/csrest_subscribers.php'; $auth = array('api_key' => $api_key); $wrap = new CS_REST_Subscribers($list_id, $auth); $is_subscribed = $wrap->get($email); if ($is_subscribed->was_successful()) { $error_message = __('Already subscribed', 'rapidology'); } else { $result = $wrap->add(array('EmailAddress' => $email, 'Name' => $name, 'Resubscribe' => false)); if ($result->was_successful()) { $error_message = 'success'; } else { $error_message = $result->response->message; } } return $error_message; }
public static function donation_button_campaign_monitor_handler($posted) { $cm_api_key = get_option("campaignmonitor_api_key"); $client_id = get_option("campaignmonitor_client_id"); $cm_list_id = get_option("campaignmonitor_lists"); $fname = isset($posted['first_name']) ? $posted['first_name'] : ''; $lname = isset($posted['last_name']) ? $posted['last_name'] : ''; $email = isset($posted['payer_email']) ? $posted['payer_email'] : $posted['receiver_email']; $debug = get_option('log_enable_campaignmonitor') == 'yes' ? 'yes' : 'no'; if ('yes' == $debug) { $log = new Donation_Button_Logger(); } if (isset($cm_api_key) && !empty($cm_api_key) && (isset($client_id) && !empty($client_id)) && (isset($cm_list_id) && !empty($cm_list_id))) { include_once DBP_PLUGIN_DIR_PATH . '/admin/partials/lib/campaign_monitor/csrest_subscribers.php'; $wrap = new CS_REST_Subscribers($cm_list_id, $cm_api_key); try { $response = $wrap->get($email); if ($response->http_status_code == "200") { $result = $wrap->update($email, array('EmailAddress' => $email, 'Name' => $fname . ' ' . $lname, 'CustomFields' => array(), 'Resubscribe' => true)); if ("yes" == $debug) { if ($response->response->State == "Unsubscribed") { $log->add('CampaignMonitor', ' CampaignMonitor new contact ' . $email . ' added to selected contact list'); } else { $log->add('CampaignMonitor', ' CampaignMonitor update contact ' . $email . ' to selected contact list'); } } } else { $result = $wrap->add(array('EmailAddress' => $email, 'Name' => $fname . ' ' . $lname, 'CustomFields' => array(), 'Resubscribe' => true)); if (isset($result) && 'yes' == $debug) { $log->add('CampaignMonitor', ' CampaignMonitor new contact ' . $email . ' added to selected contact list'); } } } catch (Exception $e) { if ('yes' == $debug) { $log->add('CampaignMonitor', prin_r($e, true)); } } } else { if ('yes' == $debug) { $log->add('CampaignMonitor', 'Campaign Monitor API Key OR Campaign Monitor Client ID does not set'); } } }
<?php require_once '../../csrest_subscribers.php'; $wrap = new CS_REST_Subscribers('Your list ID', 'Your API Key'); $result = $wrap->get('Email address'); echo "Result of GET /api/v3/subscribers/{list id}.{format}?email={email}\n<br />"; if ($result->was_successful()) { echo "Got subscriber <pre>"; var_dump($result->response); } else { echo 'Failed with code ' . $result->http_status_code . "\n<br /><pre>"; var_dump($result->response); } echo '</pre>';
$campaignmonitor_contact['Resubscribe'] = true; $campaignmonitor_contact['CustomFields'] = array(); // FIELDS if (!empty($list_v['fields'])) { foreach ($list_v['fields'] as $field_v) { if ($field_v['list_field_id'] == 'EmailAddress' || $field_v['list_field_id'] == 'Name') { // 'Name' IS NOT a mandatory field $campaignmonitor_contact[$field_v['list_field_id']] = getElementValue($field_v['element_id']); } if ($field_v['list_field_id'] != 'EmailAddress' && $field_v['list_field_id'] != 'Name') { $campaignmonitor_contact['CustomFields'][] = array('Key' => $field_v['list_field_id'], 'Value' => getElementValue($field_v['element_id'])); } } $wrap = new CS_REST_Subscribers($list_id, $campaignmonitor_auth); if (!$list_v['updateexistingcontact']) { $cm_search_res = $wrap->get($campaignmonitor_contact['EmailAddress']); if ($contactform_obj->cfg['debug']) { echo 'SEARCH RESULTS ' . "\r\n"; print_r($cm_search_res); echo "\r\n"; } } /** * Error response 203 returns : Subscriber not in list or has already been removed. * Error response 203 : Email Address does not belong to the list. Subscriber not updated. * https://www.campaignmonitor.com/api/subscribers/#updating_a_subscriber */ if (isset($cm_search_res) && isset($cm_search_res->response->Code) && $cm_search_res->response->Code == 203 || $list_v['updateexistingcontact']) { // If the subscriber (email address) already exists, their name and any custom field values are updated with whatever is passed in. $result = $wrap->add($campaignmonitor_contact); if ($contactform_obj->cfg['debug']) {
/** * Ajax newsletter * * @since 1.0.0 */ public function ajax_subscribe() { // No First Name if (!isset($_POST['first_name'])) { $_POST['first_name'] = ''; } // No Last Name if (!isset($_POST['last_name'])) { $_POST['last_name'] = ''; } $success_message = stripcslashes( $this->settings['subscribe']['success_message'] ); // MailChimp if ($_POST['type'] == 'mailchimp') { require_once('includes/mailchimp/MailChimp.php'); if (!isset($this->settings['subscribe']['mailchimp']['api_key']) || $this->settings['subscribe']['mailchimp']['api_key'] == '') { echo json_encode(array( 'status' => 'warning', 'message' => __('MailChimp account is not setup properly.'), )); die(); } if (!isset($this->settings['subscribe']['mailchimp']['list']) || $this->settings['subscribe']['mailchimp']['list'] == '') { echo json_encode(array( 'status' => 'warning', 'message' => __('MailChimp: No list specified.'), )); die(); } $MailChimp = new WPS_MailChimp($this->settings['subscribe']['mailchimp']['api_key']); $result = $MailChimp->call('lists/subscribe', array( 'id' => $this->settings['subscribe']['mailchimp']['list'], 'email' => array('email'=>sanitize_email( $_POST['email']) ), 'merge_vars' => array( 'FNAME'=> sanitize_text_field( $_POST['first_name'] ), 'LNAME'=>sanitize_text_field( $_POST['last_name'] ) ), 'double_optin' => true, 'update_existing' => false, 'replace_interests' => false, 'send_welcome' => true, )); if ($result) { if (isset($result['email'])) { echo json_encode(array( 'status' => 'check', 'message' => $success_message, )); die(); } else if (isset($result['status']) && $result['status'] == 'error') { echo json_encode(array( 'status' => 'warning', 'message' => $result['error'], )); die(); } } else { echo json_encode(array( 'status' => 'warning', 'message' => __('Unable to subscribe.'), )); die(); } } // Add email to aweber else if ($_POST['type'] == 'aweber') { require_once('includes/aweber/aweber_api.php'); if (!isset($this->settings['subscribe']['aweber']['consumer_key']) || $this->settings['subscribe']['aweber']['consumer_key'] == '') { echo json_encode(array( 'status' => 'warning', 'message' => __('Aweber account is not setup properly'), )); die(); } $aweber = new AWeberAPI($this->settings['subscribe']['aweber']['consumer_key'], $this->settings['subscribe']['aweber']['consumer_secret']); try { $account = $aweber->getAccount($this->settings['subscribe']['aweber']['access_key'], $this->settings['subscribe']['aweber']['access_secret']); $list = $account->loadFromUrl('/accounts/' . $account->id . '/lists/' . $this->settings['subscribe']['aweber']['list']); $subscriber = array( 'email' => sanitize_email( $_POST['email'] ), 'name' => sanitize_text_field( $_POST['first_name'] ) . ' ' . sanitize_text_field( $_POST['last_name'] ), 'ip' => $_SERVER['REMOTE_ADDR'] ); $newSubscriber = $list->subscribers->create($subscriber); echo json_encode(array( 'status' => 'check', 'message' => $success_message, )); die(); } catch (AWeberAPIException $exc) { echo json_encode(array( 'status' => 'warning', 'message' => $exc->message, )); die(); } } // Add email to Get Response else if ($_POST['type'] == 'getresponse') { require_once('includes/getresponse/jsonRPCClient.php'); $api = new jsonRPCClient('http://api2.getresponse.com'); try { $api->add_contact( $this->settings['subscribe']['getresponse']['api_key'], array ( 'campaign' => $this->settings['subscribe']['getresponse']['campaign'], 'name' => sanitize_text_field( $_POST['first_name'] ) . ' ' . sanitize_text_field( $_POST['last_name'] ), 'email' => sanitize_email( $_POST['email'] ), ) ); echo json_encode(array( 'status' => 'check', 'message' => $success_message, )); die(); } catch (RuntimeException $exc) { $msg = $exc->getMessage(); $msg = substr($msg, 0, strpos($msg, ";")); echo json_encode(array( 'status' => 'warning', 'message' => $msg, )); die(); } } // Add email to Campaign Monitor else if ($_POST['type'] == 'campaignmonitor') { require_once('includes/campaignmonitor/csrest_subscribers.php'); $wrap = new CS_REST_Subscribers($this->settings['subscribe']['campaignmonitor']['list'], $this->settings['subscribe']['campaignmonitor']['api_key']); // Check if subscribor is already subscribed $result = $wrap->get(sanitize_email( $_POST['email'] )); if ($result->was_successful()) { echo json_encode(array( 'status' => 'warning', 'message' => 'You are already subscribed to this list.', )); die(); } $result = $wrap->add(array( 'EmailAddress' => sanitize_email($_POST['email']), 'Name' => sanitize_text_field( $_POST['first_name'] ). ' ' . sanitize_text_field( $_POST['last_name'] ), 'Resubscribe' => true )); if ($result->was_successful()) { echo json_encode(array( 'status' => 'check', 'message' => $success_message, )); die(); } else { echo json_encode(array( 'status' => 'warning', 'message' => $result->response->Message, )); die(); } } // Add email to Mad Mimi else if ($_POST['type'] == 'madmimi') { require_once('includes/madmimi/MadMimi.class.php'); $mailer = new MadMimi($this->settings['subscribe']['madmimi']['username'], $this->settings['subscribe']['madmimi']['api_key']); // No Email if (!isset($_POST['email']) || $_POST['email'] == '') { echo json_encode(array( 'status' => 'warning', 'message' => 'No Email address provided.' )); die(); } // Invalid Email Address if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo json_encode(array( 'status' => 'warning', 'message' => 'Invalid Email provided.' )); die(); } try { // Check if user is already in list $result = $mailer->Memberships(sanitize_email( $_POST['email']) ); $lists = new SimpleXMLElement($result); if ($lists->list) { foreach ($lists->list as $l) { if ($l->attributes()->{'name'}->{0} == $meta_values['madmimi_list']) { echo json_encode(array( 'status' => 'check', 'message' => 'You are already subscribed to this list.', )); die(); } } } $result = $mailer->AddMembership($this->settings['subscribe']['madmimi']['list'], sanitize_email( $_POST['email'] ), array( 'first_name' => sanitize_text_field( $_POST['first_name'] ), 'last_name' => sanitize_text_field( $_POST['last_name'] ), )); echo json_encode(array( 'status' => 'check', 'message' => $success_message, )); die(); } catch (RuntimeException $exc) { echo json_encode(array( 'status' => 'warning', 'message' => $msg, )); die(); } } die(); }
public function indexAction() { $session = Mage::getSingleton('core/session'); // Don't do anything if we didn't get the email parameter if (isset($_GET['email'])) { $email = $_GET['email']; // Get the CampaignMonitor credentials if (Mage::helper('campaignmonitor')->isOAuth()) { $accessToken = Mage::getModel('campaignmonitor/auth')->getAccessToken(); $refreshToken = Mage::getModel('campaignmonitor/auth')->getRefreshToken(); $auth = array('access_token' => $accessToken, 'refresh_token' => $refreshToken); } else { $auth = Mage::helper('campaignmonitor')->getApiKey(); } $listID = Mage::helper('campaignmonitor')->getListId(); // Check that the email address actually is unsubscribed in Campaign Monitor. if ($auth && $listID) { // Retrieve the subscriber try { $client = new CS_REST_Subscribers($listID, $auth); $result = $client->get($email); if (!$result->was_successful()) { // If you receive '121: Expired OAuth Token', refresh the access token if ($result->response->Code == 121) { // Refresh the token Mage::helper('campaignmonitor')->refreshToken(); } // Make the call again $result = $client->get($email); } } catch (Exception $e) { Mage::helper('campaignmonitor')->log(sprintf("Error in SOAP call: %s", $e->getMessage())); $session->addException($e, $this->__('There was a problem with the unsubscription')); $this->_redirectReferer(); } // Get the subscription state $state = ""; try { if ($result->was_successful() && isset($result->response->State)) { $state = $result->response->State; } } catch (Exception $e) { Mage::helper('campaignmonitor')->log(sprintf("Error in SOAP call: %s", $e->getMessage())); $session->addException($e, $this->__('There was a problem with the unsubscription')); $this->_redirectReferer(); } // If we are unsubscribed, deleted or not subscribed in Campaign Monitor, mark us as // unsubscribed in Magento. if ($state != "Unsubscribed" && $state != "Not Subscribed" && $state != "Deleted") { try { $result = $client->unsubscribe($email); if (!$result->was_successful()) { // If you receive '121: Expired OAuth Token', refresh the access token if ($result->response->Code == 121) { // Refresh the token Mage::helper('campaignmonitor')->refreshToken(); } // Make the call again $result = $client->unsubscribe($email); } if ($result->was_successful()) { Mage::getModel('newsletter/subscriber')->loadByEmail($email)->unsubscribe(); Mage::getSingleton('customer/session')->addSuccess($this->__('You were successfully unsubscribed')); } } catch (Exception $e) { Mage::helper('campaignmonitor')->log(sprintf("%s", $e->getMessage())); Mage::getSingleton('customer/session')->addError($this->__('There was an error while saving your subscription details')); } } elseif ($state == "Unsubscribed" || $state == "Not Subscribed" || $state == "Deleted") { try { $subscriberStatus = Mage::getModel('newsletter/subscriber')->loadByEmail($email)->getStatus(); // 2 = Not Activated // 1 = Subscribed // 3 = Unsubscribed // 4 = Unconfirmed if ($subscriberStatus != 3) { Mage::getModel('newsletter/subscriber')->loadByEmail($email)->unsubscribe(); Mage::getSingleton('customer/session')->addSuccess($this->__('You were successfully unsubscribed')); $block = Mage::getModel('cms/block')->load('unsubscribe-custom-message'); if ($block) { Mage::getSingleton('customer/session')->addNotice($block->getContent()); } } else { Mage::getSingleton('customer/session')->addSuccess($this->__('You have already unsubscribed to our newsletter, click <a href="/subscribe">here</a> to resubscribe')); } } catch (Exception $e) { Mage::helper('campaignmonitor')->log(sprintf("%s", $e->getMessage())); Mage::getSingleton('customer/session')->addError($this->__('There was an error while saving your subscription details')); } } else { Mage::helper('campaignmonitor')->log($this->__("Not unsubscribing %s, not unsubscribed in Campaign Monitor", $email)); } } } $this->_redirect('/'); }
public function onUserBeforeDelete(Am_Event $event) { $user = $event->getUser(); $products = $user->getActiveProductIds(); if (!empty($products)) { return; } $list_ids = $this->getDi()->newsletterUserSubscriptionTable->getSubscribedIds($user->pk()); $lists = array(); foreach ($this->getDi()->newsletterListTable->loadIds($list_ids) as $list) { if ($list->plugin_id != $this->getId()) { continue; } $lists[] = $list->plugin_list_id; } if (empty($lists)) { return; } require_once 'lib/csrest_subscribers.php'; foreach ($lists as $listId) { $wrap = new CS_REST_Subscribers($listId, array('api_key' => $this->getConfig('api_key'))); $result = $wrap->get($user->email); if (!$result->was_successful()) { continue; } $result = $wrap->unsubscribe($user->email); if (!$result->was_successful()) { throw new Am_Exception_InternalError("Cannot unsubscribe user {$user->email} by reason: {$result->http_status_code}"); } } $this->debugLog("onUserBeforeDelete: user #{$user->pk()} was unsubscribed from lists (" . json_encode($lists) . ")"); }
/** * Record an impression made by a optin fire * This function is called via PHP. * * @access public * @static * @return void */ function nnr_new_int_add_email_v1() { do_action('nnr_news_int_before_submission_add_email_v1'); // No First Name if (!isset($_POST['first_name'])) { $_POST['first_name'] = ''; } // No Last Name if (!isset($_POST['last_name'])) { $_POST['last_name'] = ''; } // Could not find Data ID if (!isset($_POST['data_id']) || $_POST['data_id'] == '') { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('Could not find Data ID.', $_POST['text_domain']))); die; } // Get all newsletter data for this data instance $data_manager = new NNR_Data_Manager_v1($_POST['table_name']); $data_instance = $data_manager->get_data_from_id($_POST['data_id']); $success_action = isset($data_instance['args']['newsletter']['success_action']) ? stripcslashes($data_instance['args']['newsletter']['success_action']) : 'message'; $success_mesage = isset($data_instance['args']['newsletter']['success_message']) ? stripcslashes($data_instance['args']['newsletter']['success_message']) : __('Welcome to the community!', $_POST['text_domain']); $success_url = isset($data_instance['args']['newsletter']['success_url']) ? stripcslashes($data_instance['args']['newsletter']['success_url']) : ''; // No Email if (!isset($_POST['email']) || $_POST['email'] == '') { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('No Email address provided.', $_POST['text_domain']))); die; } // Invalid Email Address if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('Invalid Email provided.', $_POST['text_domain']))); die; } // WordPress if ($_POST['type'] == 'wordpress') { $newsletter_db = new NNR_Newsletter_Integrations_Submission_v1($_POST['news_table_name']); $result = $newsletter_db->add_data(array('data_id' => $_POST['data_id'], 'email' => $_POST['email'], 'first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'])); if ($result) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'message' => __('We already have your email!', $_POST['text_domain']))); die; } } else { if ($_POST['type'] == 'mailchimp') { require_once dirname(dirname(__FILE__)) . '/services/mailchimp/MailChimp.php'; if (!isset($data_instance['args']['newsletter']['mailchimp']['api_key']) || $data_instance['args']['newsletter']['mailchimp']['api_key'] == '') { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('MailChimp account is not setup properly.', $_POST['text_domain']))); die; } if (!isset($data_instance['args']['newsletter']['mailchimp']['list']) || $data_instance['args']['newsletter']['mailchimp']['list'] == '') { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('MailChimp: No list specified.', $_POST['text_domain']))); die; } if (!isset($data_instance['args']['newsletter']['mailchimp']['optin'])) { $data_instance['args']['newsletter']['mailchimp']['optin'] = true; } $MailChimp = new NNR_New_Int_MailChimp($data_instance['args']['newsletter']['mailchimp']['api_key']); $result = $MailChimp->call('lists/subscribe', array('id' => $data_instance['args']['newsletter']['mailchimp']['list'], 'email' => array('email' => $_POST['email']), 'merge_vars' => array('FNAME' => $_POST['first_name'], 'LNAME' => $_POST['last_name']), 'double_optin' => $data_instance['args']['newsletter']['mailchimp']['optin'], 'update_existing' => false, 'replace_interests' => false, 'send_welcome' => true)); if ($result) { if (isset($result['email'])) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { if (isset($result['status']) && $result['status'] == 'error') { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $result['error'])); die; } } } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('Unable to subscribe.', $_POST['text_domain']))); die; } } else { if ($_POST['type'] == 'aweber') { require_once dirname(dirname(__FILE__)) . '/services/aweber/aweber_api.php'; $aweber = new AWeberAPI($data_instance['args']['newsletter']['aweber']['consumer_key'], $data_instance['args']['newsletter']['aweber']['consumer_secret']); try { $account = $aweber->getAccount($data_instance['args']['newsletter']['aweber']['access_key'], $data_instance['args']['newsletter']['aweber']['access_secret']); $list = $account->loadFromUrl('/accounts/' . $account->id . '/lists/' . $data_instance['args']['newsletter']['aweber']['list_id']); $subscriber = array('email' => $_POST['email'], 'name' => $_POST['first_name'] . ' ' . $_POST['last_name'], 'ip' => $_SERVER['REMOTE_ADDR']); $newSubscriber = $list->subscribers->create($subscriber); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } catch (AWeberAPIException $exc) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $exc->message)); die; } } else { if ($_POST['type'] == 'getresponse') { require_once dirname(dirname(__FILE__)) . '/services/getresponse/jsonRPCClient.php'; $api = new jsonRPCClient('http://api2.getresponse.com'); try { $api->add_contact($data_instance['args']['newsletter']['getresponse']['api_key'], array('campaign' => $data_instance['args']['newsletter']['getresponse']['campaign'], 'name' => $_POST['first_name'] . ' ' . $_POST['last_name'], 'email' => $_POST['email'])); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } catch (RuntimeException $exc) { $msg = $exc->getMessage(); $msg = substr($msg, 0, strpos($msg, ";")); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $msg)); die; } } else { if ($_POST['type'] == 'campaignmonitor') { require_once dirname(dirname(__FILE__)) . '/services/campaignmonitor/csrest_subscribers.php'; $wrap = new CS_REST_Subscribers($data_instance['args']['newsletter']['campaignmonitor']['list'], $data_instance['args']['newsletter']['campaignmonitor']['api_key']); // Check if subscriber is already subscribed $result = $wrap->get($_POST['email']); if ($result->was_successful()) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('You are already subscribed to this list.', $_POST['text_domain']))); die; } $result = $wrap->add(array('EmailAddress' => $_POST['email'], 'Name' => $_POST['first_name'] . ' ' . $_POST['last_name'], 'Resubscribe' => true)); if ($result->was_successful()) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $result->response->Message)); die; } } else { if ($_POST['type'] == 'madmimi') { require_once dirname(dirname(__FILE__)) . '/services/madmimi/MadMimi.class.php'; $mailer = new MadMimi($data_instance['args']['newsletter']['madmimi']['username'], $data_instance['args']['newsletter']['madmimi']['api_key']); try { // Check if user is already in list $result = $mailer->Memberships($_POST['email']); $lists = new SimpleXMLElement($result); if ($lists->list) { foreach ($lists->list as $l) { if ($l->attributes()->{'name'}->{0} == $data_instance['args']['newsletter']['madmimi']['list']) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'message' => __('You are already subscribed to this list.', $_POST['text_domain']))); die; } } } $result = $mailer->AddMembership($data_instance['args']['newsletter']['madmimi']['list'], $_POST['email'], array('first_name' => $_POST['first_name'], 'last_name' => $_POST['last_name'])); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } catch (RuntimeException $exc) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $msg)); die; } } else { if ($_POST['type'] == 'infusionsoft') { require_once dirname(dirname(__FILE__)) . '/services/infusionsoft/isdk.php'; try { $infusion_app = new iSDK(); $infusion_app->cfgCon($data_instance['args']['newsletter']['infusionsoft']['app_id'], $data_instance['args']['newsletter']['infusionsoft']['api_key'], 'throw'); } catch (iSDKException $e) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $e->getMessage())); die; } if (empty($error_message)) { $contact_data = $infusion_app->dsQuery('Contact', 1, 0, array('Email' => $_POST['email']), array('Id', 'Groups')); // Check if contact already exists if (0 < count($contact_data)) { if (false === strpos($contact_data[0]['Groups'], $data_instance['args']['newsletter']['infusionsoft']['list'])) { $infusion_app->grpAssign($contact_data[0]['Id'], $data_instance['args']['newsletter']['infusionsoft']['list']); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'message' => __('You are already subscribed to this list.', $_POST['text_domain']))); die; } } else { $new_contact_id = $infusion_app->dsAdd('Contact', array('FirstName' => $_POST['first_name'], 'LastName' => $_POST['last_name'], 'Email' => $_POST['email'])); $infusion_app->grpAssign($new_contact_id, $data_instance['args']['newsletter']['infusionsoft']['list']); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } } } else { if ($_POST['type'] == 'mymail') { // Check if plugin is activated if (!function_exists('mymail')) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('MyMail is not activated.', $_POST['text_domain']))); die; } // Add subscriber $subscriber_id = mymail('subscribers')->add(array('email' => $_POST['email'], 'firstname' => $_POST['first_name'], 'lastname' => $_POST['last_name']), false); // Add to List if (!is_wp_error($subscriber_id)) { mymail('subscribers')->assign_lists($subscriber_id, array($data_instance['args']['newsletter']['mymail']['list'])); echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'message' => __('You are already subscribed to this list.', $_POST['text_domain']))); die; } } else { if ($_POST['type'] == 'activecampaign') { require_once dirname(dirname(__FILE__)) . '/services/activecampaign/ActiveCampaign.class.php'; $ac = new ActiveCampaign($data_instance['args']['newsletter']['activecampaign']['app_url'], $data_instance['args']['newsletter']['activecampaign']['api_key']); if (!(int) $ac->credentials_test()) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('Unable to to connect to Active Campaign.', $_POST['text_domain']))); die; } // Add subscriber $contact_sync = $ac->api("contact/add", array("email" => $_POST['email'], "first_name" => $_POST['first_name'], "last_name" => $_POST['last_name'], "p[" . $data_instance['args']['newsletter']['activecampaign']['list'] . "]" => $data_instance['args']['newsletter']['activecampaign']['list'], "status[" . $data_instance['args']['newsletter']['activecampaign']['list'] . "]" => 1)); if ((int) $contact_sync->success) { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'check', 'success_action' => $success_action, 'url' => $success_url, 'message' => $success_mesage, 'conversion' => apply_filters('nnr_news_int_submission_success_v1', array('data_id' => $_POST['data_id'], 'table_name' => $_POST['stats_table_name'])))); die; } else { echo json_encode(array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => $contact_sync->error)); die; } } } } } } } } } } do_action('nnr_news_int_after_submission_add_email_v1'); echo json_encode(apply_filters('nnr_news_int_submission_add_email_v1', array('id' => $_POST['data_id'], 'status' => 'warning', 'message' => __('Unable to subscribe user. Newsletter not setup properly.', $_POST['text_domain'])))); die; // this is required to terminate immediately and return a proper response }
/** * @param $observer */ public function subscribeCustomer($observer) { // Check if the checkbox has been ticked using the sessions if ((bool) Mage::getSingleton('checkout/session')->getCustomerIsSubscribed()) { // Get the quote & customer $quote = $observer->getEvent()->getQuote(); $order = $observer->getEvent()->getOrder(); // if (!$order->getCustomerIsGuest()) return; // Mage::helper('campaignmonitor')->log('passed'); $session = Mage::getSingleton('core/session'); // Get the email using during checking out $email = $order->getCustomerEmail(); // We get the API and List ID if (Mage::helper('campaignmonitor')->isOAuth()) { $accessToken = Mage::getModel('campaignmonitor/auth')->getAccessToken(); $refreshToken = Mage::getModel('campaignmonitor/auth')->getRefreshToken(); $auth = array('access_token' => $accessToken, 'refresh_token' => $refreshToken); } else { $auth = Mage::helper('campaignmonitor')->getApiKey(); } $listID = Mage::helper('campaignmonitor')->getListId(); $apiKey = Mage::helper('campaignmonitor')->getApiKey(); // Check if already susbcribed try { $client = new CS_REST_Subscribers($listID, $auth); $result = $client->get($email); if (!$result->was_successful()) { // If you receive '121: Expired OAuth Token', refresh the access token if ($result->response->Code == 121) { // Refresh the token Mage::helper('campaignmonitor')->refreshToken(); } // Make the call again $result = $client->get($email); } } catch (Exception $e) { Mage::helper('campaignmonitor')->log("Error in REST call: " . $e->getMessage()); $session->addException($e, Mage::helper('campaignmonitor')->__('There was a problem with the subscription')); } // If we are not subscribed in Campaign Monitor if ($result->was_successful() && $result->response->State != 'Active') { // We generate the custom fields if ($mobile = $quote->getBillingAddress()->getTelephone()) { $customFields[] = array("Key" => "Mobile", "Value" => $mobile); } $state = $quote->getBillingAddress()->getRegion(); $country = $quote->getBillingAddress()->getCountryId(); if ($state || $country) { $campaignMonitorStates = Mage::helper('campaignmonitor')->getCampaignMonitorStates(); if ($country == "AU" && in_array($state, $campaignMonitorStates)) { $customFields[] = array("Key" => "State", "Value" => $state); } elseif ($country == "NZ") { $customFields[] = array("Key" => "State", "Value" => "New Zealand"); } elseif ($country) { $customFields[] = array("Key" => "State", "Value" => "Other"); } else { $customFields[] = array("Key" => "State", "Value" => "Unknown"); } } else { $customFields[] = array("Key" => "State", "Value" => "Unknown"); } if ($postcode = $quote->getBillingAddress()->getPostcode()) { $customFields[] = array("Key" => "Postcode", "Value" => $postcode); } if ($dob = $quote->getCustomerDob()) { $customFields[] = array("Key" => "DOB", "Value" => $dob); } // And generate the hash $customFields[] = array("Key" => "securehash", "Value" => md5($email . $apiKey)); // We generate the Magento fields $fullname = $quote->getBillingAddress()->getName(); $fullname = trim($fullname); $customFields[] = array("Key" => "fullname", "Value" => $fullname); // Check the checkout method (logged in, register or guest) switch ($quote->getCheckoutMethod()) { // Customer is logged in case Mage_Sales_Model_Quote::CHECKOUT_METHOD_LOGIN_IN: // Customer is registering // Customer is registering case Mage_Sales_Model_Quote::CHECKOUT_METHOD_REGISTER: // Customer is a guest // Customer is a guest case Mage_Sales_Model_Quote::CHECKOUT_METHOD_GUEST: try { // Subscribe the customer to CampaignMonitor if ($client) { $result = $client->add(array("EmailAddress" => $email, "Name" => $fullname, "CustomFields" => $customFields, "Resubscribe" => true)); if (!$result->was_successful()) { // If you receive '121: Expired OAuth Token', refresh the access token if ($result->response->Code == 121) { // Refresh the token Mage::helper('campaignmonitor')->refreshToken(); } // Make the call again $client->add(array("EmailAddress" => $email, "Name" => $fullname, "CustomFields" => $customFields, "Resubscribe" => true)); } } } catch (Exception $e) { Mage::helper('campaignmonitor')->log("Error in CampaignMonitor REST call: " . $e->getMessage()); $session->addException($e, Mage::helper('campaignmonitor')->__('There was a problem with the subscription')); } break; } } // Remove the session variable Mage::getSingleton('checkout/session')->setCustomerIsSubscribed(0); Mage::getModel('campaignmonitor/subscriber')->syncSubscriber($email, true); } }