| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- <?php
- /* @var $wpdb wpdb */
- if (!defined('ABSPATH'))
- exit;
- require_once NEWSLETTER_INCLUDES_DIR . '/controls.php';
- $module = NewsletterStatistics::instance();
- $controls = new NewsletterControls();
- wp_enqueue_script('tnp-chart');
- if ($controls->is_action('country')) {
- $module->country();
- $controls->messages = $module->country_result;
- }
- if ($controls->is_action('import')) {
- $wpdb->query("insert ignore into " . $wpdb->prefix . "newsletter_sent (user_id, email_id, time) select user_id, email_id, UNIX_TIMESTAMP(created) from " . NEWSLETTER_STATS_TABLE);
- $controls->messages = 'Done!';
- }
- $types = $wpdb->get_results("select distinct type from " . NEWSLETTER_EMAILS_TABLE);
- $type_options = array();
- foreach ($types as $type) {
- if ($type->type == 'followup')
- continue;
- if ($type->type == 'message') {
- $type_options[$type->type] = 'Standard Newsletter';
- } else if ($type->type == 'feed') {
- $type_options[$type->type] = 'Feed by Mail';
- } else if (strpos($type->type, 'automated') === 0) {
- list($a, $id) = explode('_', $type->type);
- $type_options[$type->type] = 'Automated Channel ' . $id;
- } else {
- $type_options[$type->type] = $type->type;
- }
- }
- if (empty($controls->data['type'])) {
- $emails = $wpdb->get_results("select send_on, id, subject, total, status, type, track, sent, subject from " . NEWSLETTER_EMAILS_TABLE . " where status='sent' order by send_on desc limit 20");
- } else {
- $emails = $wpdb->get_results($wpdb->prepare("select send_on, id, subject, total, type from " . NEWSLETTER_EMAILS_TABLE . " where status='sent' and type=%s order by send_on desc limit 20", $controls->data['type']));
- }
- $overview_labels = array();
- $overview_titles = array();
- $overview_open_rate = array();
- $overview_click_rate = array();
- $total_sent = 0;
- $open_count_total = 0;
- $click_count_total = 0;
- foreach ($emails as $email) {
- $entry = array();
- // Skip newsletters which has no sent records
- $total = $module->get_total_count($email);
- if (empty($total)) {
- continue;
- }
- $total_sent += $total;
- //$entry[0] = $email->subject . ' [' . date('Y-m-d', $email->send_on) . ', ' . $email->type . ']';
- $entry[0] = date('Y-m-d', $email->send_on);
- $open_count = $module->get_open_count($email);
- $open_count_total += $open_count;
- $entry[1] = $open_count / $total * 100;
- $entry[1] = round($entry[1], 2);
- $entry[2] = $email->subject; // . ' (' . percent($open_count, $email->sent) . ')';
- $click_count = $module->get_click_count($email);
- $click_count_total += $click_count;
- $entry[3] = $click_count / $total * 100;
- $entry[3] = round($entry[3], 2);
- $overview_labels[] = strftime('%a, %e %b', $email->send_on);
- $overview_open_rate[] = $entry[1];
- $overview_click_rate[] = $entry[3];
- $overview_titles[] = $entry[2];
- }
- $overview_labels = array_reverse($overview_labels);
- $overview_open_rate = array_reverse($overview_open_rate);
- $overview_click_rate = array_reverse($overview_click_rate);
- ?>
- <div class="wrap" id="tnp-wrap">
- <?php include NEWSLETTER_DIR . '/tnp-header.php' ?>
- <div id="tnp-heading">
- <h2><?php _e('Global Newsletter Statistics', 'newsletter') ?></h2>
- </div>
- <div id="tnp-body" class="tnp-statistics">
- <form method="post" action="">
- <?php $controls->init(); ?>
- <?php if (empty($emails)) { ?>
- <img src="https://cdn.thenewsletterplugin.com/tnp-reports-dummy-image.png" style="max-width: 100%">
- <?php } else { ?>
- <div class="row">
- <div class="tnp-statistics-info-box">
- <p class="tnp-legend">Select Newsletter category:</p>
- <?php $controls->select('type', $type_options, 'All') ?>
- <?php $controls->button('update', __('Update Charts', 'newsletter')) ?>
- </div>
- </div>
- <br>
- <div class="row">
- <div class="col-md-6">
- <div class="tnp-widget">
- <h3>Overview (Last 20 Newsletters)</h3>
- <div class="inside">
- <p class="tnp-events-legend">Subscribers interactions distribution over time,<br>starting from the sending day.</p>
- <div id="tnp-events-chart">
- <canvas id="tnp-events-chart-canvas"></canvas>
- </div>
- <script type="text/javascript">
- var events_data = {
- labels: <?php echo json_encode($overview_labels) ?>,
- datasets: [
- {
- label: "Open",
- fill: false,
- strokeColor: "#27AE60",
- backgroundColor: "#27AE60",
- borderColor: "#27AE60",
- pointBorderColor: "#27AE60",
- pointBackgroundColor: "#27AE60",
- data: <?php echo json_encode($overview_open_rate) ?>
- },
- {
- label: "Click",
- fill: false,
- strokeColor: "#C0392B",
- backgroundColor: "#C0392B",
- borderColor: "#C0392B",
- pointBorderColor: "#C0392B",
- pointBackgroundColor: "#C0392B",
- data: <?php echo json_encode($overview_click_rate) ?>,
- yAxisID: "y-axis-2"
- }
- ]
- };
- var titles = <?php echo json_encode(array_reverse($overview_titles)) ?>;
- jQuery(document).ready(function ($) {
- ctxe = $('#tnp-events-chart-canvas').get(0).getContext("2d");
- eventsLineChart = new Chart(ctxe, {type: 'line', data: events_data,
- options: {
- scales: {
- xAxes: [{type: "category", "id": "x-axis-1", gridLines: {display: false}, ticks: {fontFamily: "Source Sans Pro"}}],
- yAxes: [
- {type: "linear", "id": "y-axis-1", gridLines: {display: false}, ticks: {fontColor: "#27AE60", fontFamily: "Source Sans Pro"}},
- {type: "linear", "id": "y-axis-2", position: "right", gridLines: {display: false}, ticks: {fontColor: "#C0392B", fontFamily: "Source Sans Pro"}}
- ]
- },
- tooltips: {
- callbacks: {
- afterTitle: function (data) {
- return titles[data[0].index];
- },
- label: function (tooltipItem, data) {
- return data.datasets[0].label + ": " + data.datasets[0].data[tooltipItem.index] + "% " +
- data.datasets[1].label + ": " + data.datasets[1].data[tooltipItem.index] + "%";
- }
- }
- }
- }
- });
- });
- </script>
- <div class="row">
- <div class="col-md-4">
- <div class="tnp-data">
- <div class="tnp-data-title"><?php _e('Total Sent Messages', 'newsletter') ?></div>
- <div class="tnp-data-value"><?php echo $total_sent; ?></div>
- </div>
- </div>
- <div class="col-md-4">
- <div class="tnp-data">
- <div class="tnp-data-title"><?php _e('Opened Newsletters', 'newsletter') ?></div>
- <div class="tnp-data-value"><?php echo $open_count_total; ?> (<?php echo $module->percent($open_count_total, $total_sent); ?>)</div>
- </div>
- </div>
- <div class="col-md-4">
- <div class="tnp-data">
- <div class="tnp-data-title"><?php _e('Clicked Newsletters', 'newsletter') ?></div>
- <div class="tnp-data-value"><?php echo $click_count_total; ?> (<?php echo $module->percent($click_count_total, $total_sent); ?>)</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- WORLD MAP -->
- <div class="col-md-6">
- <div class="tnp-widget">
- <h3><?php _e('Countries', 'newsletter') ?></h3>
- <div class="inside">
- <?php
- if (!has_action('newsletter_statistics_index_map')) {
- ?><a href="https://www.thenewsletterplugin.com/premium?utm_source=plugin&utm_medium=link&utm_content=worldmap&utm_campaign=newsletter-reports" target="_blank">
- <img src="<?php echo plugins_url('newsletter') ?>/statistics/images/map.gif" style="width: 100%">
- </a><?php
- } else {
- do_action('newsletter_statistics_index_map');
- }
- ?>
- </div>
- </div>
- </div>
- </div>
- <div class="row">
- <!-- LAST NEWSLETTERS -->
- <div class="col-md-12">
- <div class="tnp-widget">
- <h3><?php _e('Last newsletters', 'newsletter') ?> <a href="admin.php?page=newsletter_statistics_newsletters"><?php _e('Details', 'newsletter') ?></a></h3>
- <div class="inside">
- <?php
- $emails = $wpdb->get_results($wpdb->prepare("select send_on, id, subject, total, status, type, track, sent, subject from " . NEWSLETTER_EMAILS_TABLE . " where status in ('sent', 'sending') and send_on<%d order by send_on desc limit 5", time()));
- ?>
- <table class="widefat">
- <thead>
- <tr>
- <th>Id</th>
- <th><?php _e('Subject', 'newsletter') ?></th>
- <th>Type</th>
- <th><?php _e('Status', 'newsletter') ?></th>
- <th> </th>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($emails as &$email) { ?>
- <tr>
- <td><?php echo $email->id; ?></td>
- <td><?php echo htmlspecialchars($email->subject); ?></td>
- <td><?php echo $module->get_email_type_label($email); ?></td>
- <td><?php echo $module->get_email_status_label($email); ?></td>
- <td>
- <a href="<?php echo NewsletterStatistics::instance()->get_statistics_url($email->id); ?>" class="button-primary">Statistics</a>
- </td>
- </tr>
- <?php } ?>
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
- <div class="row">
- <div class="col-md-6">
- <div class="tnp-statistics-info-box">
- <p class="tnp-legend">Check Statistics global<br>configurations.</p>
- <a class="button-primary" href="admin.php?page=newsletter_statistics_settings"><?php _e('Settings') ?></a>
- </div>
- </div>
- <div class="col-md-6">
- </div>
- </div>
- <?php } ?>
- </form>
- </div>
- <?php include NEWSLETTER_DIR . '/tnp-footer.php' ?>
- </div>
|