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, labelsDistance: 0, labelsSkip: 1, labelsAnchor: "end", labelsMargin: 15, labelsDistance: 4, labelsProps: { fill: "#26B", "font-size": "11px", "font-weight": "bold" } }, r: { // right axis labels: true, labelsDistance: 0, 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 Receive: $ad, $when Return: $stats Since: 3.8 -------------------------------------------------------------*/ function adrotate_stats($ad, $when = 0, $until = 0) { global $wpdb; if($when > 0 AND is_numeric($when) AND $until > 0 AND is_numeric($until)) { $whenquery = " AND `thetime` >= '$when' AND `thetime` <= '$until' GROUP BY `ad` ASC"; } else if($when > 0 AND is_numeric($when) AND $until == 0) { $until = $when + 86400; $whenquery = " AND `thetime` >= '$when' AND `thetime` <= '$until'"; } else { $whenquery = ""; } $ad_query = ''; if(is_array($ad)) { $ad_query .= '('; foreach($ad as $key => $value) { $ad_query .= '`ad` = '.$value.' OR '; } $ad_query = rtrim($ad_query, " OR "); $ad_query .= ')'; } else { $ad_query = '`ad` = '.$ad; } $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 Receive: $type, $id, $month, $year Return: $nav Since: 3.8 -------------------------------------------------------------*/ 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')); if($type == 'ads') $page = 'adrotate-ads&view=report&ad='.$id; if($type == 'groups') $page = 'adrotate-groups&view=report&group='.$id; $nav = '<< '.__('Previous', 'adrotate').' - '; $nav .= ''.$months[$month-1].' '.$year.' - '; $nav .= '('.__('This month', 'adrotate').') - '; $nav .= ''. __('Next', 'adrotate').' >>'; return $nav; } /*------------------------------------------------------------- Name: adrotate_stats_graph Purpose: Generate graph Receive: $type, $id, $chartid, $start, $end Return: $output Since: 3.8 -------------------------------------------------------------*/ function adrotate_stats_graph($type, $id, $chartid, $start, $end) { global $wpdb; 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}adrotate_stats` WHERE `ad` = %d AND `thetime` >= %d AND `thetime` <= %d GROUP 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}adrotate_stats` WHERE `group` = %d AND `thetime` >= %d AND `thetime` <= %d GROUP BY `thetime` ASC;", $id, $start, $end), ARRAY_A); } if($type == 'global-report') { $stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats` WHERE `thetime` >= %d AND `thetime` <= %d GROUP BY `thetime` ASC;", $start, $end), ARRAY_A); } if($type == 'advertiser-global') { $stats = $wpdb->get_results($wpdb->prepare("SELECT `thetime`, SUM(`clicks`) as `clicks`, SUM(`impressions`) as `impressions` FROM `{$wpdb->prefix}adrotate_stats`, `{$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` 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, $dates, $clicks, $impressions); } else { $output = __('No data to show!', 'adrotate'); } return $output; } /*------------------------------------------------------------- Name: adrotate_ctr Purpose: Calculate Click-Through-Rate Receive: $clicks, $impressions, $round Return: $ctr Since: 3.7 -------------------------------------------------------------*/ 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_date_start Purpose: Get and return the localized UNIX time for the current hour, day and start of the week Receive: $what Return: int Since: 3.8.5.1 -------------------------------------------------------------*/ function adrotate_date_start($what) { $now = adrotate_now(); $string = gmdate('Y-m-d H:i:s', time()); preg_match('#([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})#', $string, $matches); switch($what) { case 'hour' : $string_time = gmmktime($matches[4], 0, 0, $matches[2], $matches[3], $matches[1]); $result = gmdate('U', $string_time + (get_option('gmt_offset') * HOUR_IN_SECONDS)); break; case 'day' : $timezone = get_option('timezone_string'); if($timezone) { $server_timezone = date('e'); date_default_timezone_set($timezone); $result = strtotime('00:00:00') + (get_option('gmt_offset') * HOUR_IN_SECONDS); date_default_timezone_set($server_timezone); } else { $result = gmdate('U', gmmktime(0, 0, 0, gmdate('n'), gmdate('j'))); } break; case 'week' : $timezone = get_option('timezone_string'); if($timezone) { $server_timezone = date('e'); date_default_timezone_set($timezone); $result = strtotime('Last Monday', $now) + (get_option('gmt_offset') * HOUR_IN_SECONDS); date_default_timezone_set($server_timezone); } else { $result = gmdate('U', gmmktime(0, 0, 0)); } break; } return $result; } /*------------------------------------------------------------- Name: adrotate_now Purpose: Get and return the localized UNIX time for "now" Receive: -None- Return: int Since: 3.8.6.2 -------------------------------------------------------------*/ function adrotate_now() { return time() + (get_option('gmt_offset') * HOUR_IN_SECONDS); } /*------------------------------------------------------------- Name: adrotate_count_impression Purpose: Count Impressions where needed Receive: $ad, $group Return: -None- Since: 3.10.12 -------------------------------------------------------------*/ function adrotate_count_impression($ad, $group = 0, $blog_id = 0) { global $wpdb, $adrotate_config, $adrotate_debug; if(($adrotate_config['enable_loggedin_impressions'] == 'Y' AND is_user_logged_in()) OR !is_user_logged_in()) { $now = adrotate_now(); $hour = adrotate_date_start('hour'); $remote_ip = adrotate_get_remote_ip(); if($adrotate_debug['timers'] == true) { $impression_timer = $now; } else { $impression_timer = $now - $adrotate_config['impression_timer']; } $transientkey = "adrotate_impression_".md5($ad.$remote_ip); $saved_timer = get_transient($transientkey); if(false === $saved_timer) { $saved_timer = 0; } if($saved_timer < $impression_timer AND adrotate_is_human()) { $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group)); if($stats > 0) { $wpdb->query("UPDATE `{$wpdb->prefix}adrotate_stats` SET `impressions` = `impressions` + 1 WHERE `id` = {$stats};"); } else { $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 0, 'impressions' => 1)); } set_transient($transientkey, $now, $adrotate_config['impression_timer']); } } } /*------------------------------------------------------------- Name: adrotate_impression_callback Purpose: Register a impression for dynamic groups Receive: $_POST Return: -None- Since: 3.10.14 -------------------------------------------------------------*/ function adrotate_impression_callback() { define('DONOTCACHEPAGE', true); define('DONOTCACHEDB', true); define('DONOTCACHCEOBJECT', true); global $adrotate_debug; $meta = $_POST['track']; if($adrotate_debug['track'] != true) { $meta = base64_decode($meta); } $meta = esc_attr($meta); // Don't use $impression_timer - It's for impressions used in javascript list($ad, $group, $blog_id, $impression_timer) = explode(",", $meta, 4); adrotate_count_impression($ad, $group, $blog_id); wp_die(); } /*------------------------------------------------------------- Name: adrotate_click_callback Purpose: Register clicks for clicktracking Receive: $_POST Return: -None- Since: 3.10.14 -------------------------------------------------------------*/ function adrotate_click_callback() { define('DONOTCACHEPAGE', true); define('DONOTCACHEDB', true); define('DONOTCACHCEOBJECT', true); global $wpdb, $adrotate_config, $adrotate_debug; $meta = $_POST['track']; if($adrotate_debug['track'] != true) { $meta = base64_decode($meta); } $meta = esc_attr($meta); // Don't use $impression_timer - It's for impressions used in javascript list($ad, $group, $blog_id, $impression_timer) = explode(",", $meta, 4); if(is_numeric($ad) AND is_numeric($group) AND is_numeric($blog_id)) { if(($adrotate_config['enable_loggedin_clicks'] == 'Y' AND is_user_logged_in()) OR !is_user_logged_in()) { $remote_ip = adrotate_get_remote_ip(); if(adrotate_is_human() AND $remote_ip != "unknown" AND !empty($remote_ip)) { $now = adrotate_now(); $hour = adrotate_date_start('hour'); if($adrotate_debug['timers'] == true) { $click_timer = $now; } else { $click_timer = $now - $adrotate_config['click_timer']; } $transientkey = "adrotate_click_".md5($ad.$remote_ip); $saved_timer = get_transient($transientkey); if(false === $saved_timer) { $saved_timer = 0; } if($saved_timer < $click_timer) { $stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `{$wpdb->prefix}adrotate_stats` WHERE `ad` = %d AND `group` = %d AND `thetime` = {$hour};", $ad, $group)); if($stats > 0) { $wpdb->query("UPDATE `{$wpdb->prefix}adrotate_stats` SET `clicks` = `clicks` + 1 WHERE `id` = {$stats};"); } else { $wpdb->insert($wpdb->prefix.'adrotate_stats', array('ad' => $ad, 'group' => $group, 'thetime' => $hour, 'clicks' => 1, 'impressions' => 1)); } set_transient($transientkey, $now, $adrotate_config['click_timer']); } } } unset($remote_ip, $track, $meta, $ad, $group, $remote, $banner); } wp_die(); } ?>