jQuery(document).ready(function(){
jQuery(\"#chart-".$id."\").chart({
type: 'line',
margins: [5, 45, 45, 45],
values: {
serie1: [".$clicks."], serie2: [".$impressions."]
},
labels: [".$labels."],
tooltips: function(env, serie, index, value, label) {
return '
' + label + '
Clicks: ' + env.opt.values['serie1'][index] + '
Impressions: ' + env.opt.values['serie2'][index] + '
';
},
defaultSeries: {
plotProps: { 'stroke-width': 3 }, dot: true, rounded: true, dotProps: { stroke: 'white', size: 5, 'stroke-width': 1, opacity: 0 }, highlight: { scaleSpeed: 0, scaleEasing: '', scale: 1.2, newProps: { opacity: 1 } }, tooltip: { height: 55, width: 120, padding: [0], offset: [-10, -10], frameProps: { opacity: 0.95, stroke: '#000' } }
},
series: {
serie1: {
fill: true, fillProps: { opacity: .1 }, color: '#26B',
},
serie2: {
axis: 'r', color: '#F80', plotProps: { 'stroke-width': 2 }, dotProps: { stroke: 'white', size: 3, 'stroke-width': 1 }
}
},
defaultAxis: {
labels: true, labelsProps: { fill: '#777', 'font-size': '10px', }, labelsAnchor: 'start', labelsMargin: 5, labelsDistance: 8, labelsRotate: 65
},
axis: {
l: { // left axis
labels: true, labelsSkip: 1, labelsAnchor: 'end', labelsMargin: 15, labelsDistance: 4, labelsProps: { fill: '#26B', 'font-size': '11px', 'font-weight': 'bold' }
},
r: { // right axis
labels: true, labelsSkip: 1, labelsAnchor: 'start', labelsMargin: 15, labelsDistance: 4, labelsProps: { fill: '#F80', 'font-size': '11px', 'font-weight': 'bold' }
}
},
features: {
mousearea: {
type: 'axis'
},
tooltip: {
positionHandler: function(env, tooltipConf, mouseAreaData, suggestedX, suggestedY) {
return [mouseAreaData.event.pageX, mouseAreaData.event.pageY, true]
}
},
grid: {
draw: true, // draw both x and y grids
forceBorder: [true, true, true, true], // force grid for external border
props: {
stroke: '#eee' // color for the grid
}
}
}
});
});
";
}
}
/*-------------------------------------------------------------
Name: adrotate_stats
Purpose: Generate latest number of clicks and impressions
-------------------------------------------------------------*/
function adrotate_stats($ad, $when = 0, $until = 0) {
global $wpdb;
if($when > 0 AND is_numeric($when) AND $until > 0 AND is_numeric($until)) { // date range
$whenquery = " AND `thetime` >= $when AND `thetime` <= $until GROUP BY `ad` ORDER BY `ad` ASC";
} else if($when > 0 AND is_numeric($when) AND $until == 0) { // one day
$until = $when + 86400;
$whenquery = " AND `thetime` >= $when AND `thetime` <= $until";
} else { // everything
$whenquery = "";
}
$ad_query = "`ad` = ".$ad;
if(is_array($ad)) {
$ad_query = "(";
foreach($ad as $key => $value) {
$ad_query .= "`ad` = $value OR ";
}
$ad_query = rtrim($ad_query, " OR ");
$ad_query .= ")";
}
$stats = $wpdb->get_row("SELECT SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats` WHERE {$ad_query}{$whenquery};", ARRAY_A);
if(empty($stats['clicks'])) $stats['clicks'] = '0';
if(empty($stats['impressions'])) $stats['impressions'] = '0';
return $stats;
}
/*-------------------------------------------------------------
Name: adrotate_stats_nav
Purpose: Create browsable links for graph
-------------------------------------------------------------*/
function adrotate_stats_nav($type, $id, $month, $year) {
global $wpdb;
$lastmonth = $month-1;
$nextmonth = $month+1;
$lastyear = $nextyear = $year;
if($month == 1) {
$lastmonth = 12;
$lastyear = $year - 1;
}
if($month == 12) {
$nextmonth = 1;
$nextyear = $year + 1;
}
$months = array(__("January", 'adrotate'), __("February", 'adrotate'), __("March", 'adrotate'), __("April", 'adrotate'), __("May", 'adrotate'), __("June", 'adrotate'), __("July", 'adrotate'), __("August", 'adrotate'), __("September", 'adrotate'), __("October", 'adrotate'), __("November", 'adrotate'), __("December", 'adrotate'));
$page = '';
if($type == 'ads') $page = 'adrotate-statistics&view=advert&id='.$id;
if($type == 'groups') $page = 'adrotate-statistics&view=group&id='.$id;
if($type == 'fullreport') $page = 'adrotate-statistics';
if($type == 'advertiser') $page = 'adrotate-advertiser&view=report&ad='.$id;
if($type == 'advertiserfull') $page = 'adrotate-advertiser';
$nav = "<< ".__("Previous", 'adrotate')." - ";
$nav .= "".$months[$month-1]." ".$year." - ";
$nav .= "(".__("This month", 'adrotate').") - ";
$nav .= "". __("Next", 'adrotate')." >>";
return $nav;
}
/*-------------------------------------------------------------
Name: adrotate_stats_graph
Purpose: Generate graph
-------------------------------------------------------------*/
function adrotate_stats_graph($type, $id, $chartid, $start, $end) {
global $wpdb;
$table = 'adrotate_stats';
if($type == 'ads' OR $type == 'advertiser') {
$stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}{$table}` WHERE `ad` = %d AND `thetime` >= %d AND `thetime` <= %d GROUP BY `thetime` ORDER BY `thetime` ASC;", $id, $start, $end), ARRAY_A);
}
if($type == 'groups') {
$stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}{$table}` WHERE `group` = %d AND `thetime` >= %d AND `thetime` <= %d GROUP BY `thetime` ORDER BY `thetime` ASC;", $id, $start, $end), ARRAY_A);
}
if($type == 'fullreport') {
$stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}{$table}` WHERE `thetime` >= %d AND `thetime` <= %d GROUP BY `thetime` ORDER BY `thetime` ASC;", $start, $end), ARRAY_A);
}
if($type == 'advertiserfull') {
$stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}{$table}`, `{$wpdb->prefix}adrotate_linkmeta` WHERE `{$wpdb->prefix}adrotate_stats`.`ad` = `{$wpdb->prefix}adrotate_linkmeta`.`ad` AND `{$wpdb->prefix}adrotate_linkmeta`.`user` = %d AND `{$wpdb->prefix}adrotate_stats`.`thetime` >= %d AND `{$wpdb->prefix}adrotate_stats`.`thetime` <= %d GROUP BY `thetime` ORDER BY `thetime` ASC;", $id, $start, $end), ARRAY_A);
}
if($stats) {
$dates = $clicks = $impressions = '';
foreach($stats as $result) {
if(empty($result['clicks'])) $result['clicks'] = '0';
if(empty($result['impressions'])) $result['impressions'] = '0';
$dates .= ',"'.date_i18n("d M", $result['thetime']).'"';
$clicks .= ','.$result['clicks'];
$impressions .= ','.$result['impressions'];
}
$dates = trim($dates, ',');
$clicks = trim($clicks, ',');
$impressions = trim($impressions, ',');
$output = "";
$output .= "";
$output .= adrotate_draw_graph($chartid, $dates, $clicks, $impressions);
unset($stats, $graph, $dates, $clicks, $impressions);
} else {
$output = __("No data to show!", 'adrotate');
}
return $output;
}
/*-------------------------------------------------------------
Name: adrotate_ctr
Purpose: Calculate Click-Through-Rate
-------------------------------------------------------------*/
function adrotate_ctr($clicks = 0, $impressions = 0, $round = 2) {
if($impressions > 0 AND $clicks > 0) {
$ctr = round($clicks/$impressions*100, $round);
} else {
$ctr = 0;
}
return $ctr;
}
/*-------------------------------------------------------------
Name: adrotate_prepare_fullreport
Purpose: Generate live stats for admins
-------------------------------------------------------------*/
function adrotate_prepare_fullreport() {
global $wpdb;
$today = adrotate_date_start('day');
$stats['banners'] = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}adrotate` WHERE (`type` = 'active' OR `type` = 'expired' OR `type` = 'error');");
$stats['tracker'] = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}adrotate` WHERE `tracker` = 'Y' AND (`type` = 'active' OR `type` = 'expired' OR `type` = 'error');");
$stats['overall_clicks'] = $wpdb->get_var("SELECT SUM(`clicks`) as `clicks` FROM `{$wpdb->prefix}adrotate_stats`;");
$stats['overall_impressions'] = $wpdb->get_var("SELECT SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats`;");
$active_ids = $wpdb->get_results("SELECT `id` FROM `{$wpdb->prefix}adrotate` WHERE (`type` = 'active' OR `type` = 'expired' OR `type` = 'error');");
if(count($active_ids) > 0) {
foreach($active_ids as $id) {
$sorted[] = $id->id;
}
$active_ids = " AND (`ad` = ".implode(' OR `ad` = ', $sorted).")";
unset($sorted);
} else {
$active_ids = "";
}
$this_month_start = mktime(0, 0, 0, date('m'), 1, date('Y'));
$this_month_end = mktime(0, 0, 0, date('m'), date('t'), date('Y'));
$stats['this_month_clicks'] = $wpdb->get_var("SELECT SUM(`clicks`) as `clicks` FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` >= {$this_month_start} AND `thetime` <= {$this_month_end}{$active_ids};");
$stats['this_month_impressions'] = $wpdb->get_var("SELECT SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` >= {$this_month_start} AND `thetime` <= {$this_month_end}{$active_ids};");
$last_month_start = mktime(0, 0, 0, date('m')-1, 1, date('Y'));
$last_month_end = mktime(0, 0, 0, date('m'), 0, date('Y'));
$stats['last_month_clicks'] = $wpdb->get_var("SELECT SUM(`clicks`) as `clicks` FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` >= {$last_month_start} AND `thetime` <= {$last_month_end}{$active_ids};");
$stats['last_month_impressions'] = $wpdb->get_var("SELECT SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` >= {$last_month_start} AND `thetime` <= {$last_month_end}{$active_ids};");
if(!$stats['banners']) $stats['banners'] = 0;
if(!$stats['tracker']) $stats['tracker'] = 0;
if(!$stats['overall_clicks']) $stats['overall_clicks'] = 0;
if(!$stats['overall_impressions']) $stats['overall_impressions'] = 0;
if(!$stats['last_month_clicks']) $stats['last_month_clicks'] = 0;
if(!$stats['last_month_impressions']) $stats['last_month_impressions'] = 0;
if(!$stats['this_month_clicks']) $stats['this_month_clicks'] = 0;
if(!$stats['this_month_impressions']) $stats['this_month_impressions'] = 0;
return $stats;
}
/*-------------------------------------------------------------
Name: adrotate_archive_stats
Purpose: Move stats into a secondary table when adverst are archived
-------------------------------------------------------------*/
function adrotate_archive_stats($id) {
global $wpdb;
$advert_tracking = $wpdb->get_var("SELECT `tracker` FROM `{$wpdb->prefix}adrotate` WHERE `ad` = {$id} ORDER BY `id` ASC LIMIT 1;");
if($advert_tracking == "Y") {
$insert = $delete = false;
$stats = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = {$id} ORDER BY `id` ASC;");
foreach($stats as $stat) {
if($stat->id > 0) {
$insert[] = "(".$stat->ad.", ".$stat->group.", ".$stat->thetime.", ".$stat->clicks.", ".$stat->impressions.")";
$delete[] = $stat->id;
}
}
// Insert each chunk to the archive table
if(is_array($insert)) {
// Split the data into chunks
$insert = array_chunk($insert, 30);
foreach($insert as $chunk) {
$wpdb->query("INSERT INTO `{$wpdb->prefix}adrotate_stats_archive` (`ad`, `group`, `thetime`, `clicks`, `impressions`) VALUES ".implode(",", $chunk).";");
unset($chunk);
}
// Delete old stats
$wpdb->query("DELETE FROM `{$wpdb->prefix}adrotate_stats` WHERE `id` IN (".implode(',', $delete).");");
}
unset($stats, $insert, $delete);
}
}
?>