Skip to content

Commit

Permalink
Fixes #3619, add reports by dimension section to Referrers overview.
Browse files Browse the repository at this point in the history
Notes:
  - fix bug in last #3619 commit that broke referrers overview page.
  • Loading branch information
diosmosis committed Feb 7, 2013
1 parent 965f665 commit add95a5
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 58 deletions.
4 changes: 4 additions & 0 deletions lang/en.php
Expand Up @@ -363,6 +363,7 @@
'General_Hide_js' => 'hide',
'General_Donate' => 'Donate',
'General_MoreDetails' => 'More Details',
'General_Source' => 'Source',
'Actions_PluginDescription' => 'Reports about the page views, the outlinks and downloads. Outlinks and Downloads tracking is automatic! You can also track your internal website\'s Search Engine.',
'Actions_Actions' => 'Actions',
'Actions_SubmenuPages' => 'Pages',
Expand Down Expand Up @@ -1158,6 +1159,7 @@
'Referers_PluginDescription' => 'Reports the Referrers data: Search Engines, Keywords, Websites, Campaign Tracking, Direct Entry.',
'Referers_Referrer' => 'Referrer',
'Referers_Referers' => 'Referrers',
'Referers_ReferrersOverview' => 'Referrers Overview',
'Referers_EvolutionDocumentation' => 'This is an overview of the referrers that led visitors to your website.',
'Referers_EvolutionDocumentationMoreInfo' => 'For more information about the different refferrer types, see the documentation of the %s table.',
'Referers_SearchEngines' => 'Search Engines',
Expand Down Expand Up @@ -1210,6 +1212,8 @@
'Referers_WidgetOverview' => 'Overview',
'Referers_SocialFooterMessage' => 'This is a subset of the Websites report to the left. It filters out other websites so you can compare your social network referrers directly.',
'Referers_WidgetGetAll' => 'All Referrers',
'Referers_ViewReferrersBy' => 'View Referrers by %s',
'Referers_ViewAllReferrers' => 'View all Referrers',
'SecurityInfo_PluginDescription' => 'Based on PhpSecInfo from the PHP Security Consortium, this plugin provides security information about your PHP environment and offers suggestions for improvement. It is a tool in a multilayered security approach. It does not replace secure development practices nor audit the code/application.',
'SecurityInfo_Security' => 'Security',
'SecurityInfo_SecurityInformation' => 'PHP Security Information',
Expand Down
3 changes: 1 addition & 2 deletions plugins/Goals/Controller.php
Expand Up @@ -544,8 +544,7 @@ private function getGoalReportsByDimensionTable( $conversions, $ecommerce = fals
if ($conversions > 0)
{
// for non-Goals reports, we show the goals table
$customParams = $ecommerceCustomParams // TODO: not sure if this is necessary. only here to
// replicate logic of old code in table_by_dimension.tpl
$customParams = $ecommerceCustomParams
+ array('viewDataTable' => 'tableGoals', 'documentationForGoalsPage' => '1');

if (Piwik_Common::getRequestVar('idGoal', '') === '') // if no idGoal, use 0 for overview
Expand Down
49 changes: 26 additions & 23 deletions plugins/Referers/API.php
Expand Up @@ -99,7 +99,11 @@ public function getRefererType($idSite, $period, $date, $segment = false, $typeR
}

// set subtable IDs for each row to the label (which holds the int referrer type)
$this->setGetReferrerTypeSubtables($dataTable, $idSite, $period, $date, $segment, $expanded);
// NOTE: not yet possible to do this w/ DataTable_Array instances
if (!($dataTable instanceof Piwik_DataTable_Array))
{
$this->setGetReferrerTypeSubtables($dataTable, $idSite, $period, $date, $segment, $expanded);
}

// set referrer type column to readable value
$dataTable->queueFilter('ColumnCallbackReplace', array('label', 'Piwik_getRefererTypeLabel'));
Expand All @@ -114,6 +118,12 @@ public function getAll( $idSite, $period, $date, $segment = false )
{
$dataTable = $this->getRefererType($idSite, $period, $date, $segment, $typeReferer = false,
$idSubtable = false, $expanded = true);

if ($dataTable instanceof Piwik_DataTable_Array)
{
throw new Exception("Referrers.getAll with multiple sites or dates is not supported (yet).");
}

$dataTable = $dataTable->mergeSubtables($labelColumn = 'referrer_type', $useMetadataColumn = true);

// presentation filters
Expand Down Expand Up @@ -483,33 +493,26 @@ private function removeSubtableIds( $table )
*/
private function setGetReferrerTypeSubtables( $dataTable, $idSite, $period, $date, $segment, $expanded )
{
if ($dataTable instanceof Piwik_DataTable_Array) // recurse for array datatables
foreach ($dataTable->getRows() as $row)
{
throw new Exception("Referrers.getAll with multiple sites or dates is not supported (yet).");
}
else
{
foreach ($dataTable->getRows() as $row)
$typeReferrer = $row->getColumn('label');
if ($typeReferrer != Piwik_Common::REFERER_TYPE_DIRECT_ENTRY)
{
$typeReferrer = $row->getColumn('label');
if ($typeReferrer != Piwik_Common::REFERER_TYPE_DIRECT_ENTRY)
if (!$expanded) // if we don't want the expanded datatable, then don't do any extra queries
{
if (!$expanded) // if we don't want the expanded datatable, then don't do any extra queries
{
$row->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $typeReferrer;
}
else // otherwise, we have to get the othe datatables
$row->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $typeReferrer;
}
else // otherwise, we have to get the othe datatables
{
$subtable = $this->getRefererType($idSite, $period, $date, $segment, $type = false,
$idSubtable = $typeReferrer);

if ($expanded)
{
$subtable = $this->getRefererType($idSite, $period, $date, $segment, $type = false,
$idSubtable = $typeReferrer);

if ($expanded)
{
$subtable->applyQueuedFilters();
}

$row->setSubtable($subtable);
$subtable->applyQueuedFilters();
}

$row->setSubtable($subtable);
}
}
}
Expand Down
39 changes: 39 additions & 0 deletions plugins/Referers/Controller.php
Expand Up @@ -79,8 +79,47 @@ function index()
$view->urlSparklineDistinctWebsites = $this->getUrlSparkline('getLastDistinctWebsitesGraph');
$view->urlSparklineDistinctCampaigns = $this->getUrlSparkline('getLastDistinctCampaignsGraph');

$view->referrersReportsByDimension = $this->getReferrersReportsByDimensionView($totalVisits);

echo $view->render();
}

/**
* Returns HTML for the Referrers Overview page that categorizes Referrer reports
* & allows the user to switch between them.
*
* @param int $visits The number of visits for this period & site. If <= 0, the
* reports are not shown, since they will have no data.
* @return string The report viewer HTML.
*/
private function getReferrersReportsByDimensionView( $visits )
{
$result = '';

// only display the reports by dimension view if there are visits
if ($visits > 0)
{
$referrersReportsByDimension = new Piwik_View_ReportsByDimension();

$referrersReportsByDimension->addReport(
'Referers_ViewAllReferrers', 'Referers_WidgetGetAll', 'Referers.getAll');

$byTypeCategory = Piwik_Translate('Referers_ViewReferrersBy', Piwik_Translate('Live_GoalType'));
$referrersReportsByDimension->addReport(
$byTypeCategory, 'Referers_WidgetKeywords', 'Referers.getKeywords');
$referrersReportsByDimension->addReport($byTypeCategory, 'SitesManager_Sites', 'Referers.getWebsites');
$referrersReportsByDimension->addReport($byTypeCategory, 'Referers_Campaigns', 'Referers.getCampaigns');

$bySourceCategory = Piwik_Translate('Referers_ViewReferrersBy', Piwik_Translate('General_Source'));
$referrersReportsByDimension->addReport($bySourceCategory, 'Referers_Socials', 'Referers.getSocials');
$referrersReportsByDimension->addReport(
$bySourceCategory, 'Referers_SearchEngines', 'Referers.getSearchEngines');

$result = $referrersReportsByDimension->render();
}

return $result;
}

function getSearchEnginesAndKeywords()
{
Expand Down
58 changes: 31 additions & 27 deletions plugins/Referers/templates/index.tpl
Expand Up @@ -24,31 +24,38 @@

<div style="clear:both" />

<p style="float:left">
<br/><br/>
<div style="float:left">
<br/>
<h2>{'General_MoreDetails'|translate}&nbsp;<a href="#" class="section-toggler-link" data-section-id="distinctReferrersByType">({'General_Show_js'|translate})</a></h2>
</p>
</div>

<div id="distinctReferrersByType" style="display:none;float:left">
<table cellpadding="15">
<tr><td width="50%">
<div class="sparkline">{sparkline src=$urlSparklineDistinctSearchEngines}
<strong>{$numberDistinctSearchEngines}</strong> {'Referers_DistinctSearchEngines'|translate}{if !empty($numberDistinctSearchEnginesEvolution)} {$numberDistinctSearchEnginesEvolution}{/if}
</div>
<div class="sparkline">{sparkline src=$urlSparklineDistinctKeywords}
<strong>{$numberDistinctKeywords}</strong> {'Referers_DistinctKeywords'|translate}{if !empty($numberDistinctKeywordsEvolution)} {$numberDistinctKeywordsEvolution}{/if}
</div>
</td>
<td width="50%">
<div class="sparkline">{sparkline src=$urlSparklineDistinctWebsites}
<strong>{$numberDistinctWebsites}</strong> {'Referers_DistinctWebsites'|translate} {'Referers_UsingNDistinctUrls'|translate:"<strong>$numberDistinctWebsitesUrls</strong>"}{if !empty($numberDistinctWebsitesEvolution)} {$numberDistinctWebsitesEvolution}{/if}
</div>
<div class="sparkline">{sparkline src=$urlSparklineDistinctCampaigns}
<strong>{$numberDistinctCampaigns}</strong> {'Referers_DistinctCampaigns'|translate}{if !empty($numberDistinctCampaignsEvolution)} {$numberDistinctCampaignsEvolution}{/if}
</div>
</td></tr>
</table>
<br/><br/>
<table cellpadding="15">
<tr><td width="50%">
<div class="sparkline">{sparkline src=$urlSparklineDistinctSearchEngines}
<strong>{$numberDistinctSearchEngines}</strong> {'Referers_DistinctSearchEngines'|translate}{if !empty($numberDistinctSearchEnginesEvolution)} {$numberDistinctSearchEnginesEvolution}{/if}
</div>
<div class="sparkline">{sparkline src=$urlSparklineDistinctKeywords}
<strong>{$numberDistinctKeywords}</strong> {'Referers_DistinctKeywords'|translate}{if !empty($numberDistinctKeywordsEvolution)} {$numberDistinctKeywordsEvolution}{/if}
</div>
</td>
<td width="50%">
<div class="sparkline">{sparkline src=$urlSparklineDistinctWebsites}
<strong>{$numberDistinctWebsites}</strong> {'Referers_DistinctWebsites'|translate} {'Referers_UsingNDistinctUrls'|translate:"<strong>$numberDistinctWebsitesUrls</strong>"}{if !empty($numberDistinctWebsitesEvolution)} {$numberDistinctWebsitesEvolution}{/if}
</div>
<div class="sparkline">{sparkline src=$urlSparklineDistinctCampaigns}
<strong>{$numberDistinctCampaigns}</strong> {'Referers_DistinctCampaigns'|translate}{if !empty($numberDistinctCampaignsEvolution)} {$numberDistinctCampaignsEvolution}{/if}
</div>
</td></tr>
</table>
<br/>
</div>

<p style="clear:both"/>
<div style="float:left">{'General_View'|translate}
<a href="javascript:broadcast.propagateAjax('module=Referers&action=getSearchEnginesAndKeywords')">{'Referers_SubmenuSearchEngines'|translate}</a>,
<a href="javascript:broadcast.propagateAjax('module=Referers&action=indexWebsites')">{'Referers_SubmenuWebsites'|translate}</a>,
<a href="javascript:broadcast.propagateAjax('module=Referers&action=indexCampaigns')">{'Referers_SubmenuCampaigns'|translate}</a>.
</div>
</div>

Expand All @@ -59,11 +66,8 @@

<div style="clear:both;"></div>

<p>{'General_View'|translate}
<a href="javascript:broadcast.propagateAjax('module=Referers&action=getSearchEnginesAndKeywords')">{'Referers_SubmenuSearchEngines'|translate}</a>,
<a href="javascript:broadcast.propagateAjax('module=Referers&action=indexWebsites')">{'Referers_SubmenuWebsites'|translate}</a>,
<a href="javascript:broadcast.propagateAjax('module=Referers&action=indexCampaigns')">{'Referers_SubmenuCampaigns'|translate}</a>.
</p>
<h2>{'Referers_ReferrersOverview'|translate}</h2>
{$referrersReportsByDimension}

{include file="CoreHome/templates/sparkline_footer.tpl"}

@@ -1,4 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<error message="Referrers.getAll with multiple sites or dates is not supported (yet)." />
</result>
<results>
<result date="2009-01-04" />
<result date="2009-01-05" />
<result date="2009-01-06" />
<result date="2009-01-07" />
<result date="2009-01-08" />
<result date="2009-01-09" />
<result date="2009-01-10" />
</results>
@@ -1,4 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<error message="Referrers.getAll with multiple sites or dates is not supported (yet)." />
</result>
<results>
<result date="From 2008-12-29 to 2009-01-04" />
<result date="From 2009-01-05 to 2009-01-11" />
<result date="From 2009-01-12 to 2009-01-18" />
<result date="From 2009-01-19 to 2009-01-25" />
<result date="From 2009-01-26 to 2009-02-01" />
<result date="From 2009-02-02 to 2009-02-08" />
<result date="From 2009-02-09 to 2009-02-15" />
</results>

0 comments on commit add95a5

Please sign in to comment.