_initHooks();
}
return self::$_instance;
}
public static function autoload($class)
{
$filename = self::_autoloaderClassToFile($class);
if (!$filename)
{
return false;
}
$proLocation = substr_replace(BETTER_ANALYTICS_PLUGIN_DIR, '-pro', -1);
$allowed = false;
if (file_exists($proLocation . $filename))
{
$betterAnalyticsInternal = get_transient('ba_int');
if (@$betterAnalyticsInternal['v'] || strpos(@$_SERVER['SCRIPT_NAME'], '/plugins.php') !== false || strpos(@$_SERVER['SCRIPT_NAME'], '/tools.php') !== false || $class == 'DigitalPointBetterAnalytics_Helper_Api')
{
$allowed = true;
}
}
if($allowed)
{
include($proLocation . $filename);
return (class_exists($class, false) || interface_exists($class, false));
}
$ecommerceLocation = substr_replace(BETTER_ANALYTICS_PLUGIN_DIR, '-ecommerce', -1);
if (file_exists($ecommerceLocation . $filename))
{
include($ecommerceLocation . $filename);
return (class_exists($class, false) || interface_exists($class, false));
}
elseif (file_exists(BETTER_ANALYTICS_PLUGIN_DIR . $filename))
{
include(BETTER_ANALYTICS_PLUGIN_DIR . $filename);
return (class_exists($class, false) || interface_exists($class, false));
}
}
protected static function _autoloaderClassToFile($class)
{
if (preg_match('#[^a-zA-Z0-9_\\\\]#', $class))
{
return false;
}
return '/library/' . str_replace(array('_', '\\'), '/', $class) . '.php';
}
/**
* Initializes WordPress hooks
*/
protected function _initHooks()
{
add_action('wp_loaded', array($this, 'track_blocked' ));
add_action('wp_head', array($this, 'insert_code_header' ), 9);
add_action('wp_footer', array($this, 'insert_code_footer' ));
add_action('admin_bar_menu', array($this, 'admin_bar_menu'), 100);
add_action('user_register', array($this, 'user_register' ));
add_action('wp_insert_comment', array($this, 'insert_comment'), 10, 2);
add_filter('wp_mail', array($this, 'filter_mail' ), 100);
add_filter('the_permalink_rss', array($this, 'filter_rss_links' ));
add_filter('the_content_feed', array($this, 'filter_rss_content' ));
add_action('better_analytics_cron_minutely', array('DigitalPointBetterAnalytics_CronEntry_Jobs', 'minute' ));
add_action('better_analytics_cron_hourly', array('DigitalPointBetterAnalytics_CronEntry_Jobs', 'hour' ));
add_filter('amp_post_template_analytics', array('DigitalPointBetterAnalytics_Base_Pro', 'add_amp_analytics' ));
if (!is_admin())
{
ob_start();
add_action('wp_head', array($this, 'experiment_override_css' ));
add_action('the_post', array($this, 'experiment_override_post_title'));
add_filter('option_stylesheet', array($this, 'experiment_override_theme'));
add_filter('option_template', array($this, 'experiment_override_theme'));
}
}
public function canViewReports()
{
$currentUser = wp_get_current_user();
$betterAnalyticsOptions = get_option('better_analytics');
if (array_intersect((array)$currentUser->roles, (array)@$betterAnalyticsOptions['roles_view_reports']))
{
return true;
}
else
{
if (@$betterAnalyticsOptions['author_view_reports'] && is_single() && $post = get_post())
{
if ($post->post_author == $currentUser->ID)
{
return true;
}
}
elseif(@$betterAnalyticsOptions['author_view_reports'] && !empty($_REQUEST['page_path']))
{
if ($postId = absint(url_to_postid($_REQUEST['page_path'])))
{
if ($post = get_post($postId))
{
if ($post->post_author == $currentUser->ID)
{
return true;
}
}
}
}
return false;
}
}
/**
* Do something on activation?
* @static
*/
public static function plugin_activation()
{
if (version_compare($GLOBALS['wp_version'], BETTER_ANALYTICS_MINIMUM_WP_VERSION, '<' ))
{
$message = sprintf(esc_html__('%1$sBetter Analytics %4$s requires WordPress %5$s or higher.%2$s%3$sPlease %6$supgrade WordPress%7$s to a current version.', 'better-analytics'),
'',
'',
'
',
BETTER_ANALYTICS_VERSION,
BETTER_ANALYTICS_MINIMUM_WP_VERSION,
'',
''
);
self::_bailOnActivation($message);
}
wp_schedule_event(time(), 'minutely', 'better_analytics_cron_minutely');
wp_schedule_event(time(), 'hourly', 'better_analytics_cron_hourly');
if (!get_option('better_analytics'))
{
$_defaultOptions = array(
'property_id' => '',
'track_userid' => 1,
'events' => array(
'user_registration' => 1,
'create_comment' => 1,
'youtube' => 1,
'email' => 1,
'link_click' => 1,
'downloads' => 1,
'missing_images' => 1,
'error_404' => 1,
'ajax_request' => 1,
'error_js' => 1,
'error_ajax' => 1,
'error_console' => 1,
'error_youtube' => 1
),
'demographic_tracking' => 1,
'force_ssl' => 1,
'source_link' => array(
'rss' => 1,
'email' => 1
),
'roles_view_reports' => array('administrator'),
'file_extensions' => array(
'avi', 'dmg', 'doc', 'exe', 'gz', 'mpg', 'mp3', 'pdf', 'ppt', 'psd', 'rar', 'wmv', 'xls', 'zip'
),
'track_blocked' => 'never',
'javascript' => array(
'location' => 'header',
'run_time' => 'ready'
),
'campaign_tracking' => 'anchor',
'sample_rate' => 100,
'engagement_time' => 15
);
update_option('better_analytics', $_defaultOptions);
}
DigitalPointBetterAnalytics_Helper_Api::check(true);
}
/**
* Do something on deactivation?
* @static
*/
public static function plugin_deactivation()
{
wp_clear_scheduled_hook('better_analytics_cron_minutely');
wp_clear_scheduled_hook('better_analytics_cron_hourly');
}
private static function _bailOnActivation($message, $deactivate = true)
{
?>