View source
<?php
function campaignmonitor_help($path, $arg) {
switch ($path) {
case 'admin/settings/campaignmonitor':
return '<p>' . t('Use your API key and other keys to have users register for a mailing list setup through Campaign Monitor.') . '</p>';
}
}
function campaignmonitor_perm() {
return array(
'administer campaignmonitor',
'access archive',
'join newsletter',
);
}
function campaignmonitor_menu() {
$items = array();
$items['admin/settings/campaignmonitor'] = array(
'title' => t('Campaign Monitor'),
'description' => t('Setup Campaign Monitor values.'),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'campaignmonitor_admin',
),
'access arguments' => array(
'administer campaignmonitor',
),
'type' => MENU_NORMAL_ITEM,
);
$items['newsletter_archive'] = array(
'title' => t('Newsletter Archive'),
'page callback' => 'campaignmonitor_newsletter_archive',
'access arguments' => array(
'access archive',
),
'type' => MENU_SUGGESTED_ITEM,
);
$items['user/%user/newsletters'] = array(
'title' => t('My Newsletters'),
'page callback' => 'campaignmonitor_user_page',
'access arguments' => array(
'join newsletter',
),
'type' => MENU_LOCAL_TASK,
'weight' => 5,
);
return $items;
}
function campaignmonitor_form_alter(&$form, $form_state, $form_id) {
$display_on = variable_get('campaignmonitor_display_on', array());
if ('contact_mail_page' == $form_id && $display_on['contact'] == 'contact' || 'user_register' == $form_id && $display_on['registration'] == 'registration' && user_access('join newsletter')) {
$form['subscribe_newsletter'] = array(
'#type' => 'checkbox',
'#title' => t(variable_get('campaignmonitor_checkboxdisplaytext', 'Join our Newsletter?')),
'#weight' => 99,
'#default_value' => 1,
);
$form['submit']['#weight'] = 100;
$form['#submit'] = array(
'_campaignmonitor_form_submit' => array(),
) + (array) $form['#submit'];
}
}
function campaignmonitor_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
$blocks[0] = array(
'info' => t('Join newsletter'),
);
return $blocks;
case 'configure':
case 'save':
break;
case 'view':
default:
$block['subject'] = t('Join Newsletter');
$block['content'] = theme('campaignmonitor_block_content', $delta);
return $block;
}
}
function campaignmonitor_theme() {
return array(
'campaignmonitor_block_content' => array(
'template' => 'campaignmonitor-block-content',
),
);
}
function campaignmonitor_admin() {
$form['campaignmonitor_api_key'] = array(
'#type' => 'textfield',
'#title' => t('API Key'),
'#default_value' => variable_get('campaignmonitor_api_key', ''),
'#required' => TRUE,
'#size' => 50,
'#maxlength' => 50,
'#description' => t("Your Campaign Monitor API Key."),
);
$form['campaignmonitor_client_id'] = array(
'#type' => 'textfield',
'#title' => t('Client ID'),
'#default_value' => variable_get('campaignmonitor_client_id', ''),
'#required' => TRUE,
'#size' => 10,
'#maxlength' => 10,
'#description' => t("Your Campaign Monitor Client ID."),
);
$form['campaignmonitor_list_id'] = array(
'#type' => 'textfield',
'#title' => t('List ID'),
'#default_value' => variable_get('campaignmonitor_list_id', ''),
'#required' => TRUE,
'#size' => 10,
'#maxlength' => 10,
'#description' => t("Your Campaign Monitor List ID."),
);
$form['campaignmonitor_display_on'] = array(
'#type' => 'checkboxes',
'#title' => t('Display on Options'),
'#default_value' => variable_get('campaignmonitor_display_on', array()),
'#options' => array(
'contact' => t('Contact Page'),
'registration' => t('Registration Page'),
),
'#description' => t('Choose which forms you want to display the Join Newsletter checkbox.'),
);
$form['campaignmonitor_checkboxisplaytext'] = array(
'#type' => 'textfield',
'#title' => t('Display Text for Checkbox'),
'#default_value' => variable_get('campaignmonitor_checkboxdisplaytext', 'Join our Newsletter?'),
'#size' => 50,
'#maxlength' => 50,
'#description' => t("This text will display next to the checkbox on the selected forms."),
);
$form['campaignmonitor_userpagedisplaytext'] = array(
'#type' => 'textfield',
'#title' => t('Display Text for User Page'),
'#default_value' => variable_get('campaignmonitor_userpagedisplaytext', 'Newsletter'),
'#size' => 50,
'#maxlength' => 50,
'#description' => t("This text will display next to the checkbox on the user profile page."),
);
$form['campaignmonitor_pastcampaignurl'] = array(
'#type' => 'textfield',
'#title' => t('Past Campaign URL'),
'#default_value' => variable_get('campaignmonitor_pastcampaignurl', ''),
'#size' => 100,
'#maxlength' => 100,
'#description' => t("This is required if you want to use the page that displays past campaigns. You can find this value if you go to Manage Clients, click on the client, go to the link that tells you how to display past campaigns, then copy the URL ONLY from the html given. The URL is in between the src=\"\" value."),
);
$form['campaignmonitor_connection_timeout'] = array(
'#type' => 'textfield',
'#title' => t('Connection timeout'),
'#default_value' => variable_get('campaignmonitor_connection_timeout', 15),
'#size' => 10,
'#maxlength' => 10,
'#description' => t("If your server can't get through to the API, or the API server is down, this is the amount of time until the connection times out in seconds. Default is 15 seconds."),
);
return system_settings_form($form);
}
function campaignmonitor_general_form() {
global $user;
$name = '';
$email = '';
$default = false;
if (module_exists("profile")) {
profile_load_profile($user->uid);
$name = $user->profile_name;
}
if ($user->uid != 0) {
$email = $user->mail;
if (_campaignmonitor_is_subscribed(variable_get('campaignmonitor_api_key', ''), variable_get('campaignmonitor_list_id', 0), $email)) {
$default = true;
$subscriber = _campaignmonitor_get_subscriber(variable_get('campaignmonitor_api_key', ''), variable_get('campaignmonitor_list_id', 0), $email);
$name = $subscriber['name'];
}
else {
$default = false;
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#size' => 20,
'#maxlength' => 50,
'#required' => TRUE,
'#default_value' => $name,
);
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('Email'),
'#size' => 20,
'#maxlength' => 100,
'#required' => TRUE,
'#default_value' => $email,
);
$form['unsubscribe_newsletter'] = array(
'#type' => 'checkbox',
'#title' => t('Unsubscribe'),
'#default_value' => $default,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
function campaignmonitor_general_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
$api_key = variable_get('campaignmonitor_api_key', '');
$list_id = variable_get('campaignmonitor_list_id', 0);
$name = $form_values['name'];
$email = $form_values['email'];
if (!$form_values['unsubscribe_newsletter']) {
_campaignmonitor_add_subscriber($api_key, $list_id, $name, $email);
}
else {
if ($form_values['unsubscribe_newsletter']) {
_campaignmonitor_remove_subscriber($api_key, $list_id, $email);
}
}
}
function campaignmonitor_newsletter_archive() {
$url = variable_get('campaignmonitor_pastcampaignurl', '');
if ($url == '') {
$content = '<p>The past campaign URL has not been set. Please set this in the administration pages.</p>';
}
else {
$content = '<script type="text/javascript" src="' . variable_get('campaignmonitor_pastcampaignurl', '') . '"></script>';
}
return $content;
}
function campaignmonitor_user_page() {
return drupal_get_form('campaignmonitor_user_form');
}
function campaignmonitor_user_form() {
global $user;
$api_key = variable_get('campaignmonitor_api_key', '');
$list_id = variable_get('campaignmonitor_list_id', 0);
$email = $user->mail;
if (_campaignmonitor_is_subscribed($api_key, $list_id, $email, true)) {
$default = true;
}
else {
$default = false;
}
$form['subscribe_newsletter'] = array(
'#type' => 'checkbox',
'#title' => variable_get('campaignmonitor_user_pagedisplaytext', 'Newsletter'),
'#default_value' => $default,
);
$form['is_subscribed'] = array(
'#type' => 'hidden',
'#default_value' => $default,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
return $form;
}
function campaignmonitor_user_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
global $user;
if (module_exists("profile")) {
profile_load_profile($user->uid);
$profile_name = $user->profile_name;
}
$api_key = variable_get('campaignmonitor_api_key', '');
$list_id = variable_get('campaignmonitor_list_id', 0);
$name = $profile_name;
$email = $user->mail;
if ($form_values['subscribe_newsletter'] && !$form_values['is_subscribed']) {
_campaignmonitor_add_subscriber($api_key, $list_id, $name, $email);
}
else {
if (!$form_values['subscribe_newsletter'] && $form_values['is_subscribed']) {
_campaignmonitor_remove_subscriber($api_key, $list_id, $email);
}
}
}
function _campaignmonitor_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
if ($form_values['subscribe_newsletter']) {
if ('contact_mail_page' == $form_id) {
$form_values['message'] .= "\n\n" . t('Subscribed to newsletter.');
}
$api_key = variable_get('campaignmonitor_api_key', '');
$list_id = variable_get('campaignmonitor_list_id', 0);
$email = $form_values['mail'];
$name = $form_values['name'];
_campaignmonitor_add_subscriber($api_key, $list_id, $name, $email);
}
}
function template_preprocess_campaignmonitor_block_content(&$variables) {
$variables['form'] = drupal_get_form('campaignmonitor_general_form');
if (user_access('access archive')) {
$variables['archive_link'] = l('Newsletter Archive', 'newsletter_archive');
}
else {
$variables['archive_link'] = '';
}
}
function _campaignmonitor_create_client() {
$client = new SoapClient(null, array(
"location" => "http://app.campaignmonitor.com/api/api.asmx",
"uri" => "http://app.campaignmonitor.com/api/",
"style" => SOAP_RPC,
"use" => SOAP_LITERAL,
"trace" => true,
"connection_timeout" => (int) variable_get('campaignmonitor_connection_timeout', '15'),
));
return $client;
}
function _campaignmonitor_is_subscribed($api_key, $list_id, $email, $show_errors = false) {
$retval = false;
$client = _campaignmonitor_create_client();
try {
$result = $client
->__soapCall("Subscribers.GetIsSubscribed", array(
new SoapVar($api_key, XSD_STRING, null, null, "ApiKey", "http://app.campaignmonitor.com/api/"),
new SoapVar($list_id, XSD_INT, null, null, "ListID", "http://app.campaignmonitor.com/api/"),
new SoapVar($email, XSD_STRING, null, null, "Email", "http://app.campaignmonitor.com/api/"),
new SoapVar($name, XSD_STRING, null, null, "Name", "http://app.campaignmonitor.com/api/"),
), array(
"soapaction" => "http://app.campaignmonitor.com/api/Subscribers.GetIsSubscribed",
));
if ($result->Code != 0) {
watchdog('CAMPAIGNMONITOR RESULT: ', 'Code - ' . $result->Code . ', Message - ' . $result->Message);
}
else {
if ($result == 'False') {
$retval = false;
}
else {
if ($result == 'True') {
$retval = true;
}
}
}
} catch (SoapFault $e) {
if ($show_errors) {
watchdog('ERROR IN CAMPAIGNMONITOR', 'There was an error checking if joined to newsletter: ' . $e->faultstring, WATCHDOG_ERROR);
drupal_set_message("There is an error with the newsletter server. Please try again later.", 'error');
}
$retval = false;
}
return $retval;
}
function _campaignmonitor_add_subscriber($api_key, $list_id, $name, $email, $show_errors = false) {
$client = $client = _campaignmonitor_create_client();
try {
$result = $client
->__soapCall("Subscriber.AddAndResubscribe", array(
new SoapVar($api_key, XSD_STRING, null, null, "ApiKey", "http://app.campaignmonitor.com/api/"),
new SoapVar($list_id, XSD_INT, null, null, "ListID", "http://app.campaignmonitor.com/api/"),
new SoapVar($email, XSD_STRING, null, null, "Email", "http://app.campaignmonitor.com/api/"),
new SoapVar($name, XSD_STRING, null, null, "Name", "http://app.campaignmonitor.com/api/"),
), array(
"soapaction" => "http://app.campaignmonitor.com/api/Subscriber.AddAndResubscribe",
));
if ($result->Code != 0) {
watchdog('CAMPAIGNMONITOR RESULT: ', 'Code - ' . $result->Code . ', Message - ' . $result->Message);
drupal_set_message("There was an error joining to newsletter.", 'error');
}
else {
drupal_set_message("You have successfully been added.", 'status');
}
} catch (SoapFault $e) {
if ($show_errors) {
watchdog('ERROR IN CAMPAIGNMONITOR', 'There was an error joining to newsletter: ' . $e->faultstring, WATCHDOG_ERROR);
drupal_set_message("There is an error with the newsletter server. Please try again later.", 'error');
}
}
}
function _campaignmonitor_remove_subscriber($api_key, $list_id, $email, $show_errors = false) {
$client = $client = _campaignmonitor_create_client();
try {
$result = $client
->__soapCall("Subscriber.Unsubscribe", array(
new SoapVar($api_key, XSD_STRING, null, null, "ApiKey", "http://app.campaignmonitor.com/api/"),
new SoapVar($list_id, XSD_INT, null, null, "ListID", "http://app.campaignmonitor.com/api/"),
new SoapVar($email, XSD_STRING, null, null, "Email", "http://app.campaignmonitor.com/api/"),
new SoapVar($name, XSD_STRING, null, null, "Name", "http://app.campaignmonitor.com/api/"),
), array(
"soapaction" => "http://app.campaignmonitor.com/api/Subscriber.Unsubscribe",
));
if ($result->Code != 0) {
watchdog('CAMPAIGNMONITOR RESULT: ', 'Code - ' . $result->Code . ', Message - ' . $result->Message);
drupal_set_message("There was an error unsubscribing from newsletter.", 'error');
}
else {
drupal_set_message("You have successfully been unsubscribed.", 'status');
}
} catch (SoapFault $e) {
if ($show_errors) {
watchdog('ERROR IN CAMPAIGNMONITOR', 'There was an error unsubscribing from newsletter: ' . $e->faultstring, WATCHDOG_ERROR);
drupal_set_message("There is an error with the newsletter server. Please try again later.", 'error');
}
}
}
function _campaignmonitor_get_subscriber($api_key, $list_id, $email, $show_errors = false) {
$retval = array(
"name" => '',
"email" => $email,
);
$client = $client = _campaignmonitor_create_client();
try {
$result = $client
->__soapCall("Subscribers.GetSingleSubscriber", array(
new SoapVar($api_key, XSD_STRING, null, null, "ApiKey", "http://app.campaignmonitor.com/api/"),
new SoapVar($list_id, XSD_INT, null, null, "ListID", "http://app.campaignmonitor.com/api/"),
new SoapVar($email, XSD_STRING, null, null, "EmailAddress", "http://app.campaignmonitor.com/api/"),
), array(
"soapaction" => "http://app.campaignmonitor.com/api/Subscribers.GetSingleSubscriber",
));
if ($result->Code != 0) {
watchdog('CAMPAIGNMONITOR RESULT: ', 'Code - ' . $result->Code . ', Message - ' . $result->Message, WATCHDOG_NOTICE);
}
else {
$retval['name'] = $result->Name;
}
} catch (SoapFault $e) {
if ($show_errors) {
watchdog('ERROR IN CAMPAIGNMONITOR', 'There was an error checking if joined to newsletter: ' . $e->faultstring, WATCHDOG_ERROR);
drupal_set_message("There is an error with the newsletter server. Please try again later.", 'error');
}
}
return $retval;
}