示例#1
0
 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()));
 }