Example #1
0
 public static final function getInstance()
 {
     if (!self::$_instance) {
         $class = __CLASS__;
         self::$_instance = new $class();
         self::$_instance->_initHooks();
     }
     return self::$_instance;
 }
Example #2
0
    function form($instance)
    {
        $title = !empty($instance['title']) ? esc_attr($instance['title']) : esc_attr('Popular Right Now', 'better-analytics');
        $number = isset($instance['number']) ? absint($instance['number']) : 5;
        $betterAnalyticsOptions = get_option('better_analytics');
        if (!DigitalPointBetterAnalytics_Base_Public::getInstance()->getTokens() || !$betterAnalyticsOptions['api']['profile']) {
            echo '<p>' . sprintf(esc_html__('No Linked Google Analytics Account (API access required for this widget).  You can link one in the %1$sBetter Analytics API settings%2$s.', 'better-analytics'), '<a href="' . esc_url(menu_page_url('better-analytics', false) . '#top#api') . '">', '</a>') . '</p>';
        }
        ?>

		<p><label for="<?php 
        echo $this->get_field_id('title');
        ?>
"><?php 
        esc_html_e('Title:');
        ?>
</label>
			<input class="widefat" id="<?php 
        echo $this->get_field_id('title');
        ?>
" name="<?php 
        echo $this->get_field_name('title');
        ?>
" type="text" value="<?php 
        echo $title;
        ?>
" /></p>

		<p><label for="<?php 
        echo $this->get_field_id('number');
        ?>
"><?php 
        esc_html_e('Number of URLs to show:', 'better-analytics');
        ?>
</label>
			<input id="<?php 
        echo $this->get_field_id('number');
        ?>
" name="<?php 
        echo $this->get_field_name('number');
        ?>
" type="text" value="<?php 
        echo $number;
        ?>
" size="3" /></p>

	<?php 
    }
Example #3
0
 public static function getRealtimeData($secondsToCache = 300, $returnData = false)
 {
     $betterAnalyticsOptions = get_option('better_analytics');
     if (DigitalPointBetterAnalytics_Base_Public::getInstance()->getTokens() && @$betterAnalyticsOptions['api']['profile']) {
         $reportingObject = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
         $cacheKey = $reportingObject->getRealtime('rt:activeUsers', 'rt:source,rt:medium,rt:referralPath,rt:pagePath,rt:deviceCategory,rt:country,rt:keyword');
         $data = $reportingObject->getResults($cacheKey);
         $realTimeOutput = array('users' => intval(@$data['totalsForAllResults']['rt:activeUsers']));
         if ($data['rows']) {
             foreach ($data['rows'] as $row) {
                 if (strlen($row[1]) < 4) {
                     $medium = strtoupper($row[1]);
                 } else {
                     $medium = ucwords(strtolower($row[1]));
                 }
                 $realTimeOutput['medium'][$medium] += $row[7];
                 if ($row[1] == 'REFERRAL') {
                     $realTimeOutput['referral_path'][$row[0] . $row[2]] += $row[7];
                 }
                 $realTimeOutput['page_path'][$row[3]] += $row[7];
                 $deviceCategory = ucwords(strtolower($row[4]));
                 $realTimeOutput['devices'][$deviceCategory] += $row[7];
                 $realTimeOutput['country'][$row[5]] += $row[7];
                 if ($row[1] == 'ORGANIC') {
                     $keywords = trim(strtolower($row[6]));
                     $realTimeOutput['keywords'][$keywords] += $row[7];
                 }
             }
             foreach ($realTimeOutput as &$array) {
                 if (is_array($array)) {
                     arsort($array);
                 }
             }
         }
         set_transient('ba_realtime', $realTimeOutput, $secondsToCache);
         if ($returnData) {
             return $realTimeOutput;
         }
     }
 }
