public static final function getInstance() { if (!self::$_instance) { $class = __CLASS__; self::$_instance = new $class(); self::$_instance->_initHooks(); } return self::$_instance; }
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 }
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; } } }
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); }
protected function _deleteTokens() { if (!$this->_overrideTokens) { DigitalPointBetterAnalytics_Base_Public::getInstance()->deleteTokens(); } }
<?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 ' ' . esc_html__('by', 'better-analytics') . ' '; echo '<select data-placeholder="Pick chart" id="ba_dimension" class="chosen-select"' . ($betterAnalyticsDashboardPick['realtime'] ? ' disabled="disabled"' : '') . '>'; foreach ($dimensions as $key => $name) {
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)) . "\" />";
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(); }
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; }
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']; } }