/** * Display the Stats * * @access public * @return void */ function nnr_stats_tracker_load_v1() { do_action('nnr_stats_before_load_v1'); // Check for Table Name if (!isset($_POST['table_name']) || empty($_POST['table_name'])) { echo 'No Stats table name found.'; die; } // Check for Table Name if (!isset($_POST['data_table_name']) || empty($_POST['data_table_name'])) { echo 'No Data Manager table name found.'; die; } // Check for Text Domain if (!isset($_POST['text_domain']) || empty($_POST['text_domain'])) { $_POST['text_domain'] = ''; } // Check for Stats Page if (!isset($_POST['stats_page']) || empty($_POST['stats_page'])) { $_POST['stats_page'] = ''; } // Check for Text Domain if (!isset($_POST['prefix']) || empty($_POST['prefix'])) { $_POST['prefix'] = ''; } $pie_chart_colors = array('#00a0b0', '#edc951', '#eb6841', '#4f372d', '#cc2a36'); $stats_tracker = new NNR_Stats_Tracker_v1($_POST['table_name']); $data_manager = new NNR_Data_Manager_v1($_POST['data_table_name']); // Get Start and End Dates $start_date = date('Y-m-d', mktime(0, 0, 0, date("m") - 1, date("d"), date("Y"))); $end_date = date('Y-m-d', strtotime(current_time('mysql'))); $post_start_date = urldecode($_POST['start_date']); $post_end_date = urldecode($_POST['end_date']); if (isset($post_start_date) && $post_start_date != '') { $start_date = date('Y-m-d', strtotime($post_start_date)); } if (isset($post_end_date) && $post_end_date != '') { $end_date = date('Y-m-d', strtotime($post_end_date)); } global $wpdb; // All optin_fire stats if (isset($_POST['data_id']) && $_POST['data_id'] == 'false') { $data = $data_manager->get_data(); $stats = $stats_tracker->get_stats($start_date, $end_date); $data_stats = array(); foreach ($data as $item) { foreach ($stats as $stat) { if ($item['id'] == $stat['data_id']) { $data_stats[$item['id']] = array('data_id' => $stat['data_id'], 'name' => $item['name'], 'date' => $stat['date'], 'impressions' => isset($data_stats[$item['id']]['impressions']) ? $data_stats[$item['id']]['impressions'] + $stat['impressions'] : $stat['impressions'], 'conversions' => isset($data_stats[$item['id']]['conversions']) ? $data_stats[$item['id']]['conversions'] + $stat['conversions'] : $stat['conversions']); } } } $impressions_total = 0; $conversions_total = 0; foreach ($data_stats as $data_stat) { $impressions_total += $data_stat['impressions']; $conversions_total += $data_stat['conversions']; } $ctr = $impressions_total != 0 ? round($conversions_total / $impressions_total * 100, 2) : 0; $stats_content = ' <div class="nnr-stats-total-container col-sm-12"> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-impressions-total"> <span>' . __('Impressions', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . number_format($impressions_total) . '</div> <i class="fa fa-globe"></i> </div> </div> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-conversions-total"> <span>' . __('Conversions', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . number_format($conversions_total) . '</div> <i class="fa fa-certificate"></i> </div> </div> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-conversion-rate-total"> <span>' . __('Conversion Rate', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . $ctr . '%</div> <i class="fa fa-usd"></i> </div> </div> </div> <div class="clearfix"></div> <div class="col-sm-6 nnr-stats-table-container"> <h3 id="nnr-heading" class="text-center">' . __('Total Stats', $_POST['text_domain']) . '</h3> <table class="nnr-stats-table table sortable"> <thead> <tr> <th>' . __('Name', $_POST['text_domain']) . '</th> <th class="nnr-impressions-key">' . __('Impressions', $_POST['text_domain']) . '</th> <th class="nnr-conversions-key">' . __('Conversions', $_POST['text_domain']) . '</th> <th data-defaultsort="desc" class="nnr-conversion-rate-key">' . __('Conversion Rate', $_POST['text_domain']) . '</th> </tr> </thead> <tbody>'; if (count($data_stats) < 1) { $stats_content .= '<tr><td>' . __('No Stats Data for this time period', $_POST['text_domain']) . '</td></tr>'; } foreach ($data_stats as $data_stat) { $ctr = $data_stat['impressions'] > 0 ? round($data_stat['conversions'] / $data_stat['impressions'] * 100, 2) : '0'; $stats_content .= '<tr> <td data-value="' . $data_stat['name'] . '"><a href="' . admin_url() . 'admin.php?page=' . $_POST['stats_page'] . '&data_id=' . $data_stat['data_id'] . '&data_name=' . $data_stat['name'] . '" class="">' . $data_stat['name'] . '</a></td> <td data-value="' . $data_stat['impressions'] . '">' . number_format($data_stat['impressions']) . '</td>'; $stats_content .= ' <td data-value="' . $data_stat['conversions'] . '">' . number_format($data_stat['conversions']) . '</td> <td data-value="' . $ctr . '" class="conversions column-conversions">' . $ctr . '%</td> </tr>'; } $stats_content .= '</tbody> </table> </div> <div class="nnr-conversion-chart col-sm-6"> <h3 id="nnr-heading" class="text-center">' . __('Conversion Distribution', $_POST['text_domain']) . '</h3> <div class="col-sm-12"> <canvas id="nnr-pie-chart"></canvas> </div> <ul class="col-sm-12 nnr-pie-chart-legend-colors">'; $counter = 0; foreach ($data_stats as $data_stat) { if ($data_stat['conversions'] < 1) { continue; } $stats_content .= '<li class="nnr-pie-chart-legend-item"> <span class="nnr-pie-chart-legend-color" style="background-color:' . $pie_chart_colors[$counter % count($pie_chart_colors)] . '"></span> <span class="nnr-pie-chart-optin-name">' . $data_stat['name'] . '</span> </li>'; $counter++; } $stats_content .= '</ul> </div>'; } else { if (isset($_POST['data_id']) && $_POST['data_id'] != 'false') { $data_stats = $stats_tracker->get_stats_from_id($_POST['data_id'], $start_date, $end_date); $data = $data_manager->get_data_from_id($_POST['data_id']); $stats_display = new NNR_Stats_Tracker_Display_v1(''); $data_stats = $stats_display->add_empty_data($start_date, $end_date, $data_stats); // Unset index foreach ($data_stats as $key => $data_stat) { unset($data_stats[$key]['id']); unset($data_stats[$key]['data_id']); } $impressions_total = 0; $conversions_total = 0; foreach ($data_stats as $data_stat) { $impressions_total += $data_stat['impressions']; $conversions_total += $data_stat['conversions']; } $ctr = $impressions_total != 0 ? round($conversions_total / $impressions_total * 100, 2) : 0; $stats_content = '<div class="nnr-stats-total-container col-sm-12"> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-impressions-total"> <span>' . __('Impressions', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . number_format($impressions_total) . '</div> <i class="fa fa-globe"></i> </div> </div> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-conversions-total"> <span>' . __('Conversions', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . number_format($conversions_total) . '</div> <i class="fa fa-certificate"></i> </div> </div> <div class="nnr-stats-totals col-sm-4"> <div class="nnr-stats-conversion-rate-total"> <span>' . __('Conversion Rate', $_POST['text_domain']) . '</span> <div class="nnr-stats-totals-text">' . $ctr . '%</div> <i class="fa fa-usd"></i> </div> </div> </div> <div class="clearfix"></div> <div class="nnr-line-graph-container"> <h3 id="nnr-heading" class="text-center">' . __('Impressions and Conversions', $_POST['text_domain']) . '</h3> <canvas id="nnr-line-graph"></canvas> </div> <div class="col-sm-12"> <h3 id="nnr-heading" class="text-center">' . __('Total Stats', $_POST['text_domain']) . '</h3> <table class="table table-responsive sortable"> <thead> <th data-defaultsort="desc">' . __('Date', $_POST['text_domain']) . '</th> <th class="nnr-impressions-key">' . __('Impressions', $_POST['text_domain']) . '</th> <th class="nnr-conversions-key">' . __('Conversions', $_POST['text_domain']) . '</th> <th class="nnr-conversion-rate-key">' . __('Conversion Rate', $_POST['text_domain']) . '</th> </thead>'; foreach (array_reverse($data_stats) as $data_stat) { $ctr = $data_stat['impressions'] > 0 ? round($data_stat['conversions'] / $data_stat['impressions'] * 100, 2) : '0'; $stats_content .= '<tr> <td data-value="' . strtotime($data_stat['date']) . '">' . date('M j Y', strtotime($data_stat['date'])) . '</td> <td data-value="' . $data_stat['impressions'] . '">' . number_format($data_stat['impressions']) . '</td> <td data-value="' . $data_stat['conversions'] . '">' . number_format($data_stat['conversions']) . '</td> <td data-value="' . $ctr . '" class="conversions column-conversions">' . $ctr . '%</td>'; $stats_content .= '</tr>'; } $stats_content .= '</table> </div>'; } } do_action('nnr_stats_after_load_v1'); echo json_encode(apply_filters('nnr_stats_load_data_v1', array('stats_content' => $stats_content, 'data_stats' => $data_stats))); die; // this is required to terminate immediately and return a proper response }
<!-- Show based on status --> <a class="<?php echo !isset($_GET['status']) ? 'nnr-current-tab' : 'nnr-tab'; ?> " href="<?php echo admin_url() . 'admin.php?page=' . self::$dashboard_page; ?> "> <?php _e('All', self::$text_domain); ?> <span class="<?php echo self::$prefix_dash . 'count'; ?> ">(<?php echo count($data_manager->get_data()); ?> )</span></a> | <a class="<?php echo isset($_GET['status']) && $_GET['status'] == 'active' ? 'nnr-current-tab' : 'nnr-tab'; ?> " href="<?php echo admin_url() . 'admin.php?page=' . self::$dashboard_page; ?> &status=active"> <?php _e('Active', self::$text_domain); ?> <span class="<?php echo self::$prefix_dash . 'count'; ?> ">(<?php
/** * Prepares data for display. * * @since 1.0.0 * * @param N/A * @return N/A */ function prepare_items() { do_action('nnr_data_man_before_table_prepare_items_v1'); $data_manager = new NNR_Data_Manager_v1($this->table_name); global $wpdb; $per_page = 50; $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array($columns, $hidden, $sortable); $current_page = $this->get_pagenum(); // All if (!isset($_GET['status'])) { $this->items = $data_manager->get_data(); } else { if (isset($_GET['status']) && $_GET['status'] == 'active') { $this->items = $data_manager->get_active_data(); } else { $this->items = $data_manager->get_inactive_data(); } } $this->items = apply_filters('nnr_data_man_table_items_v1', $this->items); $total_items = count($this->items); /** * The WP_List_Table class does not handle pagination for us, so we need * to ensure that the data is trimmed to only the current page. We can use * array_slice() to */ $data = apply_filters('nnr_data_man_table_data_v1', array_slice($this->items, ($current_page - 1) * $per_page, $per_page)); $this->set_pagination_args(apply_filters('nnr_data_man_table_set_pagination_args_v1', array('total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items / $per_page)))); do_action('nnr_data_man_after_table_prepare_items_v1'); }