diff options
author | BeezyT <timo@ezdesign.de> | 2012-09-27 17:29:17 +0400 |
---|---|---|
committer | BeezyT <timo@ezdesign.de> | 2012-09-27 17:29:17 +0400 |
commit | f90da5ade2720a3fc568f78e9b498a9e615e0cf8 (patch) | |
tree | 8a8757140dddd7b95c151aab85d35eb8a6423be1 /plugins/Transitions | |
parent | ff371ed0149a4933d42390fcdff16fa929a72f0c (diff) |
refs #3332 Transitions:
* segmentation works now!
* fixing a js bug related to concurrent ajax requests
* refactoring of the api class
* translation update
git-svn-id: http://dev.piwik.org/svn/trunk@7074 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'plugins/Transitions')
-rw-r--r-- | plugins/Transitions/API.php | 108 | ||||
-rw-r--r-- | plugins/Transitions/templates/transitions.js | 17 |
2 files changed, 86 insertions, 39 deletions
diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php index c05ab7e058..0eae1e8b80 100644 --- a/plugins/Transitions/API.php +++ b/plugins/Transitions/API.php @@ -28,21 +28,40 @@ class Piwik_Transitions_API } /** - * This method combines various reports (both from this and from other plugins) and - * returns a complete report. The report is used in the Transitions API to load all - * data at once. + * This method returns a complete report. + * It is used in the Transitions API to load all data at once. */ public function getFullReport($pageUrl, $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false) { Piwik::checkUserHasViewAccess($idSite); + // get idaction of page url + $actionsPlugin = new Piwik_Actions; $pageUrl = Piwik_Common::unsanitizeInputValue($pageUrl); + $idaction = $actionsPlugin->getIdActionFromSegment($pageUrl, 'idaction'); + // prepare archive processing that can be used by the archiving code + $archiveProcessing = new Piwik_ArchiveProcessing_Day(); + $archiveProcessing->setSite(new Piwik_Site($idSite)); + $archiveProcessing->setPeriod(Piwik_Period::advancedFactory($period, $date)); + $archiveProcessing->setSegment(new Piwik_Segment($segment, $idSite)); + $archiveProcessing->initForLiveUsage(); + + // prepare the report $report = array( 'date' => Piwik_Period_Day::advancedFactory($period, $date)->getLocalizedShortString() ); - $this->addLiveTransitionsDataToReport($report, $pageUrl, $idSite, $period, $date, $segment, $limitBeforeGrouping); + // add data to the report + $transitionsArchiving = new Piwik_Transitions; + $this->addInternalReferrers($transitionsArchiving, $archiveProcessing, $report, $idaction, $limitBeforeGrouping); + $this->addFollowingActions($transitionsArchiving, $archiveProcessing, $report, $idaction, $limitBeforeGrouping); + $this->addExternalReferrers($transitionsArchiving, $archiveProcessing, $report, $idaction, $limitBeforeGrouping); + + // derive the number of exits from the other metrics + $report['pageMetrics']['exits'] = $report['pageMetrics']['pageviews'] + - $transitionsArchiving->getTotalTransitionsToFollowingActions() + - $report['pageMetrics']['loops']; // replace column names in the data tables $columnNames = array( @@ -62,42 +81,70 @@ class Piwik_Transitions_API } /** - * Add transitions data to the report. - * Fake ArchiveProcessing to do the queries live. + * Add the internal referrers to the report: + * previous pages + * + * @param $transitionsArchiving Piwik_Transitions + * @param $archiveProcessing + * @param $report + * @param $idaction + * @param $limitBeforeGrouping + * @throws Exception */ - private function addLiveTransitionsDataToReport(&$report, $pageUrl, $idSite, $period, $date, - $segment, $limitBeforeGrouping) - { - // get idaction of page url - $actionsPlugin = new Piwik_Actions; - $idaction = $actionsPlugin->getIdActionFromSegment($pageUrl, 'idaction'); - - // prepare archive processing that can be reused by the archiving code - $archiveProcessing = new Piwik_ArchiveProcessing_Day(); - $archiveProcessing->setSite(new Piwik_Site($idSite)); - $archiveProcessing->setPeriod(Piwik_Period::advancedFactory($period, $date)); - $archiveProcessing->setSegment(new Piwik_Segment($segment, $idSite)); - $archiveProcessing->initForLiveUsage(); - - // launch the archiving code - but live - $transitionsArchiving = new Piwik_Transitions; - - $data = $transitionsArchiving->queryInternalReferrers($idaction, $archiveProcessing, $limitBeforeGrouping); + private function addInternalReferrers($transitionsArchiving, $archiveProcessing, &$report, + $idaction, $limitBeforeGrouping) { - if ($data['pageviews'] == 0) { + $data = $transitionsArchiving->queryInternalReferrers( + $idaction, $archiveProcessing, $limitBeforeGrouping); + + if ($data['pageviews'] == 0) + { throw new Exception('NoDataForUrl'); } $report['previousPages'] = &$data['previousPages']; $report['pageMetrics']['loops'] = $data['loops']; $report['pageMetrics']['pageviews'] = $data['pageviews']; + } + + /** + * Add the following actions to the report: + * following pages, downloads, outlinks + * + * @param $transitionsArchiving Piwik_Transitions + * @param $archiveProcessing + * @param $report + * @param $idaction + * @param $limitBeforeGrouping + */ + private function addFollowingActions($transitionsArchiving, $archiveProcessing, &$report, + $idaction, $limitBeforeGrouping) { - $data = $transitionsArchiving->queryFollowingActions($idaction, $archiveProcessing, $limitBeforeGrouping); - foreach ($data as $tableName => $table) { + $data = $transitionsArchiving->queryFollowingActions( + $idaction, $archiveProcessing, $limitBeforeGrouping); + + foreach ($data as $tableName => $table) + { $report[$tableName] = $table; } + } + + /** + * Add the external referrers to the report: + * direct entries, websites, campaigns, search engines + * + * @param $transitionsArchiving + * @param $archiveProcessing + * @param $report + * @param $idaction + * @param $limitBeforeGrouping + */ + private function addExternalReferrers($transitionsArchiving, $archiveProcessing, &$report, + $idaction, $limitBeforeGrouping) { - $data = $transitionsArchiving->queryExternalReferrers($idaction, $archiveProcessing, $limitBeforeGrouping); + /** @var $transitionsArchiving Piwik_Transitions */ + $data = $transitionsArchiving->queryExternalReferrers( + $idaction, $archiveProcessing, $limitBeforeGrouping); $report['pageMetrics']['entries'] = 0; $report['referrers'] = array(); @@ -130,11 +177,6 @@ class Piwik_Transitions_API } } - // derive the number of exits from the other metrics - $report['pageMetrics']['exits'] = $report['pageMetrics']['pageviews'] - - $transitionsArchiving->getTotalTransitionsToFollowingActions() - - $report['pageMetrics']['loops']; - // if there's no data for referrers, Piwik_API_ResponseBuilder::handleMultiDimensionalArray // does not detect the multi dimensional array and the data is rendered differently, which // causes an exception. diff --git a/plugins/Transitions/templates/transitions.js b/plugins/Transitions/templates/transitions.js index 163b4916e9..3e29ddf347 100644 --- a/plugins/Transitions/templates/transitions.js +++ b/plugins/Transitions/templates/transitions.js @@ -1022,15 +1022,15 @@ Piwik_Transitions_Canvas.prototype.clearSide = function(side, onlyBg) { function Piwik_Transitions_Model(ajax) { this.ajax = ajax; + + this.groupTitles = {}; } Piwik_Transitions_Model.prototype.htmlLoaded = function() { - this.groupTitles = { - previousPages: Piwik_Transitions_Translations.fromPreviousPages, - followingPages: Piwik_Transitions_Translations.toFollowingPages, - outlinks: Piwik_Transitions_Translations.outlinks, - downloads: Piwik_Transitions_Translations.downloads - }; + this.groupTitles.previousPages = Piwik_Transitions_Translations.fromPreviousPages; + this.groupTitles.followingPages = Piwik_Transitions_Translations.toFollowingPages; + this.groupTitles.outlinks = Piwik_Transitions_Translations.outlinks; + this.groupTitles.downloads = Piwik_Transitions_Translations.downloads; this.shareInGroupTexts = { previousPages: Piwik_Transitions_Translations.fromPreviousPagesInline, @@ -1227,6 +1227,11 @@ Piwik_Transitions_Ajax.prototype.callApi = function(method, params, callback) { if (params.period == 'range') { params.date = piwik.startDateString + ',' + params.date; } + + var segment = broadcast.getValueFromHash('segment', window.location.href); + if (segment) { + params.segment = segment; + } piwikHelper.queueAjaxRequest($.post('index.php', params, function(result) { if (typeof result.result != 'undefined' && result.result == 'error') { |