/** * Renders the tracked events list. * * @param XenForo_View $view View object * @param string $fieldPrefix Prefix for the HTML form field name * @param array $preparedOption Prepared option info * @param boolean $canEdit True if an "edit" link should appear * * @return XenForo_Template_Abstract Template object */ public static function renderOption(XenForo_View $view, $fieldPrefix, array $preparedOption, $canEdit) { $preparedOption['extraChoices'] = array(); $selectable = DigitalPointBetterAnalytics_Helper_Api::check(); $preparedOption['formatParams'] = array(array('name' => 'options[dpAnalyticsEvents][user_engagement]', 'label' => new XenForo_Phrase('user_engagement'), 'selected' => @$preparedOption['option_value']['user_engagement']), array('name' => 'options[dpAnalyticsEvents][content]', 'label' => new XenForo_Phrase('content_being_created'), 'selected' => @$preparedOption['option_value']['content']), array('name' => 'options[dpAnalyticsEvents][emails]', 'label' => new XenForo_Phrase('emails_sent_opened'), 'selected' => @$preparedOption['option_value']['emails'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][attachment]', 'label' => new XenForo_Phrase('attachment_views'), 'selected' => @$preparedOption['option_value']['attachment'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][links]', 'label' => new XenForo_Phrase('clicks_on_external_links'), 'selected' => @$preparedOption['option_value']['links'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][registration]', 'label' => new XenForo_Phrase('user_registrations'), 'selected' => @$preparedOption['option_value']['registration'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][moderator]', 'label' => new XenForo_Phrase('moderator_actions'), 'selected' => @$preparedOption['option_value']['moderator'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][report]', 'label' => new XenForo_Phrase('reports'), 'selected' => @$preparedOption['option_value']['report'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][warning]', 'label' => new XenForo_Phrase('warnings'), 'selected' => @$preparedOption['option_value']['warning'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][ajax_requests]', 'label' => new XenForo_Phrase('ajax_requests'), 'selected' => @$preparedOption['option_value']['ajax_requests']), array('name' => 'options[dpAnalyticsEvents][ajax_error]', 'label' => new XenForo_Phrase('js_errors'), 'selected' => @$preparedOption['option_value']['ajax_error'], 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsEvents][js_error]', 'label' => new XenForo_Phrase('ajax_errors'), 'selected' => @$preparedOption['option_value']['js_error'], 'unselectable' => !$selectable)); $preparedOption['explain'] = !$selectable ? '<style> .unselectable{opacity:0.5} </style>' . new XenForo_Phrase('some_options_not_available_for_unlicensed') : ''; return XenForo_ViewAdmin_Helper_Option::renderOptionTemplateInternal('option_list_option_checkbox', $view, $fieldPrefix, $preparedOption, $canEdit); }
/** * Renders the radio buttons for the track users with blocking enabled. * * @param XenForo_View $view View object * @param string $fieldPrefix Prefix for the HTML form field name * @param array $preparedOption Prepared option info * @param boolean $canEdit True if an "edit" link should appear * * @return XenForo_Template_Abstract Template object */ public static function renderOption(XenForo_View $view, $fieldPrefix, array $preparedOption, $canEdit) { $preparedOption['extraChoices'] = array(); $selectable = DigitalPointBetterAnalytics_Helper_Api::check(); $preparedOption['formatParams'] = array(array('name' => 'options[dpAnalyticsTrackBlocked]', 'value' => 'never', 'label' => new XenForo_Phrase('never'), 'selected' => $preparedOption['option_value'] == 'never', 'unselectable' => false), array('name' => 'options[dpAnalyticsTrackBlocked]', 'value' => 'logged_in', 'label' => new XenForo_Phrase('only_users_logged_in'), 'selected' => $preparedOption['option_value'] == 'logged_in', 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsTrackBlocked]', 'value' => 'guests', 'label' => new XenForo_Phrase('guests'), 'selected' => $preparedOption['option_value'] == 'guests', 'unselectable' => !$selectable), array('name' => 'options[dpAnalyticsTrackBlocked]', 'value' => 'everyone', 'label' => new XenForo_Phrase('everyone'), 'selected' => $preparedOption['option_value'] == 'everyone', 'unselectable' => !$selectable)); $preparedOption['explain'] = (!$selectable ? '<style> .unselectable{opacity:0.5} </style>' . new XenForo_Phrase('some_options_not_available_for_unlicensed') . '<br /><br />' : '') . $preparedOption['explain']; return XenForo_ViewAdmin_Helper_Option::renderOptionTemplateInternal('option_list_option_radio', $view, $fieldPrefix, $preparedOption, $canEdit); }
public function actionAnalytics() { if (!$this->_canViewAnalyticsTab()) { return $this->responseNoPermission(); } $userId = $this->_input->filterSingle('user_id', XenForo_Input::UINT); $userFetchOptions = array('join' => XenForo_Model_User::FETCH_LAST_ACTIVITY | XenForo_Model_User::FETCH_USER_PERMISSIONS); $user = $this->getHelper('UserProfile')->assertUserProfileValidAndViewable($userId, $userFetchOptions); $analyticsModel = $this->_getAnalyticsModel(); $duplicates = $analyticsModel->findUsersSharingComputer(@$user['customFields']['analytics_cid'], $userId); $reportData = array(); $options = XenForo_Application::getOptions(); if ($options->dpAnalyticsCredentials['client_id'] && $options->dpAnalyticsCredentials['client_secret'] && $options->dpAnalyticsTokens) { if (DigitalPointBetterAnalytics_Helper_Api::check() || $user['user_id'] <= 100) { $reportData = $analyticsModel->getMemberReportData($userId); } else { $reportData = false; } } return $this->responseView('DigitalPointBetterAnalytics_ViewPublic_Member_Analytics', 'member_analytics', array('user' => $user, 'users_sharing' => $duplicates, 'report_data' => $reportData, 'canViewRevenue' => $this->_canViewAnalyticsRevenue(), 'userBlocksAnalytics' => substr(@$user['customFields']['analytics_cid'], 0, 3) == 'DP.')); }
<?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) {
/** * 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'), '<strong>', '</strong>', '<br />', BETTER_ANALYTICS_VERSION, BETTER_ANALYTICS_MINIMUM_WP_VERSION, '<a href="' . esc_url('https://codex.wordpress.org/Upgrading_WordPress') . '" target="_blank">', '</a>'); 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); }
public function actionTestSetup() { $checks['hasCache'] = XenForo_Application::getCache() ? true : false; if (DigitalPointBetterAnalytics_Helper_Reporting::checkAccessToken(false)) { $checks['profiles'] = DigitalPointBetterAnalytics_Helper_Reporting::getProfiles(); $checks['matchingProfile'] = DigitalPointBetterAnalytics_Helper_Reporting::getProfileByPropertyId(XenForo_Application::getOptions()->googleAnalyticsWebPropertyId); $checks['siteSearchSetup'] = @$checks['matchingProfile']['siteSearchQueryParameters'] == 'q'; $checks['ecommerceTracking'] = @$checks['matchingProfile']['eCommerceTracking']; $checks['enhancedEcommerceTracking'] = @$checks['matchingProfile']['enhancedECommerceTracking']; $property = DigitalPointBetterAnalytics_Helper_Reporting::getPropertyByPropertyId(@$checks['matchingProfile']['accountId'], XenForo_Application::getOptions()->googleAnalyticsWebPropertyId); $checks['level'] = @$property['level']; $checks['industryVertical'] = @$property['industryVertical']; $checks['dimensions'] = DigitalPointBetterAnalytics_Helper_Reporting::getDimensionsByPropertyId(@$checks['matchingProfile']['accountId'], XenForo_Application::getOptions()->googleAnalyticsWebPropertyId, array('User', 'Forum')); } $checks['licensed'] = DigitalPointBetterAnalytics_Helper_Api::check(true); $checks['user_dimension_set'] = XenForo_Application::getOptions()->dpBetterAnalyticsDimensionIndexUser > 0 && @$checks['dimensions']['User']['index'] == XenForo_Application::getOptions()->dpBetterAnalyticsDimensionIndexUser; $checks['forum_dimension_set'] = XenForo_Application::getOptions()->dpBetterAnalyticsDimentionIndex > 0 && @$checks['dimensions']['Forum']['index'] == XenForo_Application::getOptions()->dpBetterAnalyticsDimentionIndex; $checks['hasCurl'] = function_exists('curl_multi_init'); return $this->responseView('DigitalPointBetterAnalytics_ViewAdmin_Tools_CheckAnalytics', 'tools_test_analytics', array('checks' => $checks)); }
public function actionAreacharts() { if (!$this->_assertLinkedAccount()) { return; } if ($_SERVER['REQUEST_METHOD'] == 'POST') { // sanitize $_POST['dimension'] = preg_replace('#[^a-z0-9]#i', '', @$_POST['dimension']); $_POST['scope'] = preg_replace('#[^a-z0-9]#i', '', @$_POST['scope']); $_POST['time_frame'] = absint(@$_POST['time_frame']); $_POST['minimum'] = absint(@$_POST['minimum']); $_POST['chart_type'] = preg_replace('#[^a-z]#i', '', @$_POST['chart_type']); if (!$_POST['chart_type']) { $_POST['chart_type'] = false; } if (empty($_POST['page_path'])) { $_POST['page_path'] = false; } if (!$_POST['time_frame']) { wp_send_json(array('error' => __('Invalid number of days.', 'better-analytics'))); } elseif (!$_POST['dimension']) { wp_send_json(array('error' => __('Invalid dimension.', 'better-analytics'))); } elseif (!DigitalPointBetterAnalytics_Helper_Api::check()) { if (array_search($_POST['dimension'], array('browser', 'operatingSystem', 'source', 'medium')) === false) { wp_send_json(array('error' => sprintf(__('Not all dimensions are available for unlicensed copies of the Better Analytics plugin.%1$s%2$sYou can license a copy over here.%3$s%1$sIf this is a valid license, make sure the purchaser of the add-on has verified ownership of this domain %4$sover here%3$s.', 'better-analytics'), '<br /><br />', '<a href="' . esc_url(BETTER_ANALYTICS_PRO_PRODUCT_URL . '#utm_source=admin_reports_ajax&utm_medium=wordpress&utm_campaign=plugin') . '" target="_blank">', '</a>', '<a href="' . esc_url('https://forums.digitalpoint.com/marketplace/domain-verification#utm_source=admin_reports_ajax&utm_medium=wordpress&utm_campaign=plugin') . '" target="_blank">'))); } } $dateStart = date("Y-m-d", max(1104580800, time() - 86400 * ($_POST['time_frame'] + 1))); $dateEnd = date("Y-m-d", time() - 86400); switch ($_POST['scope']) { case 'month': $scope = 'yearMonth'; break; case 'year': $scope = 'year'; break; default: $scope = 'date'; } $originalDimension = $_POST['dimension']; if ($_POST['dimension'] == 'searchNotProvided') { $extraFilter = ';ga:medium==organic;ga:keyword==(not provided)'; $_POST['dimension'] = 'keyword'; } elseif ($_POST['dimension'] == 'oraganicSearchMarketshare') { $extraFilter = ';ga:medium==organic'; $_POST['dimension'] = 'source,ga:medium'; } elseif ($_POST['dimension'] == 'mobileOperatingSystem') { $extraFilter = ';ga:isMobile==Yes'; $_POST['dimension'] = 'operatingSystem'; } else { $extraFilter = ''; } if ($_POST['page_path']) { $extraFilter .= ';ga:pagePath==' . $_POST['page_path']; } $cacheKey = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getData($dateStart, $dateEnd, 'ga:sessions', 'ga:' . $scope . ',ga:' . $_POST['dimension'], 'ga:' . $scope . ',-ga:sessions', 'ga:sessions>' . $_POST['minimum'] . $extraFilter); if ($originalDimension == 'searchNotProvided') { $cacheKey2 = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getData($dateStart, $dateEnd, 'ga:sessions', 'ga:' . $scope, 'ga:' . $scope . ',-ga:sessions', 'ga:sessions>' . $_POST['minimum'] . ';ga:medium==organic'); } $results = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getResults($cacheKey); if ($originalDimension == 'searchNotProvided') { $resultTotal = DigitalPointBetterAnalytics_Helper_Reporting::getInstance()->getResults($cacheKey2); $totalNotProvided = $consolidated = array(); if (!empty($results['rows'])) { foreach ($results['rows'] as $row) { if ($row[1] == '(not provided)') { $totalNotProvided[$row[0]] = $row[2]; } } foreach ($resultTotal['rows'] as $row) { $consolidated[] = array_merge(array($row[0]), array(__('Keywords Provided', 'better-analytics'), $row[1] - @$totalNotProvided[$row[0]])); $consolidated[] = array_merge(array($row[0]), array(__('Keywords Not Provided', 'better-analytics'), @$totalNotProvided[$row[0]] + 0)); } $results['rows'] = $consolidated; } } elseif ($originalDimension == 'oraganicSearchMarketshare') { if (!empty($results['rows'])) { foreach ($results['rows'] as &$row) { $row[2] = $row[3]; $row[1] = strlen($row[1]) > 3 ? ucwords($row[1]) : strtoupper($row[1]); unset($row[3]); } } } $resultsOrdered = $resultsOutput = $allLabels = array(); if (!empty($results['rows'])) { foreach ($results['rows'] as $row) { $allLabels[$row[1]] = null; $resultsOrdered[$row[0]][$row[1]] = intval($row[2]); } ksort($allLabels, SORT_STRING); foreach ($resultsOrdered as &$labels) { $labels = array_merge($labels, array_diff_key($allLabels, $labels)); ksort($labels, SORT_STRING); } $resultsOutput = array(array_merge(array('Date'), array_keys($allLabels))); foreach ($resultsOutput[0] as &$item) { $item = (string) $item; } foreach ($resultsOrdered as $date => $values) { $resultsOutput[] = array_merge(array($date), array_values($values)); } $title = ''; $dimensions = DigitalPointBetterAnalytics_Model_Reporting::getDimensions(); foreach ($dimensions as $group) { foreach ($group as $key => $value) { if ($originalDimension == $key) { $title = $value; break; } } } wp_send_json(array('chart_data' => $resultsOutput, 'chart_type' => $_POST['chart_type'], 'title' => sprintf('%1$s %2$s', __('History for', 'better-analytics'), esc_html__($title)))); } wp_send_json(array('error' => __('No data for the criteria given', 'better-analytics'))); } $this->_view('reports/area_charts', array('dimensions' => DigitalPointBetterAnalytics_Model_Reporting::getDimensions())); }
$hasAccounts = true; $dimensions = array('Categories', 'Author', 'Tags', 'Year', 'Role', 'User'); $reportingClass = DigitalPointBetterAnalytics_Helper_Reporting::getInstance(); if ($reportingClass->checkAccessToken(false)) { $hasTokens = true; $checks['profiles'] = $reportingClass->getProfiles(); $checks['matchingProfile'] = $reportingClass->getProfileByProfileId($betterAnalyticsOptions['api']['profile']); $checks['siteSearchSetup'] = @$checks['matchingProfile']['siteSearchQueryParameters'] == 's'; $checks['ecommerceTracking'] = @$checks['matchingProfile']['eCommerceTracking']; $checks['enhancedEcommerceTracking'] = @$checks['matchingProfile']['enhancedECommerceTracking']; $property = $reportingClass->getPropertyByPropertyId(@$checks['matchingProfile']['accountId'], $betterAnalyticsOptions['property_id']); $checks['level'] = @$property['level']; $checks['industryVertical'] = @$property['industryVertical']; $checks['dimensions'] = $reportingClass->getDimensionsByPropertyId(@$checks['matchingProfile']['accountId'], $betterAnalyticsOptions['property_id'], $dimensions); } $checks['licensed'] = DigitalPointBetterAnalytics_Helper_Api::check(true); if (@$_REQUEST['action'] == 'config') { if (!$hasTokens) { esc_html_e('You need to first link a Google Analytics account to auto-configure it.', 'better-analytics'); } elseif (empty($_REQUEST['vertical'])) { wp_enqueue_script('chosen_js', BETTER_ANALYTICS_PLUGIN_URL . 'assets/chosen/chosen.jquery.min.js', array(), BETTER_ANALYTICS_VERSION); wp_enqueue_style('chosen_css', BETTER_ANALYTICS_PLUGIN_URL . 'assets/chosen/chosen.min.css', array(), BETTER_ANALYTICS_VERSION); wp_enqueue_script('better-analytics_admin_js', BETTER_ANALYTICS_PLUGIN_URL . 'assets/digitalpoint/js/admin.js', array(), BETTER_ANALYTICS_VERSION); $verticals = $reportingClass->getIndustryVerticals(); if (!$checks['matchingProfile']) { if ($accounts = $reportingClass->getAccounts()) { $accounts = DigitalPointBetterAnalytics_Model_Reporting::parseAccounts($accounts, true); } if (!$accounts) { $hasAccounts = false; }