Example #4
0
 public function api_authentication()
 {
     if (!empty($_REQUEST['code'])) {
         $code = $_REQUEST['code'];
         $response = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->exchangeCodeForToken($code);
         if (!empty($response->error) && !empty($response->error_description)) {
             echo sprintf('%1$s<br /><br /><b>%2$s</b>: %3$s', esc_html__('Invalid Google API Code:', 'better-analytics'), $response->error, $response->error_description);
             return;
         }
         if (empty($response->expires_in)) {
             echo sprintf('%1$s:<br /><br />%2$s', esc_html__('Unknown Google API Error:', 'better-analytics'), nl2br(var_export($response, true)));
             return;
         }
         $response->expires_at = time() + $response->expires_in - 100;
         unset($response->expires_in);
         DigitalPointBetterAnalytics_Base_Public::getInstance()->updateTokens($response, is_network_admin());
         DigitalPointBetterAnalytics_CronEntry_Jobs::hour(true);
         // Checks for access
         $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance();
         $reportingClass->deleteProfileCache();
         $reportingClass->getProfiles();
         if (is_network_admin()) {
             wp_redirect(self_admin_url('settings.php'), 302);
         } else {
             wp_redirect(menu_page_url('better-analytics', false) . '#top#api', 302);
         }
         return;
     }
     $url = menu_page_url('better-analytics_auth', false);
     // Hacky fix for WordPress bug:  https://core.trac.wordpress.org/ticket/28226
     if (strpos($url, 'wp-admin/settings.php')) {
         $url = str_replace('wp-admin/settings.php', 'wp-admin/network/settings.php', $url);
     }
     wp_redirect(DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getAuthenticationUrl($url, true), 302);
 }
Example #5
0
 protected function _deleteTokens()
 {
     if (!$this->_overrideTokens) {
         DigitalPointBetterAnalytics_Base_Public::getInstance()->deleteTokens();
     }
 }
Example #6
0
<?php

