Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeezyT <timo@ezdesign.de>2012-10-03 12:18:12 +0400
committerBeezyT <timo@ezdesign.de>2012-10-03 12:18:12 +0400
commit57aae75cfc426935fa4d764d2f35a205f2555024 (patch)
tree91028fb5b71e389e8015ea4fb7ce0c443249c439 /plugins/Transitions
parent8b5fcf742c01889511f41d248f49fa0a7c76d161 (diff)
refs #3332 Transitions
* support for page titles * language strings for error messages are loaded if not present * some core extensions git-svn-id: http://dev.piwik.org/svn/trunk@7091 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'plugins/Transitions')
-rw-r--r--plugins/Transitions/API.php105
-rw-r--r--plugins/Transitions/Controller.php17
-rw-r--r--plugins/Transitions/Transitions.php142
-rw-r--r--plugins/Transitions/templates/transitions.js149
-rw-r--r--plugins/Transitions/templates/transitions.tpl4
5 files changed, 317 insertions, 100 deletions
diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php
index 0eae1e8b80..bb855bdb4c 100644
--- a/plugins/Transitions/API.php
+++ b/plugins/Transitions/API.php
@@ -27,18 +27,40 @@ class Piwik_Transitions_API
return self::$instance;
}
+ public function getTransitionsForPageTitle($pageTitle, $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false)
+ {
+ return $this->getTransitionsForAction($pageTitle, 'title', $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false);
+ }
+
+ public function getTransitionsForPageUrl($pageUrl, $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false)
+ {
+ return $this->getTransitionsForAction($pageUrl, 'url', $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false);
+ }
+
/**
- * This method returns a complete report.
- * It is used in the Transitions API to load all data at once.
+ * General method to get transitions for an action
+ *
+ * @param $actionName
+ * @param $actionType "url"|"title"
+ * @param $idSite
+ * @param $period
+ * @param $date
+ * @param bool $segment
+ * @param bool $limitBeforeGrouping
+ * @return array
+ * @throws Exception
*/
- public function getFullReport($pageUrl, $idSite, $period, $date, $segment = false, $limitBeforeGrouping = false)
+ public function getTransitionsForAction($actionName, $actionType,
+ $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');
+ // get idaction of the requested action
+ $idaction = $this->deriveIdAction($actionName, $actionType);
+ if ($idaction < 0)
+ {
+ throw new Exception('NoDataForAction');
+ }
// prepare archive processing that can be used by the archiving code
$archiveProcessing = new Piwik_ArchiveProcessing_Day();
@@ -54,9 +76,9 @@ class Piwik_Transitions_API
// 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);
+ $this->addInternalReferrers($transitionsArchiving, $archiveProcessing, $report, $idaction, $actionType, $limitBeforeGrouping);
+ $this->addFollowingActions($transitionsArchiving, $archiveProcessing, $report, $idaction, $actionType, $limitBeforeGrouping);
+ $this->addExternalReferrers($transitionsArchiving, $archiveProcessing, $report, $idaction, $actionType, $limitBeforeGrouping);
// derive the number of exits from the other metrics
$report['pageMetrics']['exits'] = $report['pageMetrics']['pageviews']
@@ -81,25 +103,60 @@ class Piwik_Transitions_API
}
/**
+ * Derive the action ID from the request action name and type.
+ */
+ private function deriveIdAction($actionName, $actionType)
+ {
+ $actionsPlugin = new Piwik_Actions;
+
+ switch ($actionType)
+ {
+ case 'url':
+ $actionName = Piwik_Common::unsanitizeInputValue($actionName);
+ return $actionsPlugin->getIdActionFromSegment($actionName, 'idaction_url');
+
+ case 'title':
+ $id = $actionsPlugin->getIdActionFromSegment($actionName, 'idaction_name');
+
+ if ($id < 0)
+ {
+ $unkown = Piwik_Actions_ArchivingHelper::getUnknownActionName(
+ Piwik_Tracker_Action::TYPE_ACTION_NAME);
+
+ if (trim($actionName) == trim($unkown))
+ {
+ $id = $actionsPlugin->getIdActionFromSegment('', 'idaction_name');
+ }
+ }
+
+ return $id;
+
+ default:
+ throw new Exception('Unknown action type');
+ }
+ }
+
+ /**
* Add the internal referrers to the report:
* previous pages
*
- * @param $transitionsArchiving Piwik_Transitions
+ * @param Piwik_Transitions $transitionsArchiving
* @param $archiveProcessing
* @param $report
* @param $idaction
+ * @param string $actionType
* @param $limitBeforeGrouping
* @throws Exception
*/
private function addInternalReferrers($transitionsArchiving, $archiveProcessing, &$report,
- $idaction, $limitBeforeGrouping) {
+ $idaction, $actionType, $limitBeforeGrouping) {
$data = $transitionsArchiving->queryInternalReferrers(
- $idaction, $archiveProcessing, $limitBeforeGrouping);
+ $idaction, $actionType, $archiveProcessing, $limitBeforeGrouping);
if ($data['pageviews'] == 0)
{
- throw new Exception('NoDataForUrl');
+ throw new Exception('NoDataForAction');
}
$report['previousPages'] = &$data['previousPages'];
@@ -111,17 +168,18 @@ class Piwik_Transitions_API
* Add the following actions to the report:
* following pages, downloads, outlinks
*
- * @param $transitionsArchiving Piwik_Transitions
+ * @param Piwik_Transitions $transitionsArchiving
* @param $archiveProcessing
* @param $report
* @param $idaction
+ * @param string $actionType
* @param $limitBeforeGrouping
*/
private function addFollowingActions($transitionsArchiving, $archiveProcessing, &$report,
- $idaction, $limitBeforeGrouping) {
+ $idaction, $actionType, $limitBeforeGrouping) {
$data = $transitionsArchiving->queryFollowingActions(
- $idaction, $archiveProcessing, $limitBeforeGrouping);
+ $idaction, $actionType, $archiveProcessing, $limitBeforeGrouping);
foreach ($data as $tableName => $table)
{
@@ -133,18 +191,18 @@ class Piwik_Transitions_API
* Add the external referrers to the report:
* direct entries, websites, campaigns, search engines
*
- * @param $transitionsArchiving
+ * @param Piwik_Transitions $transitionsArchiving
* @param $archiveProcessing
* @param $report
* @param $idaction
+ * @param string $actionType
* @param $limitBeforeGrouping
*/
private function addExternalReferrers($transitionsArchiving, $archiveProcessing, &$report,
- $idaction, $limitBeforeGrouping) {
+ $idaction, $actionType, $limitBeforeGrouping) {
- /** @var $transitionsArchiving Piwik_Transitions */
$data = $transitionsArchiving->queryExternalReferrers(
- $idaction, $archiveProcessing, $limitBeforeGrouping);
+ $idaction, $actionType, $archiveProcessing, $limitBeforeGrouping);
$report['pageMetrics']['entries'] = 0;
$report['referrers'] = array();
@@ -206,4 +264,9 @@ class Piwik_Transitions_API
}
}
+ public function getTranslations() {
+ $controller = new Piwik_Transitions_Controller();
+ return $controller->getTranslations();
+ }
+
} \ No newline at end of file
diff --git a/plugins/Transitions/Controller.php b/plugins/Transitions/Controller.php
index f30b019db1..1a6977447e 100644
--- a/plugins/Transitions/Controller.php
+++ b/plugins/Transitions/Controller.php
@@ -53,9 +53,9 @@ class Piwik_Transitions_Controller extends Piwik_Controller
private static $jsTranslations = array(
'XOfY' => 'Transitions_XOutOfYVisits',
'XOfAllPageviews' => 'Transitions_XOfAllPageviews',
- 'NoDataForUrl' => 'Transitions_NoDataForUrl',
- 'NoDataForUrlDetails' => 'Transitions_NoDataForUrlDetails',
- 'NoDataForUrlBack' => 'Transitions_ErrorBack',
+ 'NoDataForAction' => 'Transitions_NoDataForAction',
+ 'NoDataForActionDetails' => 'Transitions_NoDataForActionDetails',
+ 'NoDataForActionBack' => 'Transitions_ErrorBack',
'ShareOfAllPageviews' => 'Transitions_ShareOfAllPageviews',
'DateRange' => 'General_DateRange'
);
@@ -72,8 +72,17 @@ class Piwik_Transitions_Controller extends Piwik_Controller
public function renderPopover()
{
$view = Piwik_View::factory('transitions');
- $view->translations = self::$metricTranslations + self::$jsTranslations;
+ $view->translations = $this->getTranslations();
echo $view->render();
}
+ public function getTranslations()
+ {
+ $translations = self::$metricTranslations + self::$jsTranslations;
+ foreach ($translations as &$message) {
+ $message = Piwik_Translate($message);
+ }
+ return $translations;
+ }
+
}
diff --git a/plugins/Transitions/Transitions.php b/plugins/Transitions/Transitions.php
index 8e1ceec496..f51fbd0139 100644
--- a/plugins/Transitions/Transitions.php
+++ b/plugins/Transitions/Transitions.php
@@ -53,10 +53,12 @@ class Piwik_Transitions extends Piwik_Plugin
* Get information about external referrers (i.e. search engines, websites & campaigns)
*
* @param $idaction
+ * @param $actionType
* @param Piwik_ArchiveProcessing_Day $archiveProcessing
+ * @param $limitBeforeGrouping
* @return Piwik_DataTable
*/
- public function queryExternalReferrers($idaction, Piwik_ArchiveProcessing_Day $archiveProcessing,
+ public function queryExternalReferrers($idaction, $actionType, $archiveProcessing,
$limitBeforeGrouping = false)
{
$rankingQuery = new Piwik_RankingQuery($limitBeforeGrouping ? $limitBeforeGrouping : $this->limitBeforeGrouping);
@@ -87,7 +89,9 @@ class Piwik_Transitions extends Piwik_Plugin
));
$orderBy = '`'.Piwik_Archive::INDEX_NB_VISITS.'` DESC';
- $where = 'visit_entry_idaction_url = '.intval($idaction);
+
+ $type = $this->getColumnTypeSuffix($actionType);
+ $where = 'visit_entry_idaction_'.$type.' = '.intval($idaction);
$metrics = array(Piwik_Archive::INDEX_NB_VISITS);
$data = $archiveProcessing->queryVisitsByDimension($dimension, $where, $metrics, $orderBy,
@@ -130,26 +134,36 @@ class Piwik_Transitions extends Piwik_Plugin
* Get information about internal referrers (previous pages & loops, i.e. page refreshes)
*
* @param $idaction
+ * @param $actionType
* @param Piwik_ArchiveProcessing_Day $archiveProcessing
+ * @param $limitBeforeGrouping
* @return array(previousPages:Piwik_DataTable, loops:integer)
*/
- public function queryInternalReferrers($idaction, Piwik_ArchiveProcessing_Day $archiveProcessing,
+ public function queryInternalReferrers($idaction, $actionType, $archiveProcessing,
$limitBeforeGrouping = false)
{
- $dimension = 'idaction_url_ref';
-
$rankingQuery = new Piwik_RankingQuery($limitBeforeGrouping ? $limitBeforeGrouping : $this->limitBeforeGrouping);
$rankingQuery->addLabelColumn(array('name', 'url_prefix'));
$rankingQuery->setColumnToMarkExcludedRows('is_self');
- $rankingQuery->partitionResultIntoMultipleGroups('is_page', array(0, 1));
+ $rankingQuery->partitionResultIntoMultipleGroups('only_show_this', array(0, 1));
+
+ $type = $this->getColumnTypeSuffix($actionType);
+ $onlyShowType = Piwik_Tracker_Action::TYPE_ACTION_URL;
+ $dimension = 'idaction_url_ref';
+ $isTitle = $actionType == 'title';
+ if ($isTitle)
+ {
+ $onlyShowType = Piwik_Tracker_Action::TYPE_ACTION_NAME;
+ $dimension = 'idaction_name_ref';
+ }
$addSelect = '
log_action.name, log_action.url_prefix,
- CASE WHEN log_link_visit_action.idaction_url_ref = '.intval($idaction).' THEN 1 ELSE 0 END AS is_self,
- CASE WHEN log_action.type = '.Piwik_Tracker_Action::TYPE_ACTION_URL.' THEN 1 ELSE 0 END AS is_page';
+ CASE WHEN log_link_visit_action.idaction_'.$type.'_ref = '.intval($idaction).' THEN 1 ELSE 0 END AS is_self,
+ CASE WHEN log_action.type = '.$onlyShowType.' THEN 1 ELSE 0 END AS only_show_this';
$where = '
- log_link_visit_action.idaction_url = '.intval($idaction);
+ log_link_visit_action.idaction_'.$type.' = '.intval($idaction);
$orderBy = '`'.Piwik_Archive::INDEX_NB_ACTIONS.'` DESC';
@@ -157,15 +171,17 @@ class Piwik_Transitions extends Piwik_Plugin
$data = $archiveProcessing->queryActionsByDimension(array($dimension), $where, $metrics, $orderBy,
$rankingQuery, $dimension, $addSelect);
+ $loops = 0;
$nbPageviews = 0;
$previousPagesDataTable = new Piwik_DataTable;
- if (isset($data['result'][1])) {
+ if (isset($data['result'][1]))
+ {
foreach ($data['result'][1] as &$page)
{
$nbActions = intval($page[Piwik_Archive::INDEX_NB_ACTIONS]);
$previousPagesDataTable->addRow(new Piwik_DataTable_Row(array(
Piwik_DataTable_Row::COLUMNS => array(
- 'label' => Piwik_Tracker_Action::reconstructNormalizedUrl($page['name'], $page['url_prefix']),
+ 'label' => $this->getPageLabel($page, $isTitle),
Piwik_Archive::INDEX_NB_ACTIONS => $nbActions
)
)));
@@ -173,17 +189,17 @@ class Piwik_Transitions extends Piwik_Plugin
}
}
- if (isset($data['result'][0])) {
+ if (isset($data['result'][0]))
+ {
foreach ($data['result'][0] as &$referrer)
{
$nbPageviews += intval($referrer[Piwik_Archive::INDEX_NB_ACTIONS]);
}
}
- $loops = 0;
if (count($data['excludedFromLimit']))
{
- $loops = intval($data['excludedFromLimit'][0][Piwik_Archive::INDEX_NB_ACTIONS]);
+ $loops += intval($data['excludedFromLimit'][0][Piwik_Archive::INDEX_NB_ACTIONS]);
$nbPageviews += $loops;
}
@@ -194,39 +210,96 @@ class Piwik_Transitions extends Piwik_Plugin
);
}
+ private function getPageLabel(&$pageRecord, $isTitle) {
+ if ($isTitle)
+ {
+ $label = $pageRecord['name'];
+ if (empty($label))
+ {
+ $label = Piwik_Actions_ArchivingHelper::getUnknownActionName(
+ Piwik_Tracker_Action::TYPE_ACTION_NAME);
+ }
+ }
+ else
+ {
+ $label = Piwik_Tracker_Action::reconstructNormalizedUrl(
+ $pageRecord['name'], $pageRecord['url_prefix']);
+ }
+ return $label;
+ }
+
/**
* Get information about the following actions (following pages, outlinks, downloads)
*
* @param $idaction
+ * @param $actionType
* @param Piwik_ArchiveProcessing_Day $archiveProcessing
+ * @param $limitBeforeGrouping
* @return array(followingPages:Piwik_DataTable, outlinks:Piwik_DataTable, downloads:Piwik_DataTable)
*/
- public function queryFollowingActions($idaction, Piwik_ArchiveProcessing_Day $archiveProcessing,
+ public function queryFollowingActions($idaction, $actionType, Piwik_ArchiveProcessing_Day $archiveProcessing,
$limitBeforeGrouping = false)
- {
- static $types = array(
- Piwik_Tracker_Action::TYPE_ACTION_URL => 'followingPages',
- Piwik_Tracker_Action::TYPE_OUTLINK => 'outlinks',
- Piwik_Tracker_Action::TYPE_DOWNLOAD => 'downloads'
- );
+ {
+ $types = array();
+
+ $isTitle = ($actionType == 'title');
+ if (!$isTitle) {
+ // specific setup for page urls
+ $types[Piwik_Tracker_Action::TYPE_ACTION_URL] = 'followingPages';
+ $dimension = array('idaction_url');
+ $joinLogActionColumn = 'idaction_url';
+ $addSelect = 'log_action.name, log_action.url_prefix, log_action.type';
+ } else {
+ // specific setup for page titles:
+ $types[Piwik_Tracker_Action::TYPE_ACTION_NAME] = 'followingPages';
+ // join log_action on name and url and pick depending on url type
+ // the table joined on url is log_action1
+ $joinLogActionColumn = array('idaction_url', 'idaction_name');
+ $dimension = '
+ CASE log_action1.type
+ WHEN 1 THEN log_action2.idaction
+ ELSE log_action1.idaction
+ END
+ ';
+ $addSelect = '
+ CASE log_action1.type
+ WHEN 1 THEN log_action2.name
+ ELSE log_action1.name
+ END AS name,
+ CASE log_action1.type
+ WHEN 1 THEN log_action2.type
+ ELSE log_action1.type
+ END AS type,
+ NULL AS url_prefix
+ ';
+ }
+
+ // these types are available for both titles and urls
+ $types[Piwik_Tracker_Action::TYPE_OUTLINK] = 'outlinks';
+ $types[Piwik_Tracker_Action::TYPE_DOWNLOAD] = 'downloads';
- $dimension = 'idaction_url';
$rankingQuery = new Piwik_RankingQuery($limitBeforeGrouping ? $limitBeforeGrouping : $this->limitBeforeGrouping);
$rankingQuery->addLabelColumn(array('name', 'url_prefix'));
$rankingQuery->partitionResultIntoMultipleGroups('type', array_keys($types));
- $addSelect = 'log_action.name, log_action.url_prefix, log_action.type';
-
- $where = '
- log_link_visit_action.idaction_url_ref = '.intval($idaction).' AND
- log_link_visit_action.idaction_url != '.intval($idaction);
+ $type = $this->getColumnTypeSuffix($actionType);
+ $where = 'log_link_visit_action.idaction_'.$type.'_ref = '.intval($idaction).' AND ';
+ if ($isTitle)
+ {
+ $where .= '(log_link_visit_action.idaction_'.$type.' IS NULL OR '
+ . 'log_link_visit_action.idaction_'.$type.' != '.intval($idaction).')';
+ }
+ else
+ {
+ $where .= 'log_link_visit_action.idaction_'.$type.' != '.intval($idaction);
+ }
$orderBy = '`'.Piwik_Archive::INDEX_NB_ACTIONS.'` DESC';
$metrics = array(Piwik_Archive::INDEX_NB_ACTIONS);
- $data = $archiveProcessing->queryActionsByDimension(array($dimension), $where, $metrics, $orderBy,
- $rankingQuery, $dimension, $addSelect);
+ $data = $archiveProcessing->queryActionsByDimension($dimension, $where, $metrics, $orderBy,
+ $rankingQuery, $joinLogActionColumn, $addSelect);
$this->totalTransitionsToFollowingActions = 0;
$dataTables = array();
@@ -240,9 +313,7 @@ class Piwik_Transitions extends Piwik_Plugin
$actions = intval($record[Piwik_Archive::INDEX_NB_ACTIONS]);
$dataTable->addRow(new Piwik_DataTable_Row(array(
Piwik_DataTable_Row::COLUMNS => array(
- 'label' => $type == Piwik_Tracker_Action::TYPE_ACTION_URL ?
- Piwik_Tracker_Action::reconstructNormalizedUrl($record['name'], $record['url_prefix']) :
- $record['name'],
+ 'label' => $this->getPageLabel($record, $isTitle),
Piwik_Archive::INDEX_NB_ACTIONS => $actions
)
)));
@@ -263,4 +334,11 @@ class Piwik_Transitions extends Piwik_Plugin
return $this->totalTransitionsToFollowingActions;
}
+ private function getColumnTypeSuffix($actionType) {
+ if ($actionType == 'title') {
+ return 'name';
+ }
+ return 'url';
+ }
+
} \ No newline at end of file
diff --git a/plugins/Transitions/templates/transitions.js b/plugins/Transitions/templates/transitions.js
index 3e29ddf347..11dc60bc5d 100644
--- a/plugins/Transitions/templates/transitions.js
+++ b/plugins/Transitions/templates/transitions.js
@@ -17,18 +17,48 @@ function DataTable_RowActions_Transitions(dataTable) {
DataTable_RowActions_Transitions.prototype = new DataTable_RowAction;
-// override trigger method directly because we don't need the label
+DataTable_RowActions_Transitions.isPageUrlReport = function(module, action) {
+ return module == 'Actions' &&
+ (action == 'getPageUrls' || action == 'getEntryPageUrls' || action == 'getExitPageUrls');
+};
+
+DataTable_RowActions_Transitions.isPageTitleReport = function(module, action) {
+ return module == 'Actions' && action == 'getPageTitles';
+}
+
DataTable_RowActions_Transitions.prototype.trigger = function(tr, e, subTableLabel) {
var link = tr.find('> td:first > a').attr('href');
link = $('<textarea>').html(link).val(); // remove html entities
- this.openPopover(link);
+
+ var module = this.dataTable.param.module;
+ var action = this.dataTable.param.action;
+ if (DataTable_RowActions_Transitions.isPageUrlReport(module, action)) {
+ this.openPopover('url:' + link);
+ } else if (DataTable_RowActions_Transitions.isPageTitleReport(module, action)) {
+ DataTable_RowAction.prototype.trigger.apply(this, [tr, e, subTableLabel]);
+ } else {
+ alert('Transitions can\'t be used on this report.');
+ }
+};
+
+DataTable_RowAction.prototype.performAction = function(label, tr, e) {
+ this.openPopover('title:' + label);
};
DataTable_RowActions_Transitions.prototype.doOpenPopover = function(link) {
+ var parts = link.split(':');
+ if (parts.length < 2) {
+ return;
+ }
+
+ var actionType = parts[0];
+ parts.shift();
+ var actionName = parts.join(':');
+
if (this.transitions === null) {
- this.transitions = new Piwik_Transitions(link, this);
+ this.transitions = new Piwik_Transitions(actionType, actionName, this);
} else {
- this.transitions.reset(link);
+ this.transitions.reset(actionType, actionName);
}
this.transitions.showPopover();
};
@@ -50,10 +80,12 @@ DataTable_RowActions_Registry.register({
},
isAvailable: function(dataTableParams, tr) {
- return dataTableParams.module == 'Actions'
- && (dataTableParams.action == 'getPageUrls' || dataTableParams.action == 'getEntryPageUrls'
- || dataTableParams.action == 'getExitPageUrls')
- && tr.find('> td:first > a').size() > 0;
+ return (
+ DataTable_RowActions_Transitions.isPageUrlReport(dataTableParams.module, dataTableParams.action)
+ && tr.find('> td:first > a').size() > 0 // only available on pages, not folders
+ ) || (
+ DataTable_RowActions_Transitions.isPageTitleReport(dataTableParams.module, dataTableParams.action)
+ );
}
});
@@ -63,8 +95,8 @@ DataTable_RowActions_Registry.register({
// TRANSITIONS IMPLEMENTATION
//
-function Piwik_Transitions(link, rowAction) {
- this.reset(link);
+function Piwik_Transitions(actionType, actionName, rowAction) {
+ this.reset(actionType, actionName);
this.rowAction = rowAction;
this.ajax = new Piwik_Transitions_Ajax();
@@ -74,8 +106,10 @@ function Piwik_Transitions(link, rowAction) {
this.rightGroups = ['followingPages', 'downloads', 'outlinks'];
}
-Piwik_Transitions.prototype.reset = function(link) {
- this.link = link;
+Piwik_Transitions.prototype.reset = function(actionType, actionName) {
+ this.actionType = actionType;
+ this.actionName = actionName;
+
this.popover = null;
this.canvas = null;
this.centerBox = null;
@@ -92,7 +126,7 @@ Piwik_Transitions.prototype.reset = function(link) {
Piwik_Transitions.prototype.showPopover = function() {
var self = this;
- this.popover = Piwik_Popover.showLoading('Transitions', self.link, 550);
+ this.popover = Piwik_Popover.showLoading('Transitions', self.actionName, 550);
var bothLoaded = function() {
self.preparePopover();
@@ -119,7 +153,7 @@ Piwik_Transitions.prototype.showPopover = function() {
}
// load the data
- self.model.loadData(self.link, function() {
+ self.model.loadData(self.actionType, self.actionName, function() {
if (typeof Piwik_Transitions.popoverHtml == 'undefined') {
// html not there yet
callbackForHtml = bothLoaded;
@@ -141,12 +175,17 @@ Piwik_Transitions.prototype.preparePopover = function() {
self.centerBox = self.popover.find('#Transitions_CenterBox');
- var link = Piwik_Transitions_Util.shortenUrl(self.link, true);
- var title = self.centerBox.find('h2').html(Piwik_Transitions_Util.addBreakpoints(link));
+ var title = self.actionName;
+ if (self.actionType == 'url') {
+ title = Piwik_Transitions_Util.shortenUrl(title, true);
+ }
+ title = self.centerBox.find('h2').html(Piwik_Transitions_Util.addBreakpoints(title));
- title.click(function() {
- self.openExternalUrl(self.link);
- }).css('cursor', 'pointer');
+ if (self.actionType == 'url') {
+ title.click(function() {
+ self.openExternalUrl(self.actionName);
+ }).css('cursor', 'pointer');
+ }
title.add(self.popover.find('p.Transitions_Pageviews')).hover(function() {
var totalNbPageviews = self.model.getTotalNbPageviews();
@@ -510,7 +549,7 @@ Piwik_Transitions.prototype.renderClosedGroup = function(groupName, side, onlyBg
/** Reload the entire popover for a different URL */
Piwik_Transitions.prototype.reloadPopover = function(url) {
- this.rowAction.openPopover(url);
+ this.rowAction.openPopover(this.actionType + ':' + url);
};
/** Redraw the left or right sides with a different group opened */
@@ -1043,7 +1082,7 @@ Piwik_Transitions_Model.prototype.htmlLoaded = function() {
};
};
-Piwik_Transitions_Model.prototype.loadData = function(link, callback) {
+Piwik_Transitions_Model.prototype.loadData = function(actionType, actionName, callback) {
var self = this;
this.pageviews = 0;
@@ -1074,9 +1113,10 @@ Piwik_Transitions_Model.prototype.loadData = function(link, callback) {
this.outlinks = [];
this.date = '';
-
- this.ajax.callApi('Transitions.getFullReport', {
- pageUrl: link,
+
+ this.ajax.callApi('Transitions.getTransitionsForAction', {
+ actionType: actionType,
+ actionName: actionName,
expanded: 1
},
function(report) {
@@ -1233,29 +1273,48 @@ Piwik_Transitions_Ajax.prototype.callApi = function(method, params, callback) {
params.segment = segment;
}
+ var self = this;
piwikHelper.queueAjaxRequest($.post('index.php', params, function(result) {
if (typeof result.result != 'undefined' && result.result == 'error') {
var errorName = result.message;
- var errorTitle = Piwik_Transitions_Translations[errorName];
- var errorMessage = Piwik_Transitions_Translations[errorName + 'Details'];
- var errorBack = Piwik_Transitions_Translations[errorName + 'Back'];
- if (typeof errorTitle == 'undefined') {
- alert(result.message);
- return;
- }
+ var showError = function() {
+ var errorTitle, errorMessage, errorBack;
+ if (typeof Piwik_Transitions_Translations[errorName] == 'undefined') {
+ errorTitle = 'Exception';
+ errorMessage = errorName;
+ errorBack = '<<<';
+ } else {
+ errorTitle = Piwik_Transitions_Translations[errorName];
+ errorMessage = Piwik_Transitions_Translations[errorName + 'Details'];
+ errorBack = Piwik_Transitions_Translations[errorName + 'Back'];
+ }
+
+ if (typeof params.actionName != 'undefined') {
+ var url = params.actionName;
+ url = Piwik_Transitions_Util.addBreakpoints(url, '|||');
+ url = $(document.createElement('p')).text(url).html();
+ url = url.replace(/\|\|\|/g, '<wbr />');
+ errorTitle = errorTitle.replace(/%s/, '<span>' + url + '</span>');
+ }
+
+ errorMessage = errorMessage.replace(/%s/g, '<br />');
+ Piwik_Popover.showError(errorTitle, errorMessage, errorBack);
+ };
- if (typeof params.pageUrl != 'undefined') {
- var url = params.pageUrl;
- url = Piwik_Transitions_Util.addBreakpoints(url, '|||');
- url = $(document.createElement('p')).text(url).html();
- url = url.replace(/\|\|\|/g, '<wbr />');
- errorTitle = errorTitle.replace(/%s/, '<span>' + url + '</span>');
+ if (typeof Piwik_Transitions_Translations == 'undefined') {
+ self.callApi('Transitions.getTranslations', {}, function(response) {
+ if (typeof response[0] == 'object') {
+ Piwik_Transitions_Translations = response[0];
+ } else {
+ Piwik_Transitions_Translations = {};
+ }
+ showError();
+ });
+ } else {
+ showError();
}
- errorMessage = errorMessage.replace(/%s/g, '<br />');
-
- Piwik_Popover.showError(errorTitle, errorMessage, errorBack);
} else {
callback(result);
}
@@ -1278,15 +1337,23 @@ Piwik_Transitions_Util = {
if (url == 'Others') {
return url;
}
+
+ var urlBackup = url;
url = url.replace(/http(s)?:\/\/(www\.)?/, '');
+
+ if (urlBackup == url) {
+ return url;
+ }
+
if (removeDomain) {
- var urlBackup = url;
url = url.replace(/[^\/]*/, '');
if (url == '/') {
url = urlBackup;
}
}
+
url = url.replace(/\/$/, '');
+
return url;
},
diff --git a/plugins/Transitions/templates/transitions.tpl b/plugins/Transitions/templates/transitions.tpl
index 119028ae9e..3a1661aebb 100644
--- a/plugins/Transitions/templates/transitions.tpl
+++ b/plugins/Transitions/templates/transitions.tpl
@@ -32,8 +32,8 @@
<script type="text/javascript">
var Piwik_Transitions_Translations = {literal}{{/literal}
- {foreach from=$translations key=internalKey item=translationKey}
- "{$internalKey}": "{$translationKey|translate}",
+ {foreach from=$translations key=internalKey item=translation}
+ "{$internalKey}": "{$translation|escape:'html'}",
{/foreach}
"": ""
{literal}}{/literal};