'addWidgets',
'Menu.Reporting.addItems' => 'addMenus',
'Goals.getReportsWithGoalMetrics' => 'getReportsWithGoalMetrics',
'API.getReportMetadata' => 'getReportMetadata',
'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
'ViewDataTable.configure' => 'configureViewDataTable',
'ViewDataTable.getDefaultType' => 'getDefaultTypeViewDataTable',
'Insights.addReportToOverview' => 'addReportToInsightsOverview'
);
return $hooks;
}
public function addReportToInsightsOverview(&$reports)
{
$reports['Referrers_getWebsites'] = array();
$reports['Referrers_getCampaigns'] = array();
$reports['Referrers_getSocials'] = array();
$reports['Referrers_getSearchEngines'] = array();
}
public function getReportMetadata(&$reports)
{
$reports = array_merge($reports, array(
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Type'),
'module' => 'Referrers',
'action' => 'getReferrerType',
'dimension' => Piwik::translate('Referrers_Type'),
'constantRowsCount' => true,
'documentation' => Piwik::translate('Referrers_TypeReportDocumentation') . '
'
. '' . Piwik::translate('Referrers_DirectEntry') . ': ' . Piwik::translate('Referrers_DirectEntryDocumentation') . '
'
. '' . Piwik::translate('Referrers_SearchEngines') . ': ' . Piwik::translate('Referrers_SearchEnginesDocumentation',
array('
', '"' . Piwik::translate('Referrers_SubmenuSearchEngines') . '"')) . '
'
. '' . Piwik::translate('Referrers_Websites') . ': ' . Piwik::translate('Referrers_WebsitesDocumentation',
array('
', '"' . Piwik::translate('Referrers_SubmenuWebsites') . '"')) . '
'
. '' . Piwik::translate('Referrers_Campaigns') . ': ' . Piwik::translate('Referrers_CampaignsDocumentation',
array('
', '"' . Piwik::translate('Referrers_Campaigns') . '"')),
'order' => 1,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_WidgetGetAll'),
'module' => 'Referrers',
'action' => 'getAll',
'dimension' => Piwik::translate('Referrers_Referrer'),
'documentation' => Piwik::translate('Referrers_AllReferrersReportDocumentation', '
'),
'order' => 2,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getKeywords',
'actionToLoadSubTables' => 'getSearchEnginesFromKeywordId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_KeywordsReportDocumentation', '
'),
'order' => 3,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getSearchEnginesFromKeywordId',
'dimension' => Piwik::translate('Referrers_ColumnSearchEngine'),
'documentation' => Piwik::translate('Referrers_KeywordsReportDocumentation', '
'),
'isSubtableReport' => true,
'order' => 4
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getWebsites',
'dimension' => Piwik::translate('Referrers_ColumnWebsite'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '
'),
'actionToLoadSubTables' => 'getUrlsFromWebsiteId',
'order' => 5
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getUrlsFromWebsiteId',
'dimension' => Piwik::translate('Referrers_ColumnWebsitePage'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '
'),
'isSubtableReport' => true,
'order' => 6,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getSearchEngines',
'dimension' => Piwik::translate('Referrers_ColumnSearchEngine'),
'documentation' => Piwik::translate('Referrers_SearchEnginesReportDocumentation', '
'),
'actionToLoadSubTables' => 'getKeywordsFromSearchEngineId',
'order' => 7,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getKeywordsFromSearchEngineId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_SearchEnginesReportDocumentation', '
'),
'isSubtableReport' => true,
'order' => 8,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getCampaigns',
'dimension' => Piwik::translate('Referrers_ColumnCampaign'),
'documentation' => Piwik::translate('Referrers_CampaignsReportDocumentation',
array('
', '', '')),
'actionToLoadSubTables' => 'getKeywordsFromCampaignId',
'order' => 9,
),
array( // subtable report
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getKeywordsFromCampaignId',
'dimension' => Piwik::translate('General_ColumnKeyword'),
'documentation' => Piwik::translate('Referrers_CampaignsReportDocumentation',
array('
', '', '')),
'isSubtableReport' => true,
'order' => 10,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Socials'),
'module' => 'Referrers',
'action' => 'getSocials',
'actionToLoadSubTables' => 'getUrlsForSocial',
'dimension' => Piwik::translate('Referrers_ColumnSocial'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '
'),
'order' => 11,
),
array(
'category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Socials'),
'module' => 'Referrers',
'action' => 'getUrlsForSocial',
'isSubtableReport' => true,
'dimension' => Piwik::translate('Referrers_ColumnWebsitePage'),
'documentation' => Piwik::translate('Referrers_WebsitesReportDocumentation', '
'),
'order' => 12,
),
));
}
public function getSegmentsMetadata(&$segments)
{
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Referrers_Type',
'segment' => 'referrerType',
'acceptedValues' => 'direct, search, website, campaign',
'sqlSegment' => 'log_visit.referer_type',
'sqlFilterValue' => __NAMESPACE__ . '\getReferrerTypeFromShortName',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'General_ColumnKeyword',
'segment' => 'referrerKeyword',
'acceptedValues' => 'Encoded%20Keyword, keyword',
'sqlSegment' => 'log_visit.referer_keyword',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Referrers_ReferrerName',
'segment' => 'referrerName',
'acceptedValues' => 'twitter.com, www.facebook.com, Bing, Google, Yahoo, CampaignName',
'sqlSegment' => 'log_visit.referer_name',
);
$segments[] = array(
'type' => 'dimension',
'category' => 'Referrers_Referrers',
'name' => 'Live_Referrer_URL',
'acceptedValues' => 'http%3A%2F%2Fwww.example.org%2Freferer-page.htm',
'segment' => 'referrerUrl',
'sqlSegment' => 'log_visit.referer_url',
);
}
/**
* Adds Referrer widgets
*/
function addWidgets()
{
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetKeywords', 'Referrers', 'getKeywords');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetExternalWebsites', 'Referrers', 'getWebsites');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetSocials', 'Referrers', 'getSocials');
WidgetsList::add('Referrers_Referrers', 'Referrers_SearchEngines', 'Referrers', 'getSearchEngines');
WidgetsList::add('Referrers_Referrers', 'Referrers_Campaigns', 'Referrers', 'getCampaigns');
WidgetsList::add('Referrers_Referrers', 'General_Overview', 'Referrers', 'getReferrerType');
WidgetsList::add('Referrers_Referrers', 'Referrers_WidgetGetAll', 'Referrers', 'getAll');
if (SettingsPiwik::isSegmentationEnabled()) {
WidgetsList::add('SEO', 'Referrers_WidgetTopKeywordsForPages', 'Referrers', 'getKeywordsForPage');
}
}
/**
* Adds Web Analytics menus
*/
function addMenus()
{
MenuMain::getInstance()->add('Referrers_Referrers', '', array('module' => 'Referrers', 'action' => 'index'), true, 20);
MenuMain::getInstance()->add('Referrers_Referrers', 'General_Overview', array('module' => 'Referrers', 'action' => 'index'), true, 1);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_SubmenuSearchEngines', array('module' => 'Referrers', 'action' => 'getSearchEnginesAndKeywords'), true, 2);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_SubmenuWebsites', array('module' => 'Referrers', 'action' => 'indexWebsites'), true, 3);
MenuMain::getInstance()->add('Referrers_Referrers', 'Referrers_Campaigns', array('module' => 'Referrers', 'action' => 'indexCampaigns'), true, 4);
}
/**
* Adds Goal dimensions, so that the dimensions are displayed in the UI Goal Overview page
*/
public function getReportsWithGoalMetrics(&$dimensions)
{
$dimensions = array_merge($dimensions, array(
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Type'),
'module' => 'Referrers',
'action' => 'getReferrerType',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Keywords'),
'module' => 'Referrers',
'action' => 'getKeywords',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_SearchEngines'),
'module' => 'Referrers',
'action' => 'getSearchEngines',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Websites'),
'module' => 'Referrers',
'action' => 'getWebsites',
),
array('category' => Piwik::translate('Referrers_Referrers'),
'name' => Piwik::translate('Referrers_Campaigns'),
'module' => 'Referrers',
'action' => 'getCampaigns',
),
));
}
public function getDefaultTypeViewDataTable(&$defaultViewTypes)
{
$defaultViewTypes['Referrers.getReferrerType'] = AllColumns::ID;
$defaultViewTypes['Referrers.getSocials'] = Pie::ID;
}
public function configureViewDataTable(ViewDataTable $view)
{
switch ($view->requestConfig->apiMethodToRequestDataTable) {
case 'Referrers.getReferrerType':
$this->configureViewForGetReferrerType($view);
break;
case 'Referrers.getAll':
$this->configureViewForGetAll($view);
break;
case 'Referrers.getKeywords':
$this->configureViewForGetKeywords($view);
break;
case 'Referrers.getSearchEnginesFromKeywordId':
$this->configureViewForGetSearchEnginesFromKeywordId($view);
break;
case 'Referrers.getSearchEngines':
$this->configureViewForGetSearchEngines($view);
break;
case 'Referrers.getKeywordsFromSearchEngineId':
$this->configureViewForGetKeywordsFromSearchEngineId($view);
break;
case 'Referrers.getWebsites':
$this->configureViewForGetWebsites($view);
break;
case 'Referrers.getSocials':
$this->configureViewForGetSocials($view);
break;
case 'Referrers.getUrlsForSocial':
$this->configureViewForGetUrlsForSocial($view);
break;
case 'Referrers.getCampaigns':
$this->configureViewForGetCampaigns($view);
break;
case 'Referrers.getKeywordsFromCampaignId':
$this->configureViewForGetKeywordsFromCampaignId($view);
break;
case 'Referrers.getUrlsFromWebsiteId':
$this->configureViewForGetUrlsFromWebsiteId($view);
break;
}
}
private function configureViewForGetReferrerType(ViewDataTable $view)
{
$idSubtable = Common::getRequestVar('idSubtable', false);
$labelColumnTitle = Piwik::translate('Referrers_Type');
switch ($idSubtable) {
case Common::REFERRER_TYPE_SEARCH_ENGINE:
$labelColumnTitle = Piwik::translate('Referrers_ColumnSearchEngine');
break;
case Common::REFERRER_TYPE_WEBSITE:
$labelColumnTitle = Piwik::translate('Referrers_ColumnWebsite');
break;
case Common::REFERRER_TYPE_CAMPAIGN:
$labelColumnTitle = Piwik::translate('Referrers_ColumnCampaign');
break;
default:
break;
}
$view->config->show_search = false;
$view->config->show_goals = true;
$view->config->show_offset_information = false;
$view->config->show_pagination_control = false;
$view->config->show_limit_control = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', $labelColumnTitle);
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetAll(ViewDataTable $view)
{
$setGetAllHtmlPrefix = array($this, 'setGetAllHtmlPrefix');
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_Referrer'));
$view->requestConfig->filter_limit = 20;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_row_actions = true;
}
$view->config->filters[] = array('MetadataCallbackAddMetadata', array('referer_type', 'html_label_prefix', $setGetAllHtmlPrefix));
}
private function configureViewForGetKeywords(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getSearchEnginesFromKeywordId';
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
$view->config->show_goals = true;
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetSearchEnginesFromKeywordId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSearchEngine'));
}
private function configureViewForGetSearchEngines(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getKeywordsFromSearchEngineId';
$view->config->show_exclude_low_population = false;
$view->config->show_search = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSearchEngine'));
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetKeywordsFromSearchEngineId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
}
private function configureViewForGetWebsites(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getUrlsFromWebsiteId';
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsite'));
$view->requestConfig->filter_limit = 25;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
}
private function configureViewForGetSocials(ViewDataTable $view)
{
$view->config->subtable_controller_action = 'getUrlsForSocial';
$view->config->show_exclude_low_population = false;
$view->config->show_goals = true;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnSocial'));
$view->requestConfig->filter_limit = 10;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
$widget = Common::getRequestVar('widget', false);
if (empty($widget)) {
$view->config->show_footer_message = Piwik::translate('Referrers_SocialFooterMessage');
}
}
private function configureViewForGetUrlsForSocial(ViewDataTable $view)
{
$view->config->show_goals = true;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsitePage'));
$view->requestConfig->filter_limit = 10;
}
private function configureViewForGetCampaigns(ViewDataTable $view)
{
$view->config->show_goals = true;
$view->config->subtable_controller_action = 'getKeywordsFromCampaignId';
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnCampaign'));
$view->requestConfig->filter_limit = 25;
if (Common::getRequestVar('viewDataTable', false) != 'graphEvolution') {
$view->config->show_footer_message = Piwik::translate('Referrers_CampaignFooterHelp',
array('',
' - ',
'')
);
}
}
private function configureViewForGetKeywordsFromCampaignId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->addTranslation('label', Piwik::translate('General_ColumnKeyword'));
}
private function configureViewForGetUrlsFromWebsiteId(ViewDataTable $view)
{
$view->config->show_search = false;
$view->config->show_exclude_low_population = false;
$view->config->tooltip_metadata_name = 'url';
$view->config->addTranslation('label', Piwik::translate('Referrers_ColumnWebsitePage'));
}
/**
* DataTable filter callback that returns the HTML prefix for a label in the
* 'getAll' report based on the row's referrer type.
*
* @param int $referrerType The referrer type.
* @return string
*/
public function setGetAllHtmlPrefix($referrerType)
{
// get singular label for referrer type
$indexTranslation = '';
switch ($referrerType) {
case Common::REFERRER_TYPE_DIRECT_ENTRY:
$indexTranslation = 'Referrers_DirectEntry';
break;
case Common::REFERRER_TYPE_SEARCH_ENGINE:
$indexTranslation = 'General_ColumnKeyword';
break;
case Common::REFERRER_TYPE_WEBSITE:
$indexTranslation = 'Referrers_ColumnWebsite';
break;
case Common::REFERRER_TYPE_CAMPAIGN:
$indexTranslation = 'Referrers_ColumnCampaign';
break;
default:
// case of newsletter, partners, before Piwik 0.2.25
$indexTranslation = 'General_Others';
break;
}
$label = strtolower(Piwik::translate($indexTranslation));
// return html that displays it as grey & italic
return '(' . $label . ')';
}
}