function get_current_theme_options() { $theme_options = $this->themes->get_options($this->get_current_theme()); // main options merge $main_options = Newsletter::instance()->options; foreach ($main_options as $key => $value) { $theme_options['main_' . $key] = $value; } return $theme_options; }
} //if (isset($controls->data['search_test'])) { // $where .= " and test=1"; //} if (!empty($controls->data['search_status'])) { if ($controls->data['search_status'] == 'T') { $where .= " and test=1"; } else { $query_args[] = $controls->data['search_status']; $where .= " and status=%s"; } } // Total items, total pages $items_per_page = 20; $where = $wpdb->prepare($where, $query_args); $count = Newsletter::instance()->store->get_count(NEWSLETTER_USERS_TABLE, $where); $last_page = floor($count / $items_per_page) - ($count % $items_per_page == 0 ? 1 : 0); if ($last_page < 0) { $last_page = 0; } if ($controls->is_action('last')) { $controls->data['search_page'] = $last_page; } if ($controls->is_action('first')) { $controls->data['search_page'] = 0; } if ($controls->is_action('next')) { $controls->data['search_page'] = (int) $controls->data['search_page'] + 1; } if ($controls->is_action('prev')) { $controls->data['search_page'] = (int) $controls->data['search_page'] - 1;
function mail($to, $subject, $message, $headers = null) { $newsletter = Newsletter::instance(); if ($this->mandrill == null) { require_once dirname(__FILE__) . '/api/Mandrill.php'; $mandrill = new Mandrill($this->options['smtp_password']); } $data = array(); if (!is_array($message)) { $data['html'] = $message; } else { if (!empty($message['html'])) { $data['html'] = $message['html']; } if (!empty($message['text'])) { $data['text'] = $message['text']; } } $data['subject'] = $subject; $data['to'] = array(array('email' => $to, 'type' => 'to')); if (isset($headers['X-Newsletter-Email-Id'])) { $data['tags'] = array('Newsletter ' . $headers['X-Newsletter-Email-Id']); } if (!empty($headers)) { $data['headers'] = $headers; } else { $data['headers'] = array(); } $data['from_email'] = $newsletter->options['sender_email']; $data['from_name'] = $newsletter->options['sender_name']; if (!empty($newsletter->options['reply_to'])) { $data['headers']['Reply-To'] = $newsletter->options['reply_to']; } try { // $async = false; // $ip_pool = 'Main Pool'; // $send_at = 'example send_at'; // $result = $mandrill->messages->send($message, $async, $ip_pool, $send_at); $this->mandrill_result = $mandrill->messages->send($data); //print_r($result); return true; } catch (Mandrill_Error $e) { $this->mandrill_result = $e->getMessage(); // Mandrill errors are thrown as exceptions //echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage(); // A mandrill error occurred: Mandrill_Unknown_Subaccount - No subaccount exists with the id 'customer-123' //throw $e; return false; } }
$email['send_on'] = time(); $email['type'] = 'message'; $email['editor'] = $original->editor; $email['track'] = $original->track; Newsletter::instance()->save_email($email); $controls->messages .= __('Message duplicated.', 'newsletter'); } if ($controls->is_action('delete')) { Newsletter::instance()->delete_email($_POST['btn']); $controls->messages .= __('Message deleted.', 'newsletter'); } if ($controls->is_action('delete_selected')) { $r = Newsletter::instance()->delete_email($_POST['ids']); $controls->messages .= $r . ' message(s) deleted'; } $emails = Newsletter::instance()->get_emails('message'); ?> <div class="wrap" id="tnp-wrap"> <?php $help_url = 'http://www.thenewsletterplugin.com/plugins/newsletter/newsletters-module'; ?> <?php include NEWSLETTER_DIR . '/tnp-header.php'; ?> <div id="tnp-heading"> <h2><?php
/** * Send emails during the subscription process. Emails are themes with email.php file. * @global type $newsletter * @return type */ function mail($to, $subject, $message) { // If the template setup on administrative panel is enabled, use it, if not // use the default old templating system. if ($this->options['template_enabled'] == 1) { $template = $this->options['template']; if (strpos($template, '{message}') === false) { $template .= '{message}'; } $message = str_replace('{message}', $message, $template); } else { ob_start(); include NEWSLETTER_DIR . '/subscription/email.php'; $message = ob_get_clean(); } return Newsletter::instance()->mail($to, $subject, $message); }
<?php if (NEWSLETTER_DEBUG || !isset($dismissed['newsletter-page']) && empty(NewsletterSubscription::instance()->options['url'])) { ?> <div class="notice"> <a href="<?php echo $_SERVER['REQUEST_URI'] . '&dismiss=newsletter-page'; ?> " class="dismiss">×</a> <p> You should create a blog page to show the subscription form and the subscription messages. Go to the <a href="?page=newsletter_subscription_options">subscription panel</a> to configure it. </p> </div> <?php } ?> <div id="tnp-notification"> <?php Newsletter::instance()->warnings(); ?> <?php if (isset($controls)) { $controls->show(); $controls->messages = ''; $controls->errors = ''; } ?> </div>
$email['status'] = 'sending'; } if ($controls->is_action('abort')) { $wpdb->query("update " . NEWSLETTER_EMAILS_TABLE . " set last_id=0, total=0, sent=0, status='new' where id=" . $email_id); $email['status'] = 'new'; $email['total'] = 0; $email['sent'] = 0; $email['last_id'] = 0; $controls->messages = "Sending aborted."; } if ($controls->is_action('test')) { $users = NewsletterUsers::instance()->get_test_users(); if (count($users) == 0) { $controls->errors = 'There are no test subscribers. Read more about test subscribers <a href="http://www.thenewsletterplugin.com/plugins/newsletter/subscribers-module#test" target="_blank">here</a>.'; } else { Newsletter::instance()->send(Newsletter::instance()->get_email($email_id), $users); $controls->messages .= 'Test emails sent to ' . count($users) . ' test subscribers. Read more about test subscribers <a href="http://www.thenewsletterplugin.com/plugins/newsletter/subscribers-module#test" target="_blank">here</a>.'; } $controls->messages .= '<br>If diagnostic emails are delivered but test emails are not, try to change the encoding to "base 64" on main configuration panel'; } if ($email['editor'] == 0) { $x = strpos($controls->data['message'], '<body'); // Some time the message in $nc->data is already cleaned up, it depends on action called if ($x !== false) { $x = strpos($controls->data['message'], '>', $x); $y = strpos($controls->data['message'], '</body>'); $controls->data['message'] = substr($controls->data['message'], $x + 1, $y - $x - 1); } } ?>
} if ($controls->is_action('test-template')) { $users = NewsletterUsers::instance()->get_test_users(); if (count($users) == 0) { $controls->errors = 'There are no test subscribers. Read more about test subscribers <a href="http://www.thenewsletterplugin.com/plugins/newsletter/subscribers-module#test" target="_blank">here</a>.'; } else { $template = $controls->data['template']; if (strpos($template, '{message}') === false) { $template .= '{message}'; } $message = '<p>This is a generic example of message embedded inside the template.</p>'; $message = str_replace('{message}', $message, $template); $addresses = array(); foreach ($users as &$user) { $addresses[] = $user->email; Newsletter::instance()->mail($user->email, 'Newsletter Messages Template Test', $newsletter->replace($message, $user)); } $controls->messages .= 'Test emails sent to ' . count($users) . ' test subscribers: ' . implode(', ', $addresses) . '. Read more about test subscribers <a href="http://www.thenewsletterplugin.com/plugins/newsletter/subscribers-module#test" target="_blank">here</a>.'; } } if ($controls->is_action('test-confirmation')) { $users = NewsletterUsers::instance()->get_test_users(); if (count($users) == 0) { $controls->errors = 'There are no test subscribers. Read more about test subscribers <a href="http://www.thenewsletterplugin.com/plugins/newsletter/subscribers-module#test" target="_blank">here</a>.'; } else { $template = $controls->data['template']; if (strpos($template, '{message}') === false) { $template .= '{message}'; } $message = '<p>This is a generic example of message embedded inside the template.</p>'; $message = str_replace('{message}', $message, $template);
<?php require_once '../../../../wordpress/wp-load.php'; $newsletter = Newsletter::instance(); require_once NEWSLETTER_INCLUDES_DIR . '/controls.php'; // TODO: Check the user capabilities if (current_user_can('manage_options') || $newsletter->options['editor'] == 1 && current_user_can('manage_categories')) { $controls = new NewsletterControls(); if ($controls->is_action('export')) { NewsletterUsers::instance()->export($controls->data); } } else { die('Not allowed.'); }
<?php header('Content-Type: text/html;charset=UTF-8'); header('X-Robots-Tag: noindex,nofollow,noarchive'); header('Cache-Control: no-cache,no-store,private'); include '../../../../wp-load.php'; $user = Newsletter::instance()->get_user_from_request(true); $field = $_REQUEST['nf']; $value = $_REQUEST['nv']; $url = $_REQUEST['nu']; switch ($field) { case 'sex': if (!in_array($value, array('f', 'm', 'n'))) { die('Invalid sex value'); } NewsletterUsers::instance()->set_user_field($user->id, 'sex', $value); break; // Should be managed by Feed by Mail // Should be managed by Feed by Mail case 'feed': if (isset($value) && ($value === '0' || $value === '1')) { NewsletterUsers::instance()->set_user_field($user->id, 'feed', $value); } else { die('Invalid feed value'); } break; } if (strpos($field, 'preference_') === 0) { $idx = (int) substr($field, 11); $options_profile = get_option('newsletter_profile'); if ($options_profile['list_' . $idx . '_status'] == 0) {
//die($url); $verified = $parts['host'] == $_SERVER['HTTP_HOST']; if (!$verified) { $options = NewsletterStatistics::instance()->options; $verified = $key == md5($email_id . ';' . $user_id . ';' . $url . ';' . $anchor . $options['key']); } // For feed by mail tests if ($verified && empty($email_id) && is_user_logged_in()) { header('Location: ' . $url); die; } $ip = preg_replace('/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR']); if ($verified) { $wpdb->insert(NEWSLETTER_STATS_TABLE, array('email_id' => $email_id, 'user_id' => $user_id, 'url' => $url, 'ip' => $ip)); $wpdb->query($wpdb->prepare("update " . NEWSLETTER_SENT_TABLE . " set open=2, ip=%s where email_id=%d and user_id=%d limit 1", $ip, $email_id, $user_id)); $user = Newsletter::instance()->get_user($user_id); if ($user) { setcookie('newsletter', $user->id . '-' . $user->token, time() + 60 * 60 * 24 * 365, '/'); } header('Location: ' . $url); die; } else { header("HTTP/1.0 404 Not Found"); //header('Location: ' . home_url()); //die(); } ?> <html> <head> <style> body {
function shortcode_newsletter_lock($attrs, $content = null) { global $hyper_cache_stop, $cache_stop; $hyper_cache_stop = true; $cache_stop = true; $this->found = true; $user = $this->check_user(); if ($user != null && $user->status == 'C') { return do_shortcode($content); } $buffer = $this->options['message']; $buffer = str_ireplace('<form', '<form method="post" action="' . plugins_url('newsletter/do/subscribe.php') . '"', $buffer); $buffer = Newsletter::instance()->replace($buffer, null, null, 'lock'); $buffer = do_shortcode($buffer); return '<div class="newsletter-lock">' . $buffer . '</div>'; }
?> " href="<?php echo NewsletterStatistics::instance()->get_statistics_url($email->id); ?> "><i class="fa fa-bar-chart"></i></a> </td> </tr> <?php } ?> </table> </div> </div> <!-- END Newsletters --> <?php if (empty(Newsletter::instance()->options['contract_key'])) { ?> <!-- START Premium --> <div id="tnp-dash-premium" class="postbox"> <h3><?php _e('Premium', 'newsletter'); ?> <a href="http://www.thenewsletterplugin.com/extensions" target="_blank"> <i class="fa fa-trophy"></i> <?php _e('Buy', 'newsletter'); ?> </a> </h3> <div class="inside"> <div> <a href="http://www.thenewsletterplugin.com/extensions" target="_blank">
/** * @return Newsletter */ static function instance() { if (self::$instance == null) { self::$instance = new Newsletter(); } return self::$instance; }
function hook_site_transient_update_plugins($value) { if (!class_exists('Newsletter')) { return $value; } // See the wp_update_plugins function if (!is_object($value)) { return $value; } if (!isset($value->response[$this->plugin])) { return $value; } if (defined('NEWSLETTER_LICENSE_KEY')) { $value->response[$this->plugin]->package = 'http://www.thenewsletterplugin.com/wp-content/plugins/file-commerce-pro/get.php?f=' . $this->id . '&k=' . NEWSLETTER_LICENSE_KEY; } else { $value->response[$this->plugin]->package = 'http://www.thenewsletterplugin.com/wp-content/plugins/file-commerce-pro/get.php?f=' . $this->id . '&k=' . Newsletter::instance()->options['contract_key']; } return $value; }
<?php @(include_once NEWSLETTER_INCLUDES_DIR . '/controls.php'); $module = Newsletter::instance(); $controls = new NewsletterControls(); if (!$controls->is_action()) { $controls->data = $module->get_options('smtp'); } else { if ($controls->is_action('save')) { if ($controls->data['enabled'] && empty($controls->data['host'])) { $controls->errors = 'The host must be set to enable the SMTP'; } if (empty($controls->errors)) { $module->save_options($controls->data, 'smtp'); $controls->messages .= __('Saved. Remember to test your changes right now!', 'newsletter'); } } if ($controls->is_action('test')) { require_once ABSPATH . WPINC . '/class-phpmailer.php'; require_once ABSPATH . WPINC . '/class-smtp.php'; $mail = new PHPMailer(); ob_start(); $mail->IsSMTP(); $mail->SMTPDebug = true; $mail->CharSet = 'UTF-8'; $message = 'This Email is sent by PHPMailer of WordPress'; $mail->IsHTML(false); $mail->Body = $message; $mail->From = $module->options['sender_email']; $mail->FromName = $module->options['sender_name']; if (!empty($module->options['return_path'])) {
function get_email_from_request() { $newsletter = Newsletter::instance(); if (isset($_REQUEST['nek'])) { list($id, $token) = @explode('-', $_REQUEST['nek'], 2); } else { return null; } $email = $newsletter->get_email($id); return $email; }
<tr valign="top"> <th>Enabled?</th> <td> <?php $controls->yesno('enabled'); ?> </td> </tr> <tr valign="top"> <th>License key</th> <td> <?php if (empty(Newsletter::instance()->options['contract_key'])) { echo 'Not set'; } else { echo Newsletter::instance()->options['contract_key']; } ?> <p class="description"> The license key can be set on main Newsletter configuration and will be used for the one clic update feature. </p> </td> </tr> </table> </div> <div id="tabs-smtp"> <p>
<?php include '../../../../wp-load.php'; $email_id = (int) $_GET['id']; $body = Newsletter::instance()->get_email_field($email_id, 'message'); $x = strpos($body, '<style'); if ($x === false) { return; } $x = strpos($body, '>', $x); $y = strpos($body, '</style>'); header('Content-Type: text/css'); echo substr($body, $x + 1, $y - $x - 1);
<?php if ($email['editor'] == 0) { $controls->editor('message', 30); } else { $controls->textarea_preview('message', '100%', '700'); } ?> </div> <div id="tabs-b"> <?php if (Newsletter::instance()->options['phpmailer'] == 0) { ?> <p class="tnp-tab-warning">The text part is sent only when Newsletter manages directly the sending process. <a href="admin.php?page=newsletter_main_main" target="_blank">See the main settings</a>.</p> <?php } ?> <p> This is the textual version of your newsletter. If you empty it, only an HTML version will be sent but is an anti-spam best practice to include a text only version. </p> <?php $controls->textarea_fixed('message_text', '100%', '500'); ?> </div>
} if (Newsletter::instance()->options['editor'] != 1 && !current_user_can('manage_options')) { die('Not enough privileges'); } require_once NEWSLETTER_INCLUDES_DIR . '/controls.php'; $controls = new NewsletterControls(); $module = NewsletterEmails::instance(); if ($controls->is_action('create')) { $module->save_options($controls->data); $email = array(); $email['status'] = 'new'; $email['subject'] = ''; //__('Here the email subject', 'newsletter-emails'); $email['track'] = 1; $theme_options = $module->get_current_theme_options(); $theme_url = $module->get_current_theme_url(); $theme_subject = ''; ob_start(); include $module->get_current_theme_file_path('theme.php'); $email['message'] = ob_get_clean(); if (!empty($theme_subject)) { $email['subject'] = $theme_subject; } ob_start(); include $module->get_current_theme_file_path('theme-text.php'); $email['message_text'] = ob_get_clean(); $email['type'] = 'message'; $email['send_on'] = time(); $email = Newsletter::instance()->save_email($email); header('Location: ' . $module->get_admin_page_url('edit') . '&id=' . $email->id); }
if ($controls->is_action('undismiss')) { update_option('newsletter_dismissed', array()); $controls->messages = 'Notices restored.'; } if ($controls->is_action('trigger_followup')) { NewsletterFollowup::instance()->send(); $controls->messages = 'Follow up delivery engine triggered.'; } if ($controls->is_action('engine_on')) { wp_clear_scheduled_hook('newsletter'); wp_schedule_event(time() + 30, 'newsletter', 'newsletter'); $controls->messages = 'Delivery engine reactivated.'; } if ($controls->is_action('upgrade')) { // TODO: Compact them in a call to Newsletter which should be able to manage the installed modules Newsletter::instance()->upgrade(); NewsletterUsers::instance()->upgrade(); NewsletterSubscription::instance()->upgrade(); NewsletterEmails::instance()->upgrade(); NewsletterStatistics::instance()->upgrade(); if (method_exists('NewsletterFollowup', 'upgrade')) { NewsletterFollowup::instance()->upgrade(); } $controls->messages = 'Upgrade forced!'; } if ($controls->is_action('upgrade_old')) { $row = $wpdb->get_row("select * from " . NEWSLETTER_USERS_TABLE . " limit 1"); if (!isset($row->id)) { $row = $wpdb->query("alter table " . NEWSLETTER_USERS_TABLE . " drop primary key"); $row = $wpdb->query("alter table " . NEWSLETTER_USERS_TABLE . " add column id int not null auto_increment primary key"); $row = $wpdb->query("alter table " . NEWSLETTER_USERS_TABLE . " add unique email (email)");
/** * Loads the user using the request parameters (nk or nt and ni). * * @global Newsletter $newsletter * @return null */ function get_user_from_request() { $newsletter = Newsletter::instance(); if (isset($_REQUEST['nk'])) { list($id, $token) = @explode('-', $_REQUEST['nk'], 2); } else { if (isset($_REQUEST['ni'])) { $id = (int) $_REQUEST['ni']; $token = $_REQUEST['nt']; } else { return null; } } $user = $newsletter->get_user($id); if ($user == null || $token != $user->token) { return null; } return $user; }
<?php /** * This is a generic viewer for sent emails. It is not binded to one shot emails, it can display even the emails from * updates or feed by mail module. */ header('Content-Type: text/html;charset=UTF-8'); header('X-Robots-Tag: noindex,nofollow,noarchive'); header('Cache-Control: no-cache,no-store,private'); include '../../../../wp-load.php'; // TODO: Change to Newsletter::instance()->get:email(), not urgent $email = Newsletter::instance()->get_email((int) $_GET['id']); if (empty($email)) { die('Email not found'); } $user = NewsletterSubscription::instance()->get_user_from_request(); if (is_file(WP_CONTENT_DIR . '/extensions/newsletter/view.php')) { include WP_CONTENT_DIR . '/extensions/newsletter/view.php'; die; } echo $newsletter->replace($email->message, $user, $email->id);
/** * Completes the WordPress plugin update data with the extension data. * $value is the data WordPress is saving * $extension is an instance of an extension */ function set_extension_update_data($value, $extension) { // See the wp_update_plugins function if (!is_object($value)) { return $value; } // If someone registered our extension name on wordpress.org... get rid of it otherwise // our extenions will be overwritten! unset($value->response[$extension->plugin]); unset($value->no_update[$extension->plugin]); if (defined('NEWSLETTER_EXTENSION_UPDATE') && !NEWSLETTER_EXTENSION_UPDATE) { return $value; } if (!function_exists('get_plugin_data')) { return $value; } $new_version = $this->get_extension_version($extension->id); if (empty($new_version)) { return $value; } if (function_exists('get_plugin_data')) { if (file_exists(WP_PLUGIN_DIR . '/' . $extension->plugin)) { $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $extension->plugin, false, false); } else { if (file_exists(WPMU_PLUGIN_DIR . '/' . $extension->plugin)) { $plugin_data = get_plugin_data(WPMU_PLUGIN_DIR . '/' . $extension->plugin, false, false); } } } if (!isset($plugin_data)) { return $value; } if (version_compare($new_version, $plugin_data['Version']) <= 0) { return $value; } $plugin = new stdClass(); $plugin->id = $extension->id; $plugin->slug = $extension->slug; $plugin->plugin = $extension->plugin; $plugin->new_version = $new_version; $plugin->url = ''; $value->response[$extension->plugin] = $plugin; if (defined('NEWSLETTER_LICENSE_KEY')) { $value->response[$extension->plugin]->package = 'http://www.thenewsletterplugin.com/wp-content/plugins/file-commerce-pro/get.php?f=' . $extension->id . '&k=' . NEWSLETTER_LICENSE_KEY; } else { $value->response[$extension->plugin]->package = 'http://www.thenewsletterplugin.com/wp-content/plugins/file-commerce-pro/get.php?f=' . $extension->id . '&k=' . Newsletter::instance()->options['contract_key']; } return $value; }
/** * * @global Newsletter $newsletter * @param int|string $id_or_email * @param string $status * @return boolean */ function set_user_status($id_or_email, $status) { $newsletter = Newsletter::instance(); return $newsletter->set_user_status($id_or_email, $status); }
<?php require_once NEWSLETTER_INCLUDES_DIR . '/controls.php'; $module = NewsletterStatistics::instance(); $controls = new NewsletterControls(); $emails = Newsletter::instance()->get_emails(); if ($controls->is_action('save')) { $module->save_options($controls->data); $controls->messages = 'Saved.'; } ?> <div class="wrap"> <?php $help_url = 'http://www.thenewsletterplugin.com/plugins/newsletter/statistics-module'; ?> <?php include NEWSLETTER_DIR . '/header-new.php'; ?> <div id="newsletter-title"> <h2>Configuration and Email List</h2> <p> This module is a core part of Newsletter that collects statistics about sent emails: how many have been read, how many have been clicked and so on. </p> <p> To see the statistics of each single email, you should click the "statistics" button you will find near each message where they are listed (like on Newsletters panel). For your
} else { $controls->messages = 'Updated.'; $controls->data = $module->get_user($id, ARRAY_A); } } } if ($controls->is_action('delete')) { $module->delete_user($id); $controls->js_redirect($module->get_admin_page_url('index')); return; } if (!$controls->is_action()) { $controls->data = $module->get_user($id, ARRAY_A); } $options_profile = get_option('newsletter_profile'); $panels = Newsletter::instance()->panels; //$wpdb->query($wpdb->prepare("insert ignore into " . $wpdb->prefix . "newsletter_sent (user_id, email_id, time) select user_id, email_id, UNIX_TIMESTAMP(created) from " . NEWSLETTER_STATS_TABLE . " where user_id=%d", $id)); function percent($value, $total) { if ($total == 0) { return '-'; } return sprintf("%.2f", $value / $total * 100) . '%'; } function percentValue($value, $total) { if ($total == 0) { return 0; } return round($value / $total * 100); }