wp_enqueue_script('jsapi', 'https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22visualization%22%2C%22version%22%3A%221.1%22%2C%22packages%22%3A%5B%22corechart%22%2C%22geochart%22%2C%22table%22%5D%7D%5D%7D', array(), null);
wp_enqueue_script('better_analytics_admin_js', BETTER_ANALYTICS_PLUGIN_URL . 'assets/digitalpoint/js/admin.js', array(), BETTER_ANALYTICS_VERSION);
wp_enqueue_style('better_analytics_admin_css', BETTER_ANALYTICS_PLUGIN_URL . 'assets/digitalpoint/css/admin.css', array(), BETTER_ANALYTICS_VERSION);
$betterAnalyticsOptions = get_option('better_analytics');
DigitalPointBetterAnalytics_Helper_Api::check();
if (!DigitalPointBetterAnalytics_Base_Public::getInstance()->getTokens() || !$betterAnalyticsOptions['api']['profile']) {
    printf(esc_html__('%1$sSet up API access%2$s to utilize Better Analytics charts.', 'better-analytics'), '<a href="' . esc_url(menu_page_url('better-analytics', false) . '#top#api') . '">', '</a>');
} else {
    $betterAnalyticsDashboardPick = get_option('ba_dashboard_pick');
    $dimensions = DigitalPointBetterAnalytics_ControllerAdmin_Analytics::getDimensionsForCharts();
    $metrics = DigitalPointBetterAnalytics_ControllerAdmin_Analytics::getMetricsForCharts();
    if (!$betterAnalyticsDashboardPick['dimension']) {
        $betterAnalyticsDashboardPick['dimension'] = 'p:ga:date';
    }
    if (!$betterAnalyticsDashboardPick['metric']) {
        $betterAnalyticsDashboardPick['metric'] = 'ga:pageviews';
    }
    if (!$betterAnalyticsDashboardPick['days']) {
        $betterAnalyticsDashboardPick['days'] = '30';
    }
    echo '<div id="ba_history" style="display: inline; padding-right: 10px;' . ($betterAnalyticsDashboardPick['realtime'] ? 'color=grey;' : '') . '">
		<select id="ba_metric"' . ($betterAnalyticsDashboardPick['realtime'] ? ' disabled="disabled"' : '') . '>';
    foreach ($metrics as $key => $name) {
        echo '<option value="' . $key . '"' . ($key == $betterAnalyticsDashboardPick['metric'] ? ' selected="selected"' : '') . '>' . htmlentities($name) . '</option>';
    }
    echo '</select>';
    echo ' &nbsp; ' . esc_html__('by', 'better-analytics') . ' &nbsp; ';
    echo '<select data-placeholder="Pick chart" id="ba_dimension" class="chosen-select"' . ($betterAnalyticsDashboardPick['realtime'] ? ' disabled="disabled"' : '') . '>';
    foreach ($dimensions as $key => $name) {
Example #7
0
if (!empty($betterAnalyticsOptions['extra_js'])) {
    $jsonOptions['js'] = $betterAnalyticsOptions['extra_js'];
}
$jsonOptions['g'] = (@$betterAnalyticsInternal['v'] ? 1 : 0) + (@$betterAnalyticsOptions['link_attribution'] ? 4 : 0) + (@$betterAnalyticsOptions['track_userid'] ? 8 : 0) + (@$betterAnalyticsOptions['anonymize_ips'] ? 16 : 0) + (@$betterAnalyticsOptions['demographic_tracking'] ? 32 : 0) + (@$betterAnalyticsOptions['force_ssl'] ? 64 : 0) + (@$betterAnalyticsOptions['events']['user_engagement'] ? 128 : 0) + (@$betterAnalyticsOptions['events']['youtube'] ? 256 : 0) + (@$betterAnalyticsOptions['events']['link_click'] ? 512 : 0) + (@$betterAnalyticsOptions['events']['missing_images'] ? 1024 : 0) + (@$betterAnalyticsOptions['events']['ajax_request'] ? 2048 : 0) + (@$betterAnalyticsOptions['events']['error_js'] ? 4096 : 0) + (@$betterAnalyticsOptions['events']['error_ajax'] ? 8192 : 0) + (@$betterAnalyticsOptions['events']['error_console'] ? 16384 : 0) + (@$betterAnalyticsOptions['events']['error_youtube'] ? 32768 : 0) + (@$betterAnalyticsOptions['events']['error_404'] ? 65536 : 0) + (@$betterAnalyticsOptions['events']['page_scroll'] ? 131072 : 0) + (@$betterAnalyticsOptions['events']['time_on_page'] ? 262144 : 0) + (@$betterAnalyticsOptions['javascript']['run_time'] == 'immediately' ? 1073741824 : 0) + (@$betterAnalyticsOptions['debugging'] ? 2147483648 : 0);
if (!empty($betterAnalyticsOptions['events']['downloads']) && !empty($betterAnalyticsOptions['file_extensions'])) {
    $jsonOptions['dl'] = '\\.' . implode('|\\.', $betterAnalyticsOptions['file_extensions']);
}
$jsonOptions['s'] = (@$betterAnalyticsInternal['v'] ? 1 : 0) + (@$betterAnalyticsOptions['social']['facebook'] ? 2 : 0) + (@$betterAnalyticsOptions['social']['twitter'] ? 4 : 0) + (@$betterAnalyticsOptions['social']['pinterest'] ? 16 : 0) + (@$betterAnalyticsOptions['social']['linkedin'] ? 32 : 0);
$jsonOptions['a'] = (@$betterAnalyticsInternal['v'] ? 1 : 0) + (@$betterAnalyticsOptions['ads']['adsense'] ? 2 : 0) + (@$betterAnalyticsOptions['ads']['outbrain'] ? 4 : 0) + (@$betterAnalyticsOptions['ads']['taboola'] ? 8 : 0) + (@$betterAnalyticsOptions['ads']['digitalpoint'] ? 16 : 0) + (@$betterAnalyticsOptions['ads']['revcontent'] ? 32 : 0);
if (!empty($betterAnalyticsOptions['dimension']['category']) && $baCategories) {
    $jsonOptions['d']['c'] = array(intval($betterAnalyticsOptions['dimension']['category']), implode(',', $baCategories));
}
if (!empty($betterAnalyticsOptions['dimension']['author']) && $baAuthor) {
    $jsonOptions['d']['a'] = array(intval($betterAnalyticsOptions['dimension']['author']), $baAuthor);
}
if (!empty($betterAnalyticsOptions['dimension']['tag']) && $baTags) {
    $jsonOptions['d']['t'] = array(intval($betterAnalyticsOptions['dimension']['tag']), implode(',', $baTags));
}
if (!empty($betterAnalyticsOptions['dimension']['year']) && $baYear) {
    $jsonOptions['d']['y'] = array(intval($betterAnalyticsOptions['dimension']['year']), $baYear);
}
if (!empty($betterAnalyticsOptions['dimension']['role']) && $baRole) {
    $jsonOptions['d']['r'] = array(intval($betterAnalyticsOptions['dimension']['role']), $baRole);
}
if (!empty($betterAnalyticsOptions['dimension']['user']) && @$currentUser->ID > 0) {
    $jsonOptions['d']['u'] = array(intval($betterAnalyticsOptions['dimension']['user']), intval($currentUser->ID));
}
if (DigitalPointBetterAnalytics_Base_Public::getInstance()->experimentId !== null) {
    $jsonOptions['e'] = array('i' => DigitalPointBetterAnalytics_Base_Public::getInstance()->experimentId, 'v' => DigitalPointBetterAnalytics_Base_Public::getInstance()->experimentVariation);
}
echo "<meta id='ba_s' data-o=\"" . htmlentities(json_encode($jsonOptions)) . "\" />";
Example #8
0
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: better-analytics
Domain Path: /languages
*/
if (!function_exists('add_action')) {
    echo 'What the what?';
    exit;
}
define('BETTER_ANALYTICS_VERSION', '1.0.9');
define('BETTER_ANALYTICS_MINIMUM_WP_VERSION', '3.8');
// Dashicons: https://codex.wordpress.org/Function_Reference/add_menu_page
define('BETTER_ANALYTICS_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics.3354/item');
define('BETTER_ANALYTICS_PRO_PRODUCT_URL', 'https://marketplace.digitalpoint.com/better-analytics-pro.3355/item');
define('BETTER_ANALYTICS_SUPPORT_URL', 'https://forums.digitalpoint.com/forums/better-analytics.31/');
define('BETTER_ANALYTICS_PLUGIN_URL', plugin_dir_url(__FILE__));
define('BETTER_ANALYTICS_PLUGIN_DIR', plugin_dir_path(__FILE__));
load_plugin_textdomain('better-analytics', false, dirname(plugin_basename(__FILE__)) . '/languages');
require_once BETTER_ANALYTICS_PLUGIN_DIR . '/library/DigitalPointBetterAnalytics/Base/Public.php';
$publicClass = 'DigitalPointBetterAnalytics_Base_Public';
spl_autoload_register(array($publicClass, 'autoload'));
// Need to add before activation hooks
add_filter('cron_schedules', array($publicClass, 'filter_cron_schedules'));
register_activation_hook(__FILE__, array($publicClass, 'plugin_activation'));
register_deactivation_hook(__FILE__, array($publicClass, 'plugin_deactivation'));
register_uninstall_hook(__FILE__, array('DigitalPointBetterAnalytics_Install', 'uninstall'));
DigitalPointBetterAnalytics_Base_Public::getInstance();
add_action('widgets_init', array('DigitalPointBetterAnalytics_Widget_PopularPosts', 'register_widget'));
add_action('widgets_init', array('DigitalPointBetterAnalytics_Widget_Stats', 'register_widget'));
if (is_admin()) {
    DigitalPointBetterAnalytics_Base_Admin::getInstance();
}
Example #9
0
 protected function _assertLinkedAccount()
 {
     $betterAnalyticsOptions = get_option('better_analytics');
     if (!DigitalPointBetterAnalytics_Base_Public::getInstance()->getTokens() || !@$betterAnalyticsOptions['api']['profile']) {
         $this->_responseException(sprintf('%1$s <a href="%2$s">%3$s</a>', __('No Linked Google Analytics Account.', 'better-analytics'), menu_page_url('better-analytics', false) . '#top#api', __('You can link one in the Better Analytics API settings.', 'better-analytics')));
         return false;
     }
     return true;
 }
Example #10
0
 function widget($args, $instance)
 {
     if (!empty($instance['private'])) {
         if (!DigitalPointBetterAnalytics_Base_Public::getInstance()->canViewReports()) {
             return;
         }
     }
     $stats = get_transient('ba_stats_' . md5(@$instance['metric'] . '-' . @$instance['days'] . '-' . (@$instance['this_page_only'] ? $_SERVER['REQUEST_URI'] : '')));
     if (@$stats === false && !empty($instance['this_page_only'])) {
         $cacheKey = DigitalPointBetterAnalytics_Model_Widget::getStatsWidgetStart($instance);
         $stats = DigitalPointBetterAnalytics_Model_Widget::getStatsWidgetEnd($instance, $cacheKey);
     }
     if (!empty($stats)) {
         $metricTitle = DigitalPointBetterAnalytics_Model_Reporting::getMetricNameByKey($instance['metric']);
         echo $args['before_widget'];
         if (!empty($instance['title'])) {
             echo $args['before_title'];
             echo esc_html($instance['title']);
             echo $args['after_title'];
         }
         printf($instance['format'], $metricTitle, number_format_i18n($stats));
         echo $args['after_widget'];
     }
 }