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())); }