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:
authormattpiwik <matthieu.aubry@gmail.com>2011-05-31 12:09:01 +0400
committermattpiwik <matthieu.aubry@gmail.com>2011-05-31 12:09:01 +0400
commitf35885f7cccb73a1a6069ccee1b69e6cfd1c2349 (patch)
tree3b6b62bf4327e46e8e7b38e498d01616bbb072ca /plugins
parentdea3812ebf5bb76d9559029060e6fe8b36e2b236 (diff)
Refs #898
* Cleaning up All Websites controller code * Removing display of "Unique visitors" metrics/column * Adding new column "Revenue" (Ecommerce & Goals) in All websites dashboard git-svn-id: http://dev.piwik.org/svn/trunk@4846 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'plugins')
-rw-r--r--plugins/MultiSites/Controller.php178
-rw-r--r--plugins/MultiSites/templates/common.js36
-rw-r--r--plugins/MultiSites/templates/index.tpl14
-rw-r--r--plugins/MultiSites/templates/row.tpl11
-rw-r--r--plugins/VisitsSummary/API.php3
5 files changed, 132 insertions, 110 deletions
diff --git a/plugins/MultiSites/Controller.php b/plugins/MultiSites/Controller.php
index c0b8f0e4e6..5579b640c9 100644
--- a/plugins/MultiSites/Controller.php
+++ b/plugins/MultiSites/Controller.php
@@ -59,58 +59,53 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
$mySites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess();
$ids = 'all';
-
- $visits = Piwik_VisitsSummary_API::getInstance()->getVisits($ids, $period, $date);
- $actions = Piwik_VisitsSummary_API::getInstance()->getActions($ids, $period, $date);
- $uniqueUsers = Piwik_VisitsSummary_API::getInstance()->getUniqueVisitors($ids, $period, $date);
+ // Current date - select metrics
+ $dataTableArray = Piwik_VisitsSummary_API::getInstance()->get($ids, $period, $date, $segment = false, $columns = array('nb_visits', 'nb_actions'));
+ $currentVisits = $this->getArrayFromAPI($dataTableArray, 'nb_visits');
+ $currentActions = $this->getArrayFromAPI($dataTableArray, 'nb_actions');
+ $dataTableArray = Piwik_Goals_API::getInstance()->get($ids, $period, $date, $segment = false, $idGoal = false, $columns = array('revenue'));
+ $currentRevenue = $this->getArrayFromAPI($dataTableArray, 'revenue');
+ // Previous date
+ $lastVisits = $lastActions = $lastRevenue = array();
if($period != 'range')
{
$lastDate = Piwik_Period_Range::removePeriod($period, Piwik_Date::factory($date), $n = 1 );
-
- $lastVisits = Piwik_VisitsSummary_API::getInstance()->getVisits($ids, $period, $lastDate);
- $lastActions = Piwik_VisitsSummary_API::getInstance()->getActions($ids, $period, $lastDate);
- $lastUniqueUsers = Piwik_VisitsSummary_API::getInstance()->getUniqueVisitors($ids, $period, $lastDate);
- $visitsSummary = $this->getSummary($lastVisits, $visits, $mySites, "visits");
- $actionsSummary = $this->getSummary($lastActions, $actions, $mySites, "actions");
- $uniqueSummary = $this->getSummary($lastUniqueUsers, $uniqueUsers, $mySites, "unique");
- $lastVisitsArray = $lastVisits->getArray();
- $lastActionsArray = $lastActions->getArray();
- $lastUniqueUsersArray = $lastUniqueUsers->getArray();
+ $dataTableArray = Piwik_VisitsSummary_API::getInstance()->get($ids, $period, $lastDate, $segment = false, $columns = array('nb_visits', 'nb_actions'));
+ $lastVisits = $this->getArrayFromAPI($dataTableArray, 'nb_visits');
+ $lastActions = $this->getArrayFromAPI($dataTableArray, 'nb_actions');
+ $dataTableArray = Piwik_Goals_API::getInstance()->get($ids, $period, $lastDate, $segment = false, $idGoal = false, $columns = array('revenue'));
+ $lastRevenue = $this->getArrayFromAPI($dataTableArray, 'revenue');
}
-
- $visitsArray = $visits->getArray();
- $actionsArray = $actions->getArray();
- $uniqueUsersArray = $uniqueUsers->getArray();
- $totalVisits = $totalActions = 0;
+ $visitsSummary = $this->getChangeCurrentVsLast($currentVisits, $lastVisits);
+ $actionsSummary = $this->getChangeCurrentVsLast($currentActions, $lastActions);
+ $revenueSummary = $this->getChangeCurrentVsLast($currentRevenue, $lastRevenue);
+
+ $totalVisits = $totalActions = $totalRevenue = 0;
+
foreach($mySites as &$site)
{
$idSite = $site['idsite'];
- $tmp = $visitsArray[$idSite]->getColumn(0);
- $site['visits'] = $tmp[0];
- $totalVisits += $tmp[0];
- $tmp = $actionsArray[$idSite]->getColumn(0);
- $site['actions'] = $tmp[0];
- $totalActions += $tmp[0];
- $tmp = $uniqueUsersArray[$idSite]->getColumn(0);
- $site['unique'] = $tmp[0];
-
+ $site['visits'] = $currentVisits[$idSite];
+ $site['actions'] = $currentActions[$idSite];
+ $site['revenue'] = $currentRevenue[$idSite];
+ $totalVisits += $site['visits'];
+ $totalActions += $site['actions'];
+ $totalRevenue += $site['revenue'];
if($period != 'range')
{
- $tmp = $lastVisitsArray[$idSite]->getColumn(0);
- $site['lastVisits'] = $tmp[0];
- $tmp = $lastActionsArray[$idSite]->getColumn(0);
- $site['lastActions'] = $tmp[0];
- $tmp = $lastUniqueUsersArray[$idSite]->getColumn(0);
- $site['lastUnique'] = $tmp[0];
+ $site['lastVisits'] = $lastVisits[$idSite];
+ $site['lastActions'] = $lastActions[$idSite];
+ $site['lastRevenue'] = $lastRevenue[$idSite];
}
- $site['visitsSummaryValue'] = isset($visitsSummary[$idSite]) ? $visitsSummary[$idSite] : 0;
- $site['actionsSummaryValue'] = isset($actionsSummary[$idSite]) ? $actionsSummary[$idSite] : 0;
- $site['uniqueSummaryValue'] = isset($uniqueSummary[$idSite]) ? $uniqueSummary[$idSite] : 0;
+ $site['visitsSummaryValue'] = $visitsSummary[$idSite];
+ $site['actionsSummaryValue'] = $actionsSummary[$idSite];
+ $site['revenueSummaryValue'] = $revenueSummary[$idSite];
}
+ $mySites = $this->applyPrettyMoney($mySites);
$view = new Piwik_View("MultiSites/templates/index.tpl");
$view->mySites = $mySites;
@@ -122,6 +117,7 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
$view->orderBy = $this->orderBy;
$view->order = $this->order;
$view->totalVisits = $totalVisits;
+ $view->totalRevenue = $totalRevenue;
$view->totalActions = $totalActions;
$params = $this->getGraphParamsModified();
@@ -143,7 +139,71 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
echo $view->render();
}
+
+ protected function applyPrettyMoney($sites)
+ {
+ foreach($sites as &$site)
+ {
+ $revenue = "-";
+ if(!empty($site['revenue']))
+ {
+ $revenue = Piwik::getPrettyMoney($site['revenue'], $site['idsite'], $htmlAllowed = false);
+ }
+ $site['revenue'] = '"'. $revenue . '"';
+ }
+ return $sites;
+ }
+
+ protected function getChangeCurrentVsLast($current, $last)
+ {
+ $evolution = array();
+ foreach($current as $idSite => $value)
+ {
+ $evolution[$idSite] = $this->getEvolutionPercentage($value, isset($last[$idSite]) ? $last[$idSite] : 0);
+ }
+ return $evolution;
+ }
+
+ private function getEvolutionPercentage($current, $last)
+ {
+ if($current == 0 && $last == 0)
+ {
+ $evolution = 0;
+ }
+ elseif($last == 0)
+ {
+ $evolution = 100;
+ }
+ else
+ {
+ $evolution = (($current - $last) / $last) * 100;
+ }
+
+ $output = round($evolution,2);
+
+ return $output;
+ }
+ protected function getArrayFromAPI($dataTableArray, $column)
+ {
+ $values = array();
+ foreach($dataTableArray->getArray() as $id => $row)
+ {
+ $firstRow = $row->getFirstRow();
+ $value = 0;
+ if($firstRow)
+ {
+ $value = $firstRow->getColumn($column);
+ }
+ if($column == 'revenue')
+ {
+ $value = round($value);
+ }
+ $values[$id] = $value;
+ }
+ return $values;
+ }
+
/**
* The Multisites reports displays the first calendar date as the earliest day available for all websites.
* Also, today is the later "today" available across all timezones.
@@ -178,50 +238,18 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
$this->setMaxDateView($maxDate, $view);
}
- private function getSummary($lastVisits, $currentVisits, $mySites, $type)
- {
- $currentVisitsArray = $currentVisits->getArray();
- $lastVisitsArray = $lastVisits->getArray();
- $summaryArray = array();
- foreach($mySites as $site)
- {
- $idSite = $site['idsite'];
- $tmp = $currentVisitsArray[$idSite]->getColumn(0);
- $current = $tmp[0];
- $tmp = $lastVisitsArray[$idSite]->getColumn(0);
- $last = $tmp[0];
- $summaryArray[$idSite] = $this->fillSummary($current, $last);
- }
- return $summaryArray;
- }
-
- private function fillSummary($current, $last)
- {
- if($current == 0 && $last == 0)
- {
- $summary = 0;
- }
- elseif($last == 0)
- {
- $summary = 100;
- }
- else
- {
- $summary = (($current - $last) / $last) * 100;
- }
-
- $output = round($summary,2);
-
- return $output;
- }
-
public function getEvolutionGraph( $fetch = false, $columns = false)
{
- $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, "VisitsSummary.get");
if(empty($columns))
{
$columns = Piwik_Common::getRequestVar('columns');
}
+ $api = "VisitsSummary.get";
+ if($columns == 'revenue')
+ {
+ $api = "Goals.get";
+ }
+ $view = $this->getLastUnitGraph($this->pluginName, __FUNCTION__, $api);
$columns = !is_array($columns) ? array($columns) : $columns;
$view->setColumnsToDisplay($columns);
return $this->renderView($view, $fetch);
diff --git a/plugins/MultiSites/templates/common.js b/plugins/MultiSites/templates/common.js
index 48b9cc66ab..16c3607213 100644
--- a/plugins/MultiSites/templates/common.js
+++ b/plugins/MultiSites/templates/common.js
@@ -5,17 +5,17 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-function setRowData (idsite, visits, actions, unique, name, url, visitsSummaryValue, actionsSummaryValue, uniqueSummaryValue)
+function setRowData (idsite, visits, actions, revenue, name, url, visitsSummaryValue, actionsSummaryValue, revenueSummaryValue)
{
this.idsite = idsite;
this.visits = visits;
- this.unique = unique;
+ this.revenue = revenue;
this.name = name;
this.url = url;
this.actions = actions;
this.visitsSummaryValue = parseFloat(visitsSummaryValue);
this.actionsSummaryValue = parseFloat(actionsSummaryValue);
- this.uniqueSummaryValue = parseFloat(uniqueSummaryValue);
+ this.revenueSummaryValue = parseFloat(revenueSummaryValue);
}
function setOrderBy(self, allSites, params, mOrderBy)
@@ -91,22 +91,23 @@ function orderBy(allSites, params)
return (a['actions'] < b['actions']) ? -1 : 1;
});
}
- else if(params['mOrderBy'] == 'unique')
+ else if(params['mOrderBy'] == 'revenue')
{
allSites.sort(function (a,b) {
- if (a['unique'] == b['unique']) {
+ if (a['revenue'].replace(/[^0-9\.]+/g,"") == b['revenue'].replace(/[^0-9\.]+/g,"")) {
return 0;
}
- return (a['unique'] < b['unique']) ? -1 : 1;
+ return (parseFloat(a['revenue'].replace(/[^0-9\.]+/g,""))
+ < parseFloat(b['revenue'].replace(/[^0-9\.]+/g,""))) ? -1 : 1;
});
}
- else if(params['mOrderBy'] == 'uniqueSummary')
+ else if(params['mOrderBy'] == 'revenueSummary')
{
allSites.sort(function (a,b) {
- if (a['uniqueSummaryValue'] == b['uniqueSummaryValue']) {
+ if (a['revenueSummaryValue'] == b['revenueSummaryValue']) {
return 0;
}
- return (a['uniqueSummaryValue'] - b['uniqueSummaryValue'] <= 0.01) ? -1 : 1;
+ return (a['revenueSummaryValue'] - b['revenueSummaryValue'] <= 0.01) ? -1 : 1;
});
}
else if(params['mOrderBy'] == 'actionsSummary')
@@ -145,7 +146,7 @@ function limitBy(allSites, params)
function switchEvolution(params)
{
$('.actions').hide();
- $('.unique').hide();
+ $('.revenue').hide();
$('.visits').hide();
$('.' + params['evolutionBy']).show();
sitesVisible = params['sitesVisible'];
@@ -160,7 +161,7 @@ function displayRows(allSites, params)
for(var i = 0; i < allSites.length; i++)
{
var str = params['row'];
- str = str.replace(/%uniqueSummary%/g, getImageForSummary(allSites[i].uniqueSummaryValue));
+ str = str.replace(/%revenueSummary%/g, getImageForSummary(allSites[i].revenueSummaryValue));
str = str.replace(/%actionsSummary%/g, getImageForSummary(allSites[i].actionsSummaryValue));
str = str.replace(/%visitsSummary%/g, getImageForSummary(allSites[i].visitsSummaryValue));
str = str.replace(/%sparkline%/g, getSparklineImg(allSites[i].idsite, params['evolutionBy'], params));
@@ -168,7 +169,7 @@ function displayRows(allSites, params)
str = str.replace(/%idsite%/g, allSites[i].idsite);
str = str.replace(/%visits%/g, allSites[i].visits);
str = str.replace(/%name%/g, allSites[i].name);
- str = str.replace(/%unique%/g, allSites[i].unique);
+ str = str.replace(/%revenue%/g, allSites[i].revenue);
str = str.replace(/%main_url%/g, allSites[i].url);
str = str.replace(/%date%/g, params['date']);
str = str.replace(/%period%/g, params['period']);
@@ -178,7 +179,7 @@ function displayRows(allSites, params)
$(".table_row").show();
$('.actions').hide();
- $('.unique').hide();
+ $('.revenue').hide();
$('.visits').hide();
$('#main_indicator').hide();
$('.' + params['evolutionBy']).show();
@@ -187,15 +188,12 @@ function displayRows(allSites, params)
function getSparklineImg(id, column, params)
{
- if(column == 'unique')
- {
- column = 'uniq_visitors';
+ if(column != 'revenue') {
+ column = 'nb_' + column;
}
- return '<img class="sparkline" alt="" src="?module=MultiSites&action=getEvolutionGraph&period=' + params['period'] + '&date=' + params['dateSparkline'] + '&evolutionBy=' + params['evolutionBy'] + '&columns=nb_' + column + '&idSite=' + id + '&idsite=' + id + '&viewDataTable=sparkline" width="100" height="25" />';
+ return '<img class="sparkline" alt="" src="?module=MultiSites&action=getEvolutionGraph&period=' + params['period'] + '&date=' + params['dateSparkline'] + '&evolutionBy=' + params['evolutionBy'] + '&columns=' + column + '&idSite=' + id + '&idsite=' + id + '&viewDataTable=sparkline" width="100" height="25" />';
}
-
-
function showPagination(allSites, params)
{
if ((params['page'] * params['limit']) < allSites.length)
diff --git a/plugins/MultiSites/templates/index.tpl b/plugins/MultiSites/templates/index.tpl
index ce4f1caa3d..97bc5a4e39 100644
--- a/plugins/MultiSites/templates/index.tpl
+++ b/plugins/MultiSites/templates/index.tpl
@@ -8,7 +8,7 @@
var allSites = new Array();
var params = new Array();
{foreach from=$mySites key=i item=site}
- allSites[{$i}] = new setRowData({$site.idsite}, {$site.visits}, {$site.actions}, {$site.unique}, '{$site.name|escape:"javascript"}', '{$site.main_url|escape:"javascript"}', '{$site.visitsSummaryValue|replace:",":"."}', '{$site.actionsSummaryValue|replace:",":"."}', '{$site.uniqueSummaryValue|replace:",":"."}');
+ allSites[{$i}] = new setRowData({$site.idsite}, {$site.visits}, {$site.actions}, {$site.revenue}, '{$site.name|escape:"javascript"}', '{$site.main_url|escape:"javascript"}', '{$site.visitsSummaryValue|replace:",":"."}', '{$site.actionsSummaryValue|replace:",":"."}', '{$site.revenueSummaryValue|replace:",":"."}');
{/foreach}
params['period'] = '{$period}';
params['date'] = '{$dateRequest}';
@@ -34,7 +34,7 @@
<div class="centerLargeDiv">
<h2>{'General_AllWebsitesDashboard'|translate}
- <span class='smallTitle'>{'General_VisitsActions'|translate:"<strong>$totalVisits</strong>":"<strong>$totalActions</strong>"}</span>
+ <span class='smallTitle'>{'General_TotalVisitsActionsRevenue'|translate:"<strong>$totalVisits</strong>":"<strong>$totalActions</strong>":"<strong>$totalRevenue</strong>"}</span>
</h2>
<table id="mt" class="dataTable" cellspacing="0">
@@ -51,19 +51,17 @@
<span>{'General_ColumnPageviews'|translate}</span>
<span class="arrow {if $evolutionBy=='actions'}multisites_{$order}{/if}"></span>
</th>
- {if $displayUniqueVisitors}
- <th id="unique" class="multisites-column" style="width: 120px" onClick="params = setOrderBy(this,allSites, params, 'unique');">
- <span>{'General_ColumnNbUniqVisitors'|translate}</span>
- <span class="arrow {if $evolutionBy=='unique'}multisites_{$order}{/if}"></span>
+ <th id="revenue" class="multisites-column" style="width: 110px" onClick="params = setOrderBy(this,allSites, params, 'revenue');">
+ <span>{'Goals_ColumnRevenue'|translate}</span>
+ <span class="arrow {if $evolutionBy=='revenue'}multisites_{$order}{/if}"></span>
</th>
- {/if}
<th id="evolution" style=" width:350px" colspan="{if $show_sparklines}2{else}1{/if}">
<span class="arrow "></span>
<span class="evolution" style="cursor:pointer;" onClick="params = setOrderBy(this,allSites, params, $('#evolution_selector').val() + 'Summary');"> {'MultiSites_Evolution'|translate}</span>
<select class="selector" id="evolution_selector" onchange="params['evolutionBy'] = $('#evolution_selector').val(); switchEvolution(params);">
<option value="visits" {if $evolutionBy eq 'visits'} selected {/if}>{'General_ColumnNbVisits'|translate}</option>
<option value="actions" {if $evolutionBy eq 'actions'} selected {/if}>{'General_ColumnPageviews'|translate}</option>
- {if $displayUniqueVisitors}<option value="unique"{if $evolutionBy eq 'unique'} selected {/if}>{'General_ColumnNbUniqVisitors'|translate}</option> {/if}
+ <option value="revenue" {if $evolutionBy eq 'revenue'} selected {/if}>{'Goals_ColumnRevenue'|translate}</option>
</select>
</th>
</thead>
diff --git a/plugins/MultiSites/templates/row.tpl b/plugins/MultiSites/templates/row.tpl
index b2d80d4bff..9689051986 100644
--- a/plugins/MultiSites/templates/row.tpl
+++ b/plugins/MultiSites/templates/row.tpl
@@ -9,21 +9,16 @@
%visits%
</td>
<td class="multisites-column">
- %actions%&nbsp;
+ %actions%
</td>
-{if $displayUniqueVisitors}
<td class="multisites-column">
- %unique%&nbsp;
+ %revenue%
</td>
-{/if}
{if $period!='range'}
<td style="width:170px">
<div class="visits" style="display:none">%visitsSummary%</div>
<div class="actions"style="display:none">%actionsSummary%</div>
- {if $displayUniqueVisitors}
- <div class="unique" >%uniqueSummary%</div>
- {/if}
- </td>
+ <div class="revenue"style="display:none">%revenueSummary%</div>
{/if}
{if $show_sparklines}
<td style="width:180px">
diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php
index 8a3adaf82c..0e686c553e 100644
--- a/plugins/VisitsSummary/API.php
+++ b/plugins/VisitsSummary/API.php
@@ -19,6 +19,9 @@
class Piwik_VisitsSummary_API
{
static private $instance = null;
+ /**
+ * @return Piwik_VisitsSummary_API
+ */
static public function getInstance()
{
if (self::$instance == null)