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:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/API/API.php279
-rw-r--r--plugins/API/ProcessedReport.php6
-rw-r--r--plugins/Actions/Actions.php514
-rw-r--r--plugins/Actions/Columns/ClickedUrl.php48
-rw-r--r--plugins/Actions/Columns/DownloadUrl.php48
-rw-r--r--plugins/Actions/Columns/EntryPageTitle.php51
-rw-r--r--plugins/Actions/Columns/EntryPageUrl.php52
-rw-r--r--plugins/Actions/Columns/ExitPageTitle.php60
-rw-r--r--plugins/Actions/Columns/ExitPageUrl.php60
-rw-r--r--plugins/Actions/Columns/PageTitle.php43
-rw-r--r--plugins/Actions/Columns/PageUrl.php44
-rw-r--r--plugins/Actions/Columns/SearchCategory.php20
-rw-r--r--plugins/Actions/Columns/SearchDestinationPage.php20
-rw-r--r--plugins/Actions/Columns/SearchKeyword.php30
-rw-r--r--plugins/Actions/Columns/SearchNoResultKeyword.php20
-rw-r--r--plugins/Actions/Controller.php86
-rw-r--r--plugins/Actions/Menu.php3
-rw-r--r--plugins/Actions/Reports/Base.php118
-rw-r--r--plugins/Actions/Reports/Get.php37
-rw-r--r--plugins/Actions/Reports/GetDownloads.php46
-rw-r--r--plugins/Actions/Reports/GetEntryPageTitles.php67
-rw-r--r--plugins/Actions/Reports/GetEntryPageUrls.php71
-rw-r--r--plugins/Actions/Reports/GetExitPageTitles.php66
-rw-r--r--plugins/Actions/Reports/GetExitPageUrls.php72
-rw-r--r--plugins/Actions/Reports/GetOutlinks.php53
-rw-r--r--plugins/Actions/Reports/GetPageTitles.php76
-rw-r--r--plugins/Actions/Reports/GetPageUrls.php53
-rw-r--r--plugins/Actions/Segment.php37
-rw-r--r--plugins/Actions/Widgets.php19
-rw-r--r--plugins/CoreHome/Controller.php37
-rw-r--r--plugins/DevicesDetection/Columns/Base.php (renamed from plugins/DevicesDetection/Dimensions/Base.php)2
-rw-r--r--plugins/DevicesDetection/Columns/BrowserName.php (renamed from plugins/DevicesDetection/Dimensions/BrowserName.php)2
-rw-r--r--plugins/DevicesDetection/Columns/BrowserVersion.php (renamed from plugins/DevicesDetection/Dimensions/BrowserVersion.php)2
-rw-r--r--plugins/DevicesDetection/Columns/DeviceBrand.php (renamed from plugins/DevicesDetection/Dimensions/DeviceBrand.php)2
-rw-r--r--plugins/DevicesDetection/Columns/DeviceModel.php (renamed from plugins/DevicesDetection/Dimensions/DeviceModel.php)2
-rw-r--r--plugins/DevicesDetection/Columns/DeviceType.php (renamed from plugins/DevicesDetection/Dimensions/DeviceType.php)2
-rw-r--r--plugins/DevicesDetection/Columns/Os.php (renamed from plugins/DevicesDetection/Dimensions/Os.php)2
-rw-r--r--plugins/DevicesDetection/Columns/OsVersion.php (renamed from plugins/DevicesDetection/Dimensions/OsVersion.php)2
-rw-r--r--plugins/Referrers/Columns/Base.php302
-rw-r--r--plugins/Referrers/Columns/ReferrerCampaign.php20
-rw-r--r--plugins/Referrers/Columns/ReferrerKeyword.php33
-rw-r--r--plugins/Referrers/Columns/ReferrerName.php32
-rw-r--r--plugins/Referrers/Columns/ReferrerReferrer.php20
-rw-r--r--plugins/Referrers/Columns/ReferrerSearchEngine.php20
-rw-r--r--plugins/Referrers/Columns/ReferrerSocial.php20
-rw-r--r--plugins/Referrers/Columns/ReferrerType.php33
-rw-r--r--plugins/Referrers/Columns/ReferrerUrl.php32
-rw-r--r--plugins/Referrers/Columns/ReferrerWebsite.php20
-rw-r--r--plugins/Referrers/Columns/ReferrerWebsitePage.php20
49 files changed, 2080 insertions, 624 deletions
diff --git a/plugins/API/API.php b/plugins/API/API.php
index 0b972b9f61..726e92a3c0 100644
--- a/plugins/API/API.php
+++ b/plugins/API/API.php
@@ -15,15 +15,21 @@ use Piwik\DataTable;
use Piwik\DataTable\Filter\ColumnDelete;
use Piwik\DataTable\Row;
use Piwik\Date;
+use Piwik\Filesystem;
+use Piwik\Menu\MenuReporting;
use Piwik\Menu\MenuTop;
use Piwik\Metrics;
use Piwik\Period;
use Piwik\Period\Range;
use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugin\VisitDimension;
use Piwik\Plugins\CoreAdminHome\CustomLogo;
+use Piwik\Tracker\Action;
use Piwik\Tracker\GoalManager;
use Piwik\Translate;
use Piwik\Version;
+use Piwik\WidgetsList;
require_once PIWIK_INCLUDE_PATH . '/core/Config.php';
@@ -82,6 +88,18 @@ class API extends \Piwik\Plugin\API
{
$segments = array();
+ foreach (VisitDimension::getAllDimensions() as $dimension) {
+ foreach ($dimension->getSegments() as $segment) {
+ $segments[] = $segment->toArray();
+ }
+ }
+
+ foreach (ActionDimension::getAllDimensions() as $dimension) {
+ foreach ($dimension->getSegments() as $segment) {
+ $segments[] = $segment->toArray();
+ }
+ }
+
/**
* Triggered when gathering all available segment dimensions.
*
@@ -396,6 +414,267 @@ class API extends \Piwik\Plugin\API
return $metadata;
}
+ public function gener()
+ {
+ $reports = array();
+ $parameters = array();
+ Piwik::postEvent('API.getReportMetadata', array(&$reports, $parameters));
+
+ $widgets = WidgetsList::getInstance()->get();
+ $menus = MenuReporting::getInstance()->getMenu();
+
+ $path = PIWIK_INCLUDE_PATH . '/tmp/files';
+ Filesystem::unlinkRecursive($path, true);
+ Filesystem::mkdir($path);
+ foreach ($reports as $report) {
+ $module = $report['module'];
+ $action = $report['action'];
+ $order = $report['order'];
+
+ $className = ucfirst($action);
+ $moduleDir = $path . '/' . $module;
+ Filesystem::mkdir($moduleDir);
+
+
+ $configureView = "public function configureView(ViewDataTable \$view)
+ {
+ }";
+ try {
+ $plugin = \Piwik\Plugin\Manager::getInstance()->getLoadedPlugin($module);
+ if (!empty($plugin)) {
+ $reflection = new \ReflectionObject($plugin);
+ $viewMethodToFind = 'configureViewFor' . ucfirst($action);
+ if ($reflection->hasMethod($viewMethodToFind)) {
+ $method = $reflection->getMethod($viewMethodToFind);
+ $method->setAccessible(true);
+
+ $file = new \SplFileObject($method->getFileName());
+ $fileIterator = new \LimitIterator($file, $method->getStartLine() - 1, $method->getEndLine() - $method->getStartLine() + 1);
+ $configureView = '';
+ foreach($fileIterator as $line) {
+ $configureView .= $line;
+ }
+ $configureView = str_replace($viewMethodToFind, 'configureView', $configureView);
+ $configureView = str_replace('private function', 'public function', $configureView);
+ $configureView = ltrim($configureView);
+
+ }
+
+ }
+ } catch (\Exception $e) {
+ $plugin = null;
+ }
+
+ $doc = '';
+ if (!empty($report['documentation'])) {
+ $doc = $report['documentation'];
+ $doc = addslashes($doc);
+ }
+
+ $subtable = '';
+ if (!empty($report['actionToLoadSubTables'])) {
+ $subtable = $report['actionToLoadSubTables'];
+ }
+
+ if (!empty($report['metrics'])) {
+ $metrics = "'" . implode("', '", array_keys($report['metrics'])) . "'";
+ } else {
+ $metrics = '';
+ }
+
+
+ $widgetTitle = '';
+ foreach ($widgets as $widget) {
+ foreach ($widget as $item) {
+ if (empty($item['parameters']['module']) || empty($item['name']) || empty($item['parameters']['action'])) {
+ continue;
+ }
+
+ if ($item['parameters']['module'] === $module && $item['parameters']['action'] === $action) {
+ $widgetTitle = $this->findTranslationKeyForFeatureName($item['name']);
+ break 2;
+ }
+ }
+
+ }
+/*
+ $menuTitle = '';
+ foreach ($menus as $key => $submenu) {
+ foreach ($submenu as $menuItem) {
+ if (empty($menuItem['_url']) || empty($menuItem['_name'])) {
+ continue;
+ }
+
+ if (empty($menuItem['_url']['module']) || empty($menuItem['_url']['action'])) {
+ continue;
+ }
+
+ $action1 = $menuItem['_url']['action'];
+ $action2 = str_replace('get', 'index', $action);
+
+ if ($menuItem['_url']['module'] === $module && in_array($action, array($action1, $action2))) {
+ $menuTitle = $this->findTranslationKeyForFeatureName($menuItem['_name']);
+ break 2;
+ }
+ }
+ }
+var_dump($menuTitle);*/
+
+ $nameTranslationKey = $this->getEnglishTranslationForFeatureName($report['name']);
+
+ $dimClass = null;
+ $dimension = null;
+ if (!empty($report['dimension'])) {
+ $dimension = $report['dimension'];
+ $columnsDir = $moduleDir . '/Columns';
+ Filesystem::mkdir($columnsDir);
+ $dimClass = ucfirst(str_replace(' ' ,'', $dimension));
+ $transKEy = $this->getEnglishTranslationForFeatureName($dimension);
+
+ $content = <<<REF
+ <?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\\$module\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class $dimClass extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('$transKEy');
+ }
+}
+REF;
+
+ file_put_contents($columnsDir . '/' . $dimClass . '.php', ltrim($content));
+
+ }
+
+ $content = <<<OBJ
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\\$module\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\\$module\Columns\\$dimClass;
+
+class $className extends Base
+{
+ protected function init()
+ {
+ parent::init();
+OBJ;
+
+$content = ltrim($content);
+ if (!empty($dimClass)) {
+
+ $content .= "
+ \$this->dimension = new $dimClass();";
+ }
+
+ $content .= "
+ \$this->name = Piwik::translate('$nameTranslationKey');
+ \$this->documentation = '$doc';";
+ if (!empty($metrics)) {
+ $content .= "
+ \$this->metrics = array($metrics);";
+ }
+ if (!empty($subtable)) {
+ $content .= "
+ \$this->actionToLoadSubTables = '$subtable';";
+ }
+ $content .= "
+ \$this->order = $order;";
+ if (!empty($widgetTitle)) {
+ $content .= "
+ \$this->widgetTitle = '$widgetTitle';";
+ }
+ $content .= "
+ }
+
+ " . $configureView . "
+}
+";
+
+ $dir = $moduleDir . '/Reports';
+ Filesystem::mkdir($dir);
+
+ file_put_contents($dir . '/' . $className . '.php', ltrim($content));
+
+
+
+ if (!file_exists($dir . '/Base.php')) {
+ $category = $this->findTranslationKeyForFeatureName($report['category']);
+$baseContent = <<<OBJ
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\\$module\Reports;
+
+abstract class Base extends \Piwik\Plugin\Report
+{
+ protected function init()
+ {
+ \$this->category = '$category';
+ }
+
+}
+
+OBJ;
+
+ file_put_contents($dir . '/Base.php', ltrim($baseContent));
+
+ }
+ }
+ }
+
+ private function getEnglishTranslationForFeatureName($featureName)
+ {
+ Translate::reloadLanguage('en');
+
+ $translationKeyForFeature = $this->findTranslationKeyForFeatureName($featureName);
+
+ if (!empty($translationKeyForFeature)) {
+ return $translationKeyForFeature;
+ }
+
+ return $featureName;
+ }
+
+ private function findTranslationKeyForFeatureName($featureName)
+ {
+ if (empty($GLOBALS['Piwik_translations'])) {
+ return;
+ }
+
+ foreach ($GLOBALS['Piwik_translations'] as $key => $translations) {
+ $possibleKey = array_search($featureName, $translations);
+ if (!empty($possibleKey)) {
+ return $key . '_' . $possibleKey;
+ }
+ }
+ }
+
public function getProcessedReport($idSite, $period, $date, $apiModule, $apiAction, $segment = false,
$apiParameters = false, $idGoal = false, $language = false,
$showTimer = true, $hideMetricsDoc = false, $idSubtable = false, $showRawMetrics = false)
diff --git a/plugins/API/ProcessedReport.php b/plugins/API/ProcessedReport.php
index 5c655d323c..c178f9f8e6 100644
--- a/plugins/API/ProcessedReport.php
+++ b/plugins/API/ProcessedReport.php
@@ -20,6 +20,7 @@ use Piwik\Metrics;
use Piwik\MetricsFormatter;
use Piwik\Period;
use Piwik\Piwik;
+use Piwik\Plugin\Report;
use Piwik\Site;
use Piwik\Timer;
use Piwik\Url;
@@ -152,6 +153,10 @@ class ProcessedReport
$availableReports = array();
+ foreach (Report::getAllReports() as $report) {
+ $availableReports[] = $report->toArray();
+ }
+
/**
* Triggered when gathering metadata for all available reports.
*
@@ -198,6 +203,7 @@ class ProcessedReport
* TODO: put dimensions section in all about analytics data
*/
Piwik::postEvent('API.getReportMetadata', array(&$availableReports, $parameters));
+
foreach ($availableReports as &$availableReport) {
if (!isset($availableReport['metrics'])) {
$availableReport['metrics'] = Metrics::getDefaultMetrics();
diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php
index 5df2b98ec3..139c8f93cb 100644
--- a/plugins/Actions/Actions.php
+++ b/plugins/Actions/Actions.php
@@ -35,7 +35,6 @@ class Actions extends \Piwik\Plugin
{
$hooks = array(
'API.getReportMetadata' => 'getReportMetadata',
- 'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
'ViewDataTable.configure' => 'configureViewDataTable',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
@@ -61,294 +60,8 @@ class Actions extends \Piwik\Plugin
$jsFiles[] = "plugins/Actions/javascripts/actionsDataTable.js";
}
- public function getSegmentsMetadata(&$segments)
- {
- $sqlFilter = '\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment';
-
- // entry and exit pages of visit
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnEntryPageURL',
- 'segment' => 'entryPageUrl',
- 'sqlSegment' => 'log_visit.visit_entry_idaction_url',
- 'sqlFilter' => $sqlFilter,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnEntryPageTitle',
- 'segment' => 'entryPageTitle',
- 'sqlSegment' => 'log_visit.visit_entry_idaction_name',
- 'sqlFilter' => $sqlFilter,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnExitPageURL',
- 'segment' => 'exitPageUrl',
- 'sqlSegment' => 'log_visit.visit_exit_idaction_url',
- 'sqlFilter' => $sqlFilter,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnExitPageTitle',
- 'segment' => 'exitPageTitle',
- 'sqlSegment' => 'log_visit.visit_exit_idaction_name',
- 'sqlFilter' => $sqlFilter,
- );
-
- // single pages
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnPageURL',
- 'segment' => 'pageUrl',
- 'sqlSegment' => 'log_link_visit_action.idaction_url',
- 'sqlFilter' => $sqlFilter,
- 'acceptedValues' => "All these segments must be URL encoded, for example: " . urlencode('http://example.com/path/page?query'),
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_ColumnPageName',
- 'segment' => 'pageTitle',
- 'sqlSegment' => 'log_link_visit_action.idaction_name',
- 'sqlFilter' => $sqlFilter,
- );
- $segments[] = array(
- 'type' => 'dimension',
- 'category' => 'General_Actions',
- 'name' => 'Actions_SiteSearchKeyword',
- 'segment' => 'siteSearchKeyword',
- 'sqlSegment' => 'log_link_visit_action.idaction_name',
- 'sqlFilter' => $sqlFilter,
- );
- }
-
public function getReportMetadata(&$reports)
{
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('General_Actions') . ' - ' . Piwik::translate('General_MainMetrics'),
- 'module' => 'Actions',
- 'action' => 'get',
- 'metrics' => array(
- 'nb_pageviews' => Piwik::translate('General_ColumnPageviews'),
- 'nb_uniq_pageviews' => Piwik::translate('General_ColumnUniquePageviews'),
- 'nb_downloads' => Piwik::translate('General_Downloads'),
- 'nb_uniq_downloads' => Piwik::translate('Actions_ColumnUniqueDownloads'),
- 'nb_outlinks' => Piwik::translate('General_Outlinks'),
- 'nb_uniq_outlinks' => Piwik::translate('Actions_ColumnUniqueOutlinks'),
- 'nb_searches' => Piwik::translate('Actions_ColumnSearches'),
- 'nb_keywords' => Piwik::translate('Actions_ColumnSiteSearchKeywords'),
- 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTime'),
- ),
- 'metricsDocumentation' => array(
- 'nb_pageviews' => Piwik::translate('General_ColumnPageviewsDocumentation'),
- 'nb_uniq_pageviews' => Piwik::translate('General_ColumnUniquePageviewsDocumentation'),
- 'nb_downloads' => Piwik::translate('Actions_ColumnClicksDocumentation'),
- 'nb_uniq_downloads' => Piwik::translate('Actions_ColumnUniqueClicksDocumentation'),
- 'nb_outlinks' => Piwik::translate('Actions_ColumnClicksDocumentation'),
- 'nb_uniq_outlinks' => Piwik::translate('Actions_ColumnUniqueClicksDocumentation'),
- 'nb_searches' => Piwik::translate('Actions_ColumnSearchesDocumentation'),
- 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTimeDocumentation'),
-// 'nb_keywords' => Piwik::translate('Actions_ColumnSiteSearchKeywords'),
- ),
- 'processedMetrics' => false,
- 'order' => 1
- );
-
- $metrics = array(
- 'nb_hits' => Piwik::translate('General_ColumnPageviews'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'),
- 'avg_time_on_page' => Piwik::translate('General_ColumnAverageTimeOnPage'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRate'),
- 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTime')
- );
-
- $documentation = array(
- 'nb_hits' => Piwik::translate('General_ColumnPageviewsDocumentation'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviewsDocumentation'),
- 'bounce_rate' => Piwik::translate('General_ColumnPageBounceRateDocumentation'),
- 'avg_time_on_page' => Piwik::translate('General_ColumnAverageTimeOnPageDocumentation'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRateDocumentation'),
- 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTimeDocumentation'),
- );
-
- // pages report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_PageUrls'),
- 'module' => 'Actions',
- 'action' => 'getPageUrls',
- 'dimension' => Piwik::translate('Actions_ColumnPageURL'),
- 'metrics' => $metrics,
- 'metricsDocumentation' => $documentation,
- 'documentation' => Piwik::translate('Actions_PagesReportDocumentation', '<br />')
- . '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getPageUrls',
- 'order' => 2
- );
-
- // entry pages report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_SubmenuPagesEntry'),
- 'module' => 'Actions',
- 'action' => 'getEntryPageUrls',
- 'dimension' => Piwik::translate('Actions_ColumnPageURL'),
- 'metrics' => array(
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'),
- ),
- 'metricsDocumentation' => array(
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrancesDocumentation'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBouncesDocumentation'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRateForPageDocumentation')
- ),
- 'documentation' => Piwik::translate('Actions_EntryPagesReportDocumentation', '<br />')
- . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getEntryPageUrls',
- 'order' => 3
- );
-
- // exit pages report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_SubmenuPagesExit'),
- 'module' => 'Actions',
- 'action' => 'getExitPageUrls',
- 'dimension' => Piwik::translate('Actions_ColumnPageURL'),
- 'metrics' => array(
- 'exit_nb_visits' => Piwik::translate('General_ColumnExits'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRate')
- ),
- 'metricsDocumentation' => array(
- 'exit_nb_visits' => Piwik::translate('General_ColumnExitsDocumentation'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviewsDocumentation'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRateDocumentation')
- ),
- 'documentation' => Piwik::translate('Actions_ExitPagesReportDocumentation', '<br />')
- . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getExitPageUrls',
- 'order' => 4
- );
-
- // page titles report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_SubmenuPageTitles'),
- 'module' => 'Actions',
- 'action' => 'getPageTitles',
- 'dimension' => Piwik::translate('Actions_ColumnPageName'),
- 'metrics' => $metrics,
- 'metricsDocumentation' => $documentation,
- 'documentation' => Piwik::translate('Actions_PageTitlesReportDocumentation', array('<br />', htmlentities('<title>'))),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getPageTitles',
- 'order' => 5,
-
- );
-
- // entry page titles report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_EntryPageTitles'),
- 'module' => 'Actions',
- 'action' => 'getEntryPageTitles',
- 'dimension' => Piwik::translate('Actions_ColumnPageName'),
- 'metrics' => array(
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'),
- ),
- 'metricsDocumentation' => array(
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrancesDocumentation'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBouncesDocumentation'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRateForPageDocumentation')
- ),
- 'documentation' => Piwik::translate('Actions_ExitPageTitlesReportDocumentation', '<br />')
- . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getEntryPageTitles',
- 'order' => 6
- );
-
- // exit page titles report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('Actions_ExitPageTitles'),
- 'module' => 'Actions',
- 'action' => 'getExitPageTitles',
- 'dimension' => Piwik::translate('Actions_ColumnPageName'),
- 'metrics' => array(
- 'exit_nb_visits' => Piwik::translate('General_ColumnExits'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRate')
- ),
- 'metricsDocumentation' => array(
- 'exit_nb_visits' => Piwik::translate('General_ColumnExitsDocumentation'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviewsDocumentation'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRateDocumentation')
- ),
- 'documentation' => Piwik::translate('Actions_EntryPageTitlesReportDocumentation', '<br />')
- . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getExitPageTitles',
- 'order' => 7
- );
-
- $documentation = array(
- 'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicksDocumentation'),
- 'nb_hits' => Piwik::translate('Actions_ColumnClicksDocumentation')
- );
-
- // outlinks report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('General_Outlinks'),
- 'module' => 'Actions',
- 'action' => 'getOutlinks',
- 'dimension' => Piwik::translate('Actions_ColumnClickedURL'),
- 'metrics' => array(
- 'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicks'),
- 'nb_hits' => Piwik::translate('Actions_ColumnClicks')
- ),
- 'metricsDocumentation' => $documentation,
- 'documentation' => Piwik::translate('Actions_OutlinksReportDocumentation') . ' '
- . Piwik::translate('Actions_OutlinkDocumentation') . '<br />'
- . Piwik::translate('General_UsePlusMinusIconsDocumentation'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getOutlinks',
- 'order' => 8,
- );
-
- // downloads report
- $reports[] = array(
- 'category' => Piwik::translate('General_Actions'),
- 'name' => Piwik::translate('General_Downloads'),
- 'module' => 'Actions',
- 'action' => 'getDownloads',
- 'dimension' => Piwik::translate('Actions_ColumnDownloadURL'),
- 'metrics' => array(
- 'nb_visits' => Piwik::translate('Actions_ColumnUniqueDownloads'),
- 'nb_hits' => Piwik::translate('General_Downloads')
- ),
- 'metricsDocumentation' => $documentation,
- 'documentation' => Piwik::translate('Actions_DownloadsReportDocumentation', '<br />'),
- 'processedMetrics' => false,
- 'actionToLoadSubTables' => 'getDownloads',
- 'order' => 9,
- );
-
if ($this->isSiteSearchEnabled()) {
// Search Keywords
$reports[] = array(
@@ -496,15 +209,6 @@ class Actions extends \Piwik\Plugin
public function configureViewDataTable(ViewDataTable $view)
{
switch ($view->requestConfig->apiMethodToRequestDataTable) {
- case 'Actions.getPageUrls':
- $this->configureViewForPageUrls($view);
- break;
- case 'Actions.getEntryPageUrls':
- $this->configureViewForEntryPageUrls($view);
- break;
- case 'Actions.getExitPageUrls':
- $this->configureViewForExitPageUrls($view);
- break;
case 'Actions.getSiteSearchKeywords':
$this->configureViewForSiteSearchKeywords($view);
break;
@@ -520,21 +224,6 @@ class Actions extends \Piwik\Plugin
case 'Actions.getPageTitlesFollowingSiteSearch':
$this->configureViewForGetPageUrlsOrTitlesFollowingSiteSearch($view, true);
break;
- case 'Actions.getPageTitles':
- $this->configureViewForGetPageTitles($view);
- break;
- case 'Actions.getEntryPageTitles':
- $this->configureViewForGetEntryPageTitles($view);
- break;
- case 'Actions.getExitPageTitles':
- $this->configureViewForGetExitPageTitles($view);
- break;
- case 'Actions.getDownloads':
- $this->configureViewForGetDownloads($view);
- break;
- case 'Actions.getOutlinks':
- $this->configureViewForGetOutlinks($view);
- break;
}
if ($this->pluginName == $view->requestConfig->getApiModuleToRequest()) {
@@ -611,113 +300,6 @@ class Actions extends \Piwik\Plugin
}
}
- private function addPageDisplayProperties(ViewDataTable $view)
- {
- $view->config->addTranslations(array(
- 'nb_hits' => Piwik::translate('General_ColumnPageviews'),
- 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
- 'avg_time_on_page' => Piwik::translate('General_ColumnAverageTimeOnPage'),
- 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'),
- 'exit_rate' => Piwik::translate('General_ColumnExitRate'),
- 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTime'),
- ));
-
- // prettify avg_time_on_page column
- $getPrettyTimeFromSeconds = '\Piwik\MetricsFormatter::getPrettyTimeFromSeconds';
- $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_on_page', $getPrettyTimeFromSeconds));
-
- // prettify avg_time_generation column
- $avgTimeCallback = function ($time) {
- return $time ? MetricsFormatter::getPrettyTimeFromSeconds($time, true, true, false) : "-";
- };
- $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_generation', $avgTimeCallback));
-
- // add avg_generation_time tooltip
- $tooltipCallback = function ($hits, $min, $max) {
- if (!$hits) {
- return false;
- }
-
- return Piwik::translate("Actions_AvgGenerationTimeTooltip", array(
- $hits,
- "<br />",
- MetricsFormatter::getPrettyTimeFromSeconds($min),
- MetricsFormatter::getPrettyTimeFromSeconds($max)
- ));
- };
- $view->config->filters[] = array('ColumnCallbackAddMetadata',
- array(
- array('nb_hits_with_time_generation', 'min_time_generation', 'max_time_generation'),
- 'avg_time_generation_tooltip',
- $tooltipCallback
- )
- );
-
- $this->addExcludeLowPopDisplayProperties($view);
- }
-
- public function configureViewForPageUrls(ViewDataTable $view)
- {
- $view->config->addTranslation('label', Piwik::translate('Actions_ColumnPageURL'));
- $view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
- 'avg_time_on_page', 'exit_rate', 'avg_time_generation');
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForEntryPageUrls(ViewDataTable $view)
- {
- // link to the page, not just the report, but only if not a widget
- $widget = Common::getRequestVar('widget', false);
-
- $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
- 'module' => 'Actions',
- 'action' => $widget === false ? 'indexEntryPageUrls' : 'getEntryPageUrls'
- ));
-
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnEntryPageURL'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'))
- );
-
- $view->config->title = Piwik::translate('Actions_SubmenuPagesEntry');
- $view->config->addRelatedReport('Actions.getEntryPageTitles', Piwik::translate('Actions_EntryPageTitles'));
- $view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
- $view->requestConfig->filter_sort_column = 'entry_nb_visits';
- $view->requestConfig->filter_sort_order = 'desc';
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForExitPageUrls(ViewDataTable $view)
- {
- // link to the page, not just the report, but only if not a widget
- $widget = Common::getRequestVar('widget', false);
-
- $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
- 'module' => 'Actions',
- 'action' => $widget === false ? 'indexExitPageUrls' : 'getExitPageUrls'
- ));
-
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnExitPageURL'),
- 'exit_nb_visits' => Piwik::translate('General_ColumnExits'))
- );
-
- $view->config->title = Piwik::translate('Actions_SubmenuPagesExit');
- $view->config->addRelatedReport('Actions.getExitPageTitles', Piwik::translate('Actions_ExitPageTitles'));
-
- $view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
- $view->requestConfig->filter_sort_column = 'exit_nb_visits';
- $view->requestConfig->filter_sort_order = 'desc';
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
private function addSiteSearchDisplayProperties(ViewDataTable $view)
{
$view->config->addTranslations(array(
@@ -790,101 +372,5 @@ class Actions extends \Piwik\Plugin
$this->addBaseDisplayProperties($view);
}
- public function configureViewForGetPageTitles(ViewDataTable $view)
- {
- // link to the page, not just the report, but only if not a widget
- $widget = Common::getRequestVar('widget', false);
-
- $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
- 'module' => 'Actions',
- 'action' => $widget === false ? 'indexPageTitles' : 'getPageTitles'
- ));
-
- $view->config->title = Piwik::translate('Actions_SubmenuPageTitles');
- $view->config->addRelatedReports(array(
- 'Actions.getEntryPageTitles' => Piwik::translate('Actions_EntryPageTitles'),
- 'Actions.getExitPageTitles' => Piwik::translate('Actions_ExitPageTitles'),
- ));
-
- $view->config->addTranslation('label', Piwik::translate('Actions_ColumnPageName'));
- $view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
- 'avg_time_on_page', 'exit_rate', 'avg_time_generation');
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForGetEntryPageTitles(ViewDataTable $view)
- {
- $entryPageUrlAction =
- Common::getRequestVar('widget', false) === false ? 'indexEntryPageUrls' : 'getEntryPageUrls';
-
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnEntryPageTitle'),
- 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
- 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'),
- ));
- $view->config->addRelatedReports(array(
- 'Actions.getPageTitles' => Piwik::translate('Actions_SubmenuPageTitles'),
- "Actions.$entryPageUrlAction" => Piwik::translate('Actions_SubmenuPagesEntry')
- ));
-
- $view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
- $view->config->title = Piwik::translate('Actions_EntryPageTitles');
-
- $view->requestConfig->filter_sort_column = 'entry_nb_visits';
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForGetExitPageTitles(ViewDataTable $view)
- {
- $exitPageUrlAction =
- Common::getRequestVar('widget', false) === false ? 'indexExitPageUrls' : 'getExitPageUrls';
-
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnExitPageTitle'),
- 'exit_nb_visits' => Piwik::translate('General_ColumnExits'),
- ));
- $view->config->addRelatedReports(array(
- 'Actions.getPageTitles' => Piwik::translate('Actions_SubmenuPageTitles'),
- "Actions.$exitPageUrlAction" => Piwik::translate('Actions_SubmenuPagesExit'),
- ));
-
- $view->config->title = Piwik::translate('Actions_ExitPageTitles');
- $view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
-
- $this->addPageDisplayProperties($view);
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForGetDownloads(ViewDataTable $view)
- {
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnDownloadURL'),
- 'nb_visits' => Piwik::translate('Actions_ColumnUniqueDownloads'),
- 'nb_hits' => Piwik::translate('General_Downloads'),
- ));
-
- $view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
- $view->config->show_exclude_low_population = false;
-
- $this->addBaseDisplayProperties($view);
- }
-
- public function configureViewForGetOutlinks(ViewDataTable $view)
- {
- $view->config->addTranslations(array(
- 'label' => Piwik::translate('Actions_ColumnClickedURL'),
- 'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicks'),
- 'nb_hits' => Piwik::translate('Actions_ColumnClicks'),
- ));
-
- $view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
- $view->config->show_exclude_low_population = false;
-
- $this->addBaseDisplayProperties($view);
- }
}
diff --git a/plugins/Actions/Columns/ClickedUrl.php b/plugins/Actions/Columns/ClickedUrl.php
new file mode 100644
index 0000000000..f5d14fb5df
--- /dev/null
+++ b/plugins/Actions/Columns/ClickedUrl.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Request;
+use Piwik\Tracker\TableLogAction;
+
+class ClickedUrl extends ActionDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnClickedURL');
+ }
+/*
+ public function shouldHandleAction(Request $request)
+ {
+ $link = $request->getParam('link');
+
+ return !empty($link);
+ }
+
+ public function getValue(Request $request)
+ {
+ $url = $request->getParam('link');
+
+ $ids = TableLogAction::loadIdsAction(array('idaction_url' => array($url, $this->getActionId())));
+
+ if (empty($ids['idaction_url'])) {
+ return false;
+ }
+
+ return (int) $ids['idaction_url'];
+ }
+
+ public function getActionId()
+ {
+ return 2;
+ }*/
+}
diff --git a/plugins/Actions/Columns/DownloadUrl.php b/plugins/Actions/Columns/DownloadUrl.php
new file mode 100644
index 0000000000..bfccd19d44
--- /dev/null
+++ b/plugins/Actions/Columns/DownloadUrl.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Request;
+use Piwik\Tracker\TableLogAction;
+
+class DownloadUrl extends ActionDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnDownloadURL');
+ }
+/*
+ public function shouldHandleAction(Request $request)
+ {
+ $download = $request->getParam('download');
+
+ return !empty($download);
+ }
+
+ public function getValue(Request $request)
+ {
+ $url = $request->getParam('download');
+
+ $ids = TableLogAction::loadIdsAction(array('idaction_url' => array($url, $this->getActionId())));
+
+ if (empty($ids['idaction_url'])) {
+ return false;
+ }
+
+ return (int) $ids['idaction_url'];
+ }
+
+ public function getActionId()
+ {
+ return 3;
+ }*/
+}
diff --git a/plugins/Actions/Columns/EntryPageTitle.php b/plugins/Actions/Columns/EntryPageTitle.php
new file mode 100644
index 0000000000..5df614f9e1
--- /dev/null
+++ b/plugins/Actions/Columns/EntryPageTitle.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+
+class EntryPageTitle extends VisitDimension
+{
+ protected $fieldName = 'visit_entry_idaction_name';
+ protected $fieldType = 'INTEGER(11) UNSIGNED NOT NULL';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('entryPageTitle');
+ $segment->setName('Actions_ColumnEntryPageTitle');
+ $this->addSegment($segment);
+ }
+
+ /**
+ * @param Request $request
+ * @param $visit
+ * @param Action|null $action
+ * @return bool
+ */
+ public function onNewVisit(Request $request, $visit, $action)
+ {
+ $idActionName = false;
+
+ if (!empty($action)) {
+ $idActionName = $action->getIdActionNameForEntryAndExitIds();
+ }
+
+ return (int) $idActionName;
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnEntryPageTitle');
+ }
+}
diff --git a/plugins/Actions/Columns/EntryPageUrl.php b/plugins/Actions/Columns/EntryPageUrl.php
new file mode 100644
index 0000000000..b2b9ea0c5c
--- /dev/null
+++ b/plugins/Actions/Columns/EntryPageUrl.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+
+class EntryPageUrl extends VisitDimension
+{
+ protected $fieldName = 'visit_entry_idaction_url';
+ protected $fieldType = 'INTEGER(11) UNSIGNED NOT NULL';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('entryPageUrl');
+ $segment->setName('Actions_ColumnEntryPageURL');
+ $this->addSegment($segment);
+ }
+
+ /**
+ * @param Request $request
+ * @param $visit
+ * @param Action|null $action
+ * @return bool
+ */
+ public function onNewVisit(Request $request, $visit, $action)
+ {
+ $idActionUrl = false;
+
+ if (!empty($action)) {
+ $idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
+ }
+
+ return (int) $idActionUrl;
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnEntryPageURL');
+ }
+
+}
diff --git a/plugins/Actions/Columns/ExitPageTitle.php b/plugins/Actions/Columns/ExitPageTitle.php
new file mode 100644
index 0000000000..7890c49a09
--- /dev/null
+++ b/plugins/Actions/Columns/ExitPageTitle.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+
+class ExitPageTitle extends VisitDimension
+{
+ protected $fieldName = 'visit_exit_idaction_name';
+ protected $fieldType = 'INTEGER(11) UNSIGNED NOT NULL';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('exitPageTitle');
+ $segment->setName('Actions_ColumnExitPageTitle');
+ $this->addSegment($segment);
+ }
+
+ /**
+ * @param Request $request
+ * @param $visit
+ * @param Action|null $action
+ * @return bool
+ */
+ public function onNewVisit(Request $request, $visit, $action)
+ {
+ $idActionName = false;
+
+ if (!empty($action)) {
+ $idActionName = $action->getIdActionNameForEntryAndExitIds();
+ }
+
+ return (int) $idActionName;
+ }
+
+ public function onExistingVisit(Request $request, $visit, $action)
+ {
+ if (!empty($action)) {
+ return (int) $action->getIdActionNameForEntryAndExitIds();
+ }
+
+ return false;
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnExitPageTitle');
+ }
+}
diff --git a/plugins/Actions/Columns/ExitPageUrl.php b/plugins/Actions/Columns/ExitPageUrl.php
new file mode 100644
index 0000000000..e8267dd537
--- /dev/null
+++ b/plugins/Actions/Columns/ExitPageUrl.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugins\Actions\Segment;
+use Piwik\Plugin\VisitDimension;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+
+class ExitPageUrl extends VisitDimension
+{
+ protected $fieldName = 'visit_exit_idaction_url';
+ protected $fieldType = 'INTEGER(11) UNSIGNED NULL DEFAULT 0';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('exitPageUrl');
+ $segment->setName('Actions_ColumnExitPageURL');
+ $this->addSegment($segment);
+ }
+
+ /**
+ * @param Request $request
+ * @param $visit
+ * @param Action|null $action
+ * @return bool
+ */
+ public function onNewVisit(Request $request, $visit, $action)
+ {
+ $idActionUrl = false;
+
+ if (!empty($action)) {
+ $idActionUrl = $action->getIdActionUrlForEntryAndExitIds();
+ }
+
+ return (int) $idActionUrl;
+ }
+
+ public function onExistingVisit(Request $request, $visit, $action)
+ {
+ if (!empty($action)) {
+ return (int) $action->getIdActionUrlForEntryAndExitIds();
+ }
+
+ return false;
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnExitPageURL');
+ }
+}
diff --git a/plugins/Actions/Columns/PageTitle.php b/plugins/Actions/Columns/PageTitle.php
new file mode 100644
index 0000000000..2b0385717b
--- /dev/null
+++ b/plugins/Actions/Columns/PageTitle.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugins\Actions\Segment;
+use Piwik\Tracker\Request;
+
+class PageTitle extends ActionDimension
+{
+ protected $fieldName = 'idaction_name';
+ protected $fieldType = 'INTEGER(10) UNSIGNED';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('pageTitle');
+ $segment->setName('Actions_ColumnPageName');
+ $this->addSegment($segment);
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnPageName');
+ }
+/*
+ public function shouldHandleAction(Request $request)
+ {
+ return true;
+ }
+
+ public function getActionId()
+ {
+ return 4;
+ }*/
+}
diff --git a/plugins/Actions/Columns/PageUrl.php b/plugins/Actions/Columns/PageUrl.php
new file mode 100644
index 0000000000..0d0d5504f4
--- /dev/null
+++ b/plugins/Actions/Columns/PageUrl.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugins\Actions\Segment;
+
+class PageUrl extends ActionDimension
+{
+ protected $fieldName = 'idaction_url';
+ protected $fieldType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
+
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('pageUrl');
+ $segment->setName('Actions_ColumnPageURL');
+ $segment->setAcceptValues('All these segments must be URL encoded, for example: ' . urlencode('http://example.com/path/page?query'));
+ $this->addSegment($segment);
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnPageURL');
+ }
+
+ /*
+ public function shouldHandleAction(Request $request)
+ {
+ return true;
+ }
+
+ public function getActionId()
+ {
+ return 1;
+ }*/
+}
diff --git a/plugins/Actions/Columns/SearchCategory.php b/plugins/Actions/Columns/SearchCategory.php
new file mode 100644
index 0000000000..6879d3b2a8
--- /dev/null
+++ b/plugins/Actions/Columns/SearchCategory.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class SearchCategory extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnSearchCategory');
+ }
+}
diff --git a/plugins/Actions/Columns/SearchDestinationPage.php b/plugins/Actions/Columns/SearchDestinationPage.php
new file mode 100644
index 0000000000..efb3b104b5
--- /dev/null
+++ b/plugins/Actions/Columns/SearchDestinationPage.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class SearchDestinationPage extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('General_ColumnDestinationPage');
+ }
+}
diff --git a/plugins/Actions/Columns/SearchKeyword.php b/plugins/Actions/Columns/SearchKeyword.php
new file mode 100644
index 0000000000..ab80e0c765
--- /dev/null
+++ b/plugins/Actions/Columns/SearchKeyword.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ActionDimension;
+use Piwik\Plugins\Actions\Segment;
+
+class SearchKeyword extends ActionDimension
+{
+ protected function init()
+ {
+ $segment = new Segment();
+ $segment->setSegment('siteSearchKeyword');
+ $segment->setName('Actions_SiteSearchKeyword');
+ $segment->setSqlSegment('log_link_visit_action.idaction_name');
+ $this->addSegment($segment);
+ }
+
+ public function getName()
+ {
+ return Piwik::translate('General_ColumnKeyword');
+ }
+}
diff --git a/plugins/Actions/Columns/SearchNoResultKeyword.php b/plugins/Actions/Columns/SearchNoResultKeyword.php
new file mode 100644
index 0000000000..1f067fcec6
--- /dev/null
+++ b/plugins/Actions/Columns/SearchNoResultKeyword.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class SearchNoResultKeyword extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Actions_ColumnNoResultKeyword');
+ }
+}
diff --git a/plugins/Actions/Controller.php b/plugins/Actions/Controller.php
index 054eff8287..f5fc875c18 100644
--- a/plugins/Actions/Controller.php
+++ b/plugins/Actions/Controller.php
@@ -21,27 +21,6 @@ class Controller extends \Piwik\Plugin\Controller
// Actions that render whole pages
//
- public function indexPageUrls()
- {
- return View::singleReport(
- Piwik::translate('General_Pages'),
- $this->getPageUrls(true));
- }
-
- public function indexEntryPageUrls()
- {
- return View::singleReport(
- Piwik::translate('Actions_SubmenuPagesEntry'),
- $this->getEntryPageUrls(true));
- }
-
- public function indexExitPageUrls()
- {
- return View::singleReport(
- Piwik::translate('Actions_SubmenuPagesExit'),
- $this->getExitPageUrls(true));
- }
-
public function indexSiteSearch()
{
$view = new View('@Actions/indexSiteSearch');
@@ -58,46 +37,6 @@ class Controller extends \Piwik\Plugin\Controller
return $view->render();
}
- public function indexPageTitles()
- {
- return View::singleReport(
- Piwik::translate('Actions_SubmenuPageTitles'),
- $this->getPageTitles(true));
- }
-
- public function indexDownloads()
- {
- return View::singleReport(
- Piwik::translate('General_Downloads'),
- $this->getDownloads(true));
- }
-
- public function indexOutlinks()
- {
- return View::singleReport(
- Piwik::translate('General_Outlinks'),
- $this->getOutlinks(true));
- }
-
- //
- // Actions that render individual reports
- //
-
- public function getPageUrls()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getEntryPageUrls()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getExitPageUrls()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
public function getSiteSearchKeywords()
{
return $this->renderReport(__FUNCTION__);
@@ -122,29 +61,4 @@ class Controller extends \Piwik\Plugin\Controller
{
return $this->renderReport(__FUNCTION__);
}
-
- public function getPageTitles()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getEntryPageTitles()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getExitPageTitles()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getDownloads()
- {
- return $this->renderReport(__FUNCTION__);
- }
-
- public function getOutlinks()
- {
- return $this->renderReport(__FUNCTION__);
- }
}
diff --git a/plugins/Actions/Menu.php b/plugins/Actions/Menu.php
index 3c3030462a..ac56e4d2fb 100644
--- a/plugins/Actions/Menu.php
+++ b/plugins/Actions/Menu.php
@@ -15,13 +15,14 @@ class Menu extends \Piwik\Plugin\Menu
public function configureReportingMenu(MenuReporting $menu)
{
$menu->add('General_Actions', '', array('module' => 'Actions', 'action' => 'indexPageUrls'), true, 15);
+ /*
$menu->add('General_Actions', 'General_Pages', array('module' => 'Actions', 'action' => 'indexPageUrls'), true, 1);
$menu->add('General_Actions', 'Actions_SubmenuPagesEntry', array('module' => 'Actions', 'action' => 'indexEntryPageUrls'), true, 2);
$menu->add('General_Actions', 'Actions_SubmenuPagesExit', array('module' => 'Actions', 'action' => 'indexExitPageUrls'), true, 3);
$menu->add('General_Actions', 'Actions_SubmenuPageTitles', array('module' => 'Actions', 'action' => 'indexPageTitles'), true, 4);
$menu->add('General_Actions', 'General_Outlinks', array('module' => 'Actions', 'action' => 'indexOutlinks'), true, 6);
$menu->add('General_Actions', 'General_Downloads', array('module' => 'Actions', 'action' => 'indexDownloads'), true, 7);
-
+*/
$actions = new Actions();
if ($actions->isSiteSearchEnabled()) {
$menu->add('General_Actions', 'Actions_SubmenuSitesearch', array('module' => 'Actions', 'action' => 'indexSiteSearch'), true, 5);
diff --git a/plugins/Actions/Reports/Base.php b/plugins/Actions/Reports/Base.php
new file mode 100644
index 0000000000..c94cb33503
--- /dev/null
+++ b/plugins/Actions/Reports/Base.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Common;
+use Piwik\MetricsFormatter;
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\Actions;
+use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
+use Piwik\API\Request;
+
+abstract class Base extends \Piwik\Plugin\Report
+{
+ protected function init()
+ {
+ $this->category = 'General_Actions';
+ }
+
+ protected function addBaseDisplayProperties(ViewDataTable $view)
+ {
+ $view->config->datatable_js_type = 'ActionsDataTable';
+ $view->config->search_recursive = true;
+ $view->config->show_table_all_columns = false;
+ $view->requestConfig->filter_limit = Actions::ACTIONS_REPORT_ROWS_DISPLAY;
+ $view->config->show_all_views_icons = false;
+
+ if ($view->isViewDataTableId(HtmlTable::ID)) {
+ $view->config->show_embedded_subtable = true;
+ }
+
+ if (Request::shouldLoadExpanded()) {
+
+ if ($view->isViewDataTableId(HtmlTable::ID)) {
+ $view->config->show_expanded = true;
+ }
+
+ $view->config->filters[] = function ($dataTable) {
+ Actions::setDataTableRowLevels($dataTable);
+ };
+ }
+
+ $view->config->filters[] = function ($dataTable) use ($view) {
+ if ($view->isViewDataTableId(HtmlTable::ID)) {
+ $view->config->datatable_css_class = 'dataTableActions';
+ }
+ };
+ }
+
+ protected function addPageDisplayProperties(ViewDataTable $view)
+ {
+ $view->config->addTranslations(array(
+ 'nb_hits' => Piwik::translate('General_ColumnPageviews'),
+ 'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
+ 'avg_time_on_page' => Piwik::translate('General_ColumnAverageTimeOnPage'),
+ 'bounce_rate' => Piwik::translate('General_ColumnBounceRate'),
+ 'exit_rate' => Piwik::translate('General_ColumnExitRate'),
+ 'avg_time_generation' => Piwik::translate('General_ColumnAverageGenerationTime'),
+ ));
+
+ // prettify avg_time_on_page column
+ $getPrettyTimeFromSeconds = '\Piwik\MetricsFormatter::getPrettyTimeFromSeconds';
+ $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_on_page', $getPrettyTimeFromSeconds));
+
+ // prettify avg_time_generation column
+ $avgTimeCallback = function ($time) {
+ return $time ? MetricsFormatter::getPrettyTimeFromSeconds($time, true, true, false) : "-";
+ };
+ $view->config->filters[] = array('ColumnCallbackReplace', array('avg_time_generation', $avgTimeCallback));
+
+ // add avg_generation_time tooltip
+ $tooltipCallback = function ($hits, $min, $max) {
+ if (!$hits) {
+ return false;
+ }
+
+ return Piwik::translate("Actions_AvgGenerationTimeTooltip", array(
+ $hits,
+ "<br />",
+ MetricsFormatter::getPrettyTimeFromSeconds($min),
+ MetricsFormatter::getPrettyTimeFromSeconds($max)
+ ));
+ };
+ $view->config->filters[] = array('ColumnCallbackAddMetadata',
+ array(
+ array('nb_hits_with_time_generation', 'min_time_generation', 'max_time_generation'),
+ 'avg_time_generation_tooltip',
+ $tooltipCallback
+ )
+ );
+
+ $this->addExcludeLowPopDisplayProperties($view);
+ }
+
+ protected function addExcludeLowPopDisplayProperties(ViewDataTable $view)
+ {
+ if (Common::getRequestVar('enable_filter_excludelowpop', '0', 'string') != '0') {
+ $view->requestConfig->filter_excludelowpop = 'nb_hits';
+ $view->requestConfig->filter_excludelowpop_value = function () {
+ // computing minimum value to exclude (2 percent of the total number of actions)
+ $visitsInfo = \Piwik\Plugins\VisitsSummary\Controller::getVisitsSummary()->getFirstRow();
+ $nbActions = $visitsInfo->getColumn('nb_actions');
+ $nbActionsLowPopulationThreshold = floor(0.02 * $nbActions);
+
+ // we remove 1 to make sure some actions/downloads are displayed in the case we have a very few of them
+ // and each of them has 1 or 2 hits...
+ return min($visitsInfo->getColumn('max_actions') - 1, $nbActionsLowPopulationThreshold - 1);
+ };
+ }
+ }
+
+}
diff --git a/plugins/Actions/Reports/Get.php b/plugins/Actions/Reports/Get.php
new file mode 100644
index 0000000000..5a7ba73eaf
--- /dev/null
+++ b/plugins/Actions/Reports/Get.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+
+class Get extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->name = Piwik::translate('General_Actions') . ' - ' . Piwik::translate('General_MainMetrics');
+ $this->documentation = Piwik::translate('Actions_PagesReportDocumentation', '<br />')
+ . '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+ $this->order = 1;
+ $this->metrics = array(
+ 'nb_pageviews',
+ 'nb_uniq_pageviews',
+ 'nb_downloads',
+ 'nb_uniq_downloads',
+ 'nb_outlinks',
+ 'nb_uniq_outlinks',
+ 'nb_searches',
+ 'nb_keywords',
+ 'avg_time_generation'
+ );
+ }
+}
diff --git a/plugins/Actions/Reports/GetDownloads.php b/plugins/Actions/Reports/GetDownloads.php
new file mode 100644
index 0000000000..adb5d2db67
--- /dev/null
+++ b/plugins/Actions/Reports/GetDownloads.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\Columns\DownloadUrl;
+
+class GetDownloads extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new DownloadUrl();
+ $this->name = Piwik::translate('General_Downloads');
+ $this->documentation = Piwik::translate('Actions_DownloadsReportDocumentation', '<br />');
+ $this->metrics = array('nb_visits', 'nb_hits');
+
+ $this->actionToLoadSubTables = $this->action;
+ $this->order = 9;
+
+ $this->menuTitle = 'General_Downloads';
+ $this->widgetTitle = 'General_Downloads';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'nb_visits' => Piwik::translate('Actions_ColumnUniqueDownloads'),
+ 'nb_hits' => Piwik::translate('General_Downloads'),
+ ));
+
+ $view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
+ $view->config->show_exclude_low_population = false;
+
+ $this->addBaseDisplayProperties($view);
+ }
+}
diff --git a/plugins/Actions/Reports/GetEntryPageTitles.php b/plugins/Actions/Reports/GetEntryPageTitles.php
new file mode 100644
index 0000000000..0ec60a7ce8
--- /dev/null
+++ b/plugins/Actions/Reports/GetEntryPageTitles.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Plugins\Actions\Columns\EntryPageTitle;
+use Piwik\Plugins\Actions\Columns\PageTitle;
+
+class GetEntryPageTitles extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new EntryPageTitle();
+ $this->name = Piwik::translate('Actions_EntryPageTitles');
+ $this->documentation = Piwik::translate('Actions_ExitPageTitlesReportDocumentation', '<br />')
+ . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+ $this->metrics = array('entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
+ $this->order = 6;
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->widgetTitle = 'Actions_WidgetEntryPageTitles';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ $entryPageUrlAction =
+ Common::getRequestVar('widget', false) === false ? 'indexEntryPageUrls' : 'getEntryPageUrls';
+
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
+ 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'),
+ ));
+ $view->config->addRelatedReports(array(
+ 'Actions.getPageTitles' => Piwik::translate('Actions_SubmenuPageTitles'),
+ "Actions.$entryPageUrlAction" => Piwik::translate('Actions_SubmenuPagesEntry')
+ ));
+
+ $view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
+ $view->config->title = $this->name;
+
+ $view->requestConfig->filter_sort_column = 'entry_nb_visits';
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+
+ public function getRelatedReports()
+ {
+ return array(
+ new GetPageTitles(),
+ new GetEntryPageUrls()
+ );
+ }
+}
diff --git a/plugins/Actions/Reports/GetEntryPageUrls.php b/plugins/Actions/Reports/GetEntryPageUrls.php
new file mode 100644
index 0000000000..6e51e446f5
--- /dev/null
+++ b/plugins/Actions/Reports/GetEntryPageUrls.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Plugins\Actions\Columns\EntryPageUrl;
+use Piwik\Plugins\Actions\Columns\PageUrl;
+
+class GetEntryPageUrls extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new EntryPageUrl();
+ $this->name = Piwik::translate('Actions_SubmenuPagesEntry');
+ $this->documentation = Piwik::translate('Actions_EntryPagesReportDocumentation', '<br />')
+ . '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+
+ $this->metrics = array('entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
+ $this->order = 3;
+
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->menuTitle = 'Actions_SubmenuPagesEntry';
+ $this->widgetTitle = 'Actions_WidgetPagesEntry';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ // link to the page, not just the report, but only if not a widget
+ $widget = Common::getRequestVar('widget', false);
+
+ $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
+ 'module' => 'Actions',
+ 'action' => $widget === false ? 'indexEntryPageUrls' : 'getEntryPageUrls'
+ ));
+
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'entry_bounce_count' => Piwik::translate('General_ColumnBounces'),
+ 'entry_nb_visits' => Piwik::translate('General_ColumnEntrances'))
+ );
+
+ // $view->config->title = $this->name;
+ $view->config->addRelatedReport('Actions.getEntryPageTitles', Piwik::translate('Actions_EntryPageTitles'));
+ $view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
+ $view->requestConfig->filter_sort_column = 'entry_nb_visits';
+ $view->requestConfig->filter_sort_order = 'desc';
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+
+ public function getRelatedReports()
+ {
+ return array(
+ new GetEntryPageTitles()
+ );
+ }
+}
diff --git a/plugins/Actions/Reports/GetExitPageTitles.php b/plugins/Actions/Reports/GetExitPageTitles.php
new file mode 100644
index 0000000000..88db0cc8ac
--- /dev/null
+++ b/plugins/Actions/Reports/GetExitPageTitles.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Plugins\Actions\Columns\ExitPageTitle;
+use Piwik\Plugins\Actions\Columns\PageTitle;
+
+class GetExitPageTitles extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new ExitPageTitle();
+ $this->name = Piwik::translate('Actions_ExitPageTitles');
+ $this->documentation = Piwik::translate('Actions_EntryPageTitlesReportDocumentation', '<br />')
+ . ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+
+ $this->metrics = array('exit_nb_visits', 'nb_visits', 'exit_rate');
+ $this->order = 7;
+
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->widgetTitle = 'Actions_WidgetExitPageTitles';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ $exitPageUrlAction =
+ Common::getRequestVar('widget', false) === false ? 'indexExitPageUrls' : 'getExitPageUrls';
+
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'exit_nb_visits' => Piwik::translate('General_ColumnExits'),
+ ));
+ $view->config->addRelatedReports(array(
+ 'Actions.getPageTitles' => Piwik::translate('Actions_SubmenuPageTitles'),
+ "Actions.$exitPageUrlAction" => Piwik::translate('Actions_SubmenuPagesExit'),
+ ));
+
+ $view->config->title = $this->name;
+ $view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+
+ public function getRelatedReports()
+ {
+ return array(
+ new GetPageTitles(),
+ new GetExitPageUrls()
+ );
+ }
+}
diff --git a/plugins/Actions/Reports/GetExitPageUrls.php b/plugins/Actions/Reports/GetExitPageUrls.php
new file mode 100644
index 0000000000..96f010931d
--- /dev/null
+++ b/plugins/Actions/Reports/GetExitPageUrls.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Plugins\Actions\Columns\ExitPageUrl;
+use Piwik\Plugins\Actions\Columns\PageUrl;
+
+class GetExitPageUrls extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new ExitPageUrl();
+ $this->name = Piwik::translate('Actions_SubmenuPagesExit');
+ $this->documentation = Piwik::translate('Actions_ExitPagesReportDocumentation', '<br />')
+ . '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+
+ $this->metrics = array('exit_nb_visits', 'nb_visits', 'exit_rate');
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->order = 4;
+
+ $this->menuTitle = 'Actions_SubmenuPagesExit';
+ $this->widgetTitle = 'Actions_WidgetPagesExit';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ // link to the page, not just the report, but only if not a widget
+ $widget = Common::getRequestVar('widget', false);
+
+ $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
+ 'module' => 'Actions',
+ 'action' => $widget === false ? 'indexExitPageUrls' : 'getExitPageUrls'
+ ));
+
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'exit_nb_visits' => Piwik::translate('General_ColumnExits'))
+ );
+
+ $view->config->title = $this->name;
+ $view->config->addRelatedReport('Actions.getExitPageTitles', Piwik::translate('Actions_ExitPageTitles'));
+
+ $view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
+ $view->requestConfig->filter_sort_column = 'exit_nb_visits';
+ $view->requestConfig->filter_sort_order = 'desc';
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+
+ public function getRelatedReports()
+ {
+ return array(
+ new GetExitPageTitles()
+ );
+ }
+
+}
diff --git a/plugins/Actions/Reports/GetOutlinks.php b/plugins/Actions/Reports/GetOutlinks.php
new file mode 100644
index 0000000000..53e97dbff4
--- /dev/null
+++ b/plugins/Actions/Reports/GetOutlinks.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Plugins\Actions\Columns\ClickedUrl;
+use Piwik\Plugins\Actions\Columns\PageTitle;
+
+class GetOutlinks extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new ClickedUrl();
+ $this->name = Piwik::translate('General_Outlinks');
+ $this->documentation = Piwik::translate('Actions_OutlinksReportDocumentation') . ' '
+ . Piwik::translate('Actions_OutlinkDocumentation') . '<br />'
+ . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+
+ $this->metrics = array('nb_visits', 'nb_hits');
+ $this->order = 8;
+
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->menuTitle = 'General_Outlinks';
+ $this->widgetTitle = 'General_Outlinks';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ $view->config->addTranslations(array(
+ 'label' => $this->dimension->getName(),
+ 'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicks'),
+ 'nb_hits' => Piwik::translate('Actions_ColumnClicks'),
+ ));
+
+ $view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
+ $view->config->show_exclude_low_population = false;
+
+ $this->addBaseDisplayProperties($view);
+ }
+}
diff --git a/plugins/Actions/Reports/GetPageTitles.php b/plugins/Actions/Reports/GetPageTitles.php
new file mode 100644
index 0000000000..bd0445ace4
--- /dev/null
+++ b/plugins/Actions/Reports/GetPageTitles.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\API;
+use Piwik\API\Request;
+use Piwik\Common;
+use Piwik\Plugins\Actions\Columns\PageTitle;
+
+class GetPageTitles extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new PageTitle();
+ $this->name = Piwik::translate('Actions_SubmenuPageTitles');
+ $this->documentation = Piwik::translate('Actions_PageTitlesReportDocumentation',
+ array('<br />', htmlentities('<title>')));
+
+ $this->order = 5;
+ $this->metrics = array(
+ 'nb_hits',
+ 'nb_visits',
+ 'bounce_rate',
+ 'avg_time_on_page',
+ 'exit_rate',
+ 'avg_time_generation'
+ );
+
+ $this->actionToLoadSubTables = $this->action;
+
+ $this->menuTitle = 'Actions_SubmenuPageTitles';
+ $this->widgetTitle = 'Actions_WidgetPageTitles';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ // link to the page, not just the report, but only if not a widget
+ $widget = Common::getRequestVar('widget', false);
+
+ $view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
+ 'module' => 'Actions',
+ 'action' => $widget === false ? 'indexPageTitles' : 'getPageTitles'
+ ));
+
+ $view->config->title = $this->name;
+ $view->config->addRelatedReports(array(
+ 'Actions.getEntryPageTitles' => Piwik::translate('Actions_EntryPageTitles'),
+ 'Actions.getExitPageTitles' => Piwik::translate('Actions_ExitPageTitles'),
+ ));
+
+ $view->config->addTranslation('label', $this->dimension->getName());
+ $view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
+ 'avg_time_on_page', 'exit_rate', 'avg_time_generation');
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+
+ public function getRelatedReports()
+ {
+ return array(
+ new GetEntryPageTitles(),
+ new GetExitPageTitles()
+ );
+ }
+}
diff --git a/plugins/Actions/Reports/GetPageUrls.php b/plugins/Actions/Reports/GetPageUrls.php
new file mode 100644
index 0000000000..3c3dad80dd
--- /dev/null
+++ b/plugins/Actions/Reports/GetPageUrls.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions\Reports;
+
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\Actions\Columns\PageUrl;
+
+class GetPageUrls extends Base
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->dimension = new PageUrl();
+ $this->name = Piwik::translate('Actions_PageUrls');
+ $this->title = Piwik::translate('General_Pages');
+ $this->documentation = Piwik::translate('Actions_PagesReportDocumentation', '<br />')
+ . '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
+
+ $this->actionToLoadSubTables = $this->action;
+ $this->order = 1;
+ $this->metrics = array(
+ 'nb_hits',
+ 'nb_visits',
+ 'bounce_rate',
+ 'avg_time_on_page',
+ 'exit_rate',
+ 'avg_time_generation'
+ );
+
+ $this->segmentSql = 'log_visit.visit_entry_idaction_url';
+
+ $this->menuTitle = 'General_Pages';
+ $this->widgetTitle = 'General_Pages';
+ }
+
+ public function configureView(ViewDataTable $view)
+ {
+ $view->config->addTranslation('label', $this->dimension->getName());
+ $view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
+ 'avg_time_on_page', 'exit_rate', 'avg_time_generation');
+
+ $this->addPageDisplayProperties($view);
+ $this->addBaseDisplayProperties($view);
+ }
+}
diff --git a/plugins/Actions/Segment.php b/plugins/Actions/Segment.php
new file mode 100644
index 0000000000..58d7ddf913
--- /dev/null
+++ b/plugins/Actions/Segment.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Actions;
+
+use Piwik\API\Request;
+use Piwik\ArchiveProcessor;
+use Piwik\Common;
+use Piwik\Db;
+use Piwik\MetricsFormatter;
+use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
+use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
+use Piwik\Site;
+
+/**
+ * Actions plugin
+ *
+ * Reports about the page views, the outlinks and downloads.
+ *
+ */
+class Segment extends \Piwik\Plugin\Segment
+{
+ protected function init()
+ {
+ parent::init();
+
+ $this->setCategory('General_Actions');
+ $this->setSqlFilter('\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment');
+ }
+}
+
diff --git a/plugins/Actions/Widgets.php b/plugins/Actions/Widgets.php
index eff55ceb1b..be1f790166 100644
--- a/plugins/Actions/Widgets.php
+++ b/plugins/Actions/Widgets.php
@@ -15,27 +15,16 @@ class Widgets extends \Piwik\Plugin\Widgets
public function configure(WidgetsList $widgetsList)
{
- $category = 'General_Actions';
- $controller = 'Actions';
-
- $widgetsList->add($category, 'General_Pages', $controller, 'getPageUrls');
- $widgetsList->add($category, 'Actions_WidgetPageTitles', $controller, 'getPageTitles');
- $widgetsList->add($category, 'General_Outlinks', $controller, 'getOutlinks');
- $widgetsList->add($category, 'General_Downloads', $controller, 'getDownloads');
- $widgetsList->add($category, 'Actions_WidgetPagesEntry', $controller, 'getEntryPageUrls');
- $widgetsList->add($category, 'Actions_WidgetPagesExit', $controller, 'getExitPageUrls');
- $widgetsList->add($category, 'Actions_WidgetEntryPageTitles', $controller, 'getEntryPageTitles');
- $widgetsList->add($category, 'Actions_WidgetExitPageTitles', $controller, 'getExitPageTitles');
-
$actions = new Actions();
if ($actions->isSiteSearchEnabled()) {
- $this->addSearchWidgets($widgetsList, $controller);
+ $this->addSearchWidgets($widgetsList);
}
}
- private function addSearchWidgets(WidgetsList $widgetsList, $controller)
+ private function addSearchWidgets(WidgetsList $widgetsList)
{
- $category = 'Actions_SubmenuSitesearch';
+ $controller = 'Actions';
+ $category = 'Actions_SubmenuSitesearch';
$widgetsList->add($category, 'Actions_WidgetSearchKeywords', $controller, 'getSiteSearchKeywords');
diff --git a/plugins/CoreHome/Controller.php b/plugins/CoreHome/Controller.php
index 18eb842483..ef25ac1d1a 100644
--- a/plugins/CoreHome/Controller.php
+++ b/plugins/CoreHome/Controller.php
@@ -16,6 +16,7 @@ use Piwik\FrontController;
use Piwik\Menu\MenuMain;
use Piwik\Notification\Manager as NotificationManager;
use Piwik\Piwik;
+use Piwik\Plugin\Report;
use Piwik\Plugins\CoreHome\DataTableRowAction\MultiRowEvolution;
use Piwik\Plugins\CoreHome\DataTableRowAction\RowEvolution;
use Piwik\Plugins\CorePluginsAdmin\MarketplaceApiClient;
@@ -37,6 +38,42 @@ class Controller extends \Piwik\Plugin\Controller
return 'redirectToCoreHomeIndex';
}
+ public function renderMenuReport()
+ {
+ $reportModule = Common::getRequestVar('reportModule', null, 'string');
+ $reportAction = Common::getRequestVar('reportAction', null, 'string');
+
+ $report = Report::factory($reportModule, $reportAction);
+
+ if (empty($report)) {
+ throw new Exception('This report does not exist');
+ }
+
+ if (!$report->isEnabled()) {
+ throw new Exception('This report is not enabled. Maybe you do not have enough permission');
+ }
+
+ return View::singleReport($report->getName(), $this->renderWidget());
+ }
+
+ public function renderWidget()
+ {
+ $reportModule = Common::getRequestVar('reportModule', null, 'string');
+ $reportAction = Common::getRequestVar('reportAction', null, 'string');
+
+ $report = Report::factory($reportModule, $reportAction);
+
+ if (empty($report)) {
+ throw new Exception('This report does not exist');
+ }
+
+ if (!$report->isEnabled()) {
+ throw new Exception('This report is not enabled. Maybe you do not have enough permission');
+ }
+
+ return $report->render();
+ }
+
function redirectToCoreHomeIndex()
{
$defaultReport = API::getInstance()->getUserPreference(Piwik::getCurrentUserLogin(), API::PREFERENCE_DEFAULT_REPORT);
diff --git a/plugins/DevicesDetection/Dimensions/Base.php b/plugins/DevicesDetection/Columns/Base.php
index 1e1ebf3086..ffe9d45bdb 100644
--- a/plugins/DevicesDetection/Dimensions/Base.php
+++ b/plugins/DevicesDetection/Columns/Base.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use \DeviceDetector;
use Piwik\CacheFile;
diff --git a/plugins/DevicesDetection/Dimensions/BrowserName.php b/plugins/DevicesDetection/Columns/BrowserName.php
index 63abde97e8..6536722742 100644
--- a/plugins/DevicesDetection/Dimensions/BrowserName.php
+++ b/plugins/DevicesDetection/Columns/BrowserName.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/BrowserVersion.php b/plugins/DevicesDetection/Columns/BrowserVersion.php
index 6437233ca2..10b37c3548 100644
--- a/plugins/DevicesDetection/Dimensions/BrowserVersion.php
+++ b/plugins/DevicesDetection/Columns/BrowserVersion.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/DeviceBrand.php b/plugins/DevicesDetection/Columns/DeviceBrand.php
index f7da88dfd4..5a37a53718 100644
--- a/plugins/DevicesDetection/Dimensions/DeviceBrand.php
+++ b/plugins/DevicesDetection/Columns/DeviceBrand.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/DeviceModel.php b/plugins/DevicesDetection/Columns/DeviceModel.php
index cdc61bc6d2..a340503af3 100644
--- a/plugins/DevicesDetection/Dimensions/DeviceModel.php
+++ b/plugins/DevicesDetection/Columns/DeviceModel.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/DeviceType.php b/plugins/DevicesDetection/Columns/DeviceType.php
index fb8e9e7a6e..e566a1a25c 100644
--- a/plugins/DevicesDetection/Dimensions/DeviceType.php
+++ b/plugins/DevicesDetection/Columns/DeviceType.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/Os.php b/plugins/DevicesDetection/Columns/Os.php
index 05167a268e..edaf32949a 100644
--- a/plugins/DevicesDetection/Dimensions/Os.php
+++ b/plugins/DevicesDetection/Columns/Os.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/DevicesDetection/Dimensions/OsVersion.php b/plugins/DevicesDetection/Columns/OsVersion.php
index 78dc41504f..088ca58572 100644
--- a/plugins/DevicesDetection/Dimensions/OsVersion.php
+++ b/plugins/DevicesDetection/Columns/OsVersion.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\DevicesDetection\Dimensions;
+namespace Piwik\Plugins\DevicesDetection\Columns;
use Piwik\Piwik;
use Piwik\Tracker\Request;
diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php
new file mode 100644
index 0000000000..b8d757e73b
--- /dev/null
+++ b/plugins/Referrers/Columns/Base.php
@@ -0,0 +1,302 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+use Piwik\UrlHelper;
+
+
+abstract class Base extends VisitDimension
+{
+
+ // @see detect*() referrer methods
+ protected $typeReferrerAnalyzed;
+ protected $nameReferrerAnalyzed;
+ protected $keywordReferrerAnalyzed;
+ protected $referrerHost;
+ protected $referrerUrl;
+ protected $referrerUrlParse;
+ protected $currentUrlParse;
+ protected $idsite;
+
+ // Used to prefix when a adsense referrer is detected
+ const LABEL_PREFIX_ADWORDS_KEYWORD = '(adwords) ';
+ const LABEL_ADWORDS_NAME = 'AdWords';
+
+ /**
+ * Returns an array containing the following information:
+ * - referer_type
+ * - direct -- absence of referrer URL OR referrer URL has the same host
+ * - site -- based on the referrer URL
+ * - search_engine -- based on the referrer URL
+ * - campaign -- based on campaign URL parameter
+ *
+ * - referer_name
+ * - ()
+ * - piwik.net -- site host name
+ * - google.fr -- search engine host name
+ * - adwords-search -- campaign name
+ *
+ * - referer_keyword
+ * - ()
+ * - ()
+ * - my keyword
+ * - my paid keyword
+ * - ()
+ * - ()
+ *
+ * - referer_url : the same for all the referrer types
+ *
+ * @param string $referrerUrl must be URL Encoded
+ * @param string $currentUrl
+ * @param int $idSite
+ * @return array
+ */
+ public function getReferrerInformation($referrerUrl, $currentUrl, $idSite)
+ {
+ $this->idsite = $idSite;
+
+ // default values for the referer_* fields
+ $referrerUrl = Common::unsanitizeInputValue($referrerUrl);
+ if (!empty($referrerUrl)
+ && !UrlHelper::isLookLikeUrl($referrerUrl)
+ ) {
+ $referrerUrl = '';
+ }
+
+ $currentUrl = PageUrl::cleanupUrl($currentUrl);
+
+ $this->referrerUrl = $referrerUrl;
+ $this->referrerUrlParse = @parse_url($this->referrerUrl);
+ $this->currentUrlParse = @parse_url($currentUrl);
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
+ $this->nameReferrerAnalyzed = '';
+ $this->keywordReferrerAnalyzed = '';
+ $this->referrerHost = '';
+
+ if (isset($this->referrerUrlParse['host'])) {
+ $this->referrerHost = $this->referrerUrlParse['host'];
+ }
+
+ $referrerDetected = $this->detectReferrerCampaign();
+
+ if (!$referrerDetected) {
+ if ($this->detectReferrerDirectEntry()
+ || $this->detectReferrerSearchEngine()
+ ) {
+ $referrerDetected = true;
+ }
+ }
+
+ if (!empty($this->referrerHost)
+ && !$referrerDetected
+ ) {
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_WEBSITE;
+ $this->nameReferrerAnalyzed = Common::mb_strtolower($this->referrerHost);
+ }
+
+ $referrerInformation = array(
+ 'referer_type' => $this->typeReferrerAnalyzed,
+ 'referer_name' => $this->nameReferrerAnalyzed,
+ 'referer_keyword' => $this->keywordReferrerAnalyzed,
+ 'referer_url' => $this->referrerUrl,
+ );
+
+ return $referrerInformation;
+ }
+
+ /**
+ * Search engine detection
+ * @return bool
+ */
+ protected function detectReferrerSearchEngine()
+ {
+ $searchEngineInformation = UrlHelper::extractSearchEngineInformationFromUrl($this->referrerUrl);
+
+ /**
+ * Triggered when detecting the search engine of a referrer URL.
+ *
+ * Plugins can use this event to provide custom search engine detection
+ * logic.
+ *
+ * @param array &$searchEngineInformation An array with the following information:
+ *
+ * - **name**: The search engine name.
+ * - **keywords**: The search keywords used.
+ *
+ * This parameter is initialized to the results
+ * of Piwik's default search engine detection
+ * logic.
+ * @param string referrerUrl The referrer URL from the tracking request.
+ */
+ Piwik::postEvent('Tracker.detectReferrerSearchEngine', array(&$searchEngineInformation, $this->referrerUrl));
+ if ($searchEngineInformation === false) {
+ return false;
+ }
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_SEARCH_ENGINE;
+ $this->nameReferrerAnalyzed = $searchEngineInformation['name'];
+ $this->keywordReferrerAnalyzed = $searchEngineInformation['keywords'];
+ return true;
+ }
+
+ /**
+ * @param string $string
+ * @return bool
+ */
+ protected function detectCampaignFromString($string)
+ {
+ foreach ($this->campaignNames as $campaignNameParameter) {
+ $campaignName = trim(urldecode(UrlHelper::getParameterFromQueryString($string, $campaignNameParameter)));
+ if (!empty($campaignName)) {
+ break;
+ }
+ }
+
+ if (empty($campaignName)) {
+ return false;
+ }
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
+ $this->nameReferrerAnalyzed = $campaignName;
+
+ foreach ($this->campaignKeywords as $campaignKeywordParameter) {
+ $campaignKeyword = UrlHelper::getParameterFromQueryString($string, $campaignKeywordParameter);
+ if (!empty($campaignKeyword)) {
+ $this->keywordReferrerAnalyzed = trim(urldecode($campaignKeyword));
+ break;
+ }
+ }
+ return !empty($this->keywordReferrerAnalyzed);
+ }
+
+ protected function detectReferrerCampaignFromLandingUrl()
+ {
+ if (!isset($this->currentUrlParse['query'])
+ && !isset($this->currentUrlParse['fragment'])
+ ) {
+ return false;
+ }
+ $campaignParameters = Common::getCampaignParameters();
+ $this->campaignNames = $campaignParameters[0];
+ $this->campaignKeywords = $campaignParameters[1];
+
+ $found = false;
+
+ // 1) Detect campaign from query string
+ if (isset($this->currentUrlParse['query'])) {
+ $found = $this->detectCampaignFromString($this->currentUrlParse['query']);
+ }
+
+ // 2) Detect from fragment #hash
+ if (!$found
+ && isset($this->currentUrlParse['fragment'])
+ ) {
+ $this->detectCampaignFromString($this->currentUrlParse['fragment']);
+ }
+ }
+
+ /**
+ * We have previously tried to detect the campaign variables in the URL
+ * so at this stage, if the referrer host is the current host,
+ * or if the referrer host is any of the registered URL for this website,
+ * it is considered a direct entry
+ * @return bool
+ */
+ protected function detectReferrerDirectEntry()
+ {
+ if (!empty($this->referrerHost)) {
+ // is the referrer host the current host?
+ if (isset($this->currentUrlParse['host'])) {
+ $currentHost = mb_strtolower($this->currentUrlParse['host'], 'UTF-8');
+ if ($currentHost == mb_strtolower($this->referrerHost, 'UTF-8')) {
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
+ return true;
+ }
+ }
+ if (Visit::isHostKnownAliasHost($this->referrerHost, $this->idsite)) {
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_DIRECT_ENTRY;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected function detectCampaignKeywordFromReferrerUrl()
+ {
+ if(!empty($this->nameReferrerAnalyzed)
+ && !empty($this->keywordReferrerAnalyzed)) {
+ // keyword is already set, we skip
+ return true;
+ }
+
+ // Set the Campaign keyword to the keyword found in the Referrer URL if any
+ if(!empty($this->nameReferrerAnalyzed)) {
+ $referrerUrlInfo = UrlHelper::extractSearchEngineInformationFromUrl($this->referrerUrl);
+ if (!empty($referrerUrlInfo['keywords'])) {
+ $this->keywordReferrerAnalyzed = $referrerUrlInfo['keywords'];
+ }
+ }
+
+ // Set the keyword, to the hostname found, in a Adsense Referrer URL '&url=' parameter
+ if (empty($this->keywordReferrerAnalyzed)
+ && !empty($this->referrerUrlParse['query'])
+ && !empty($this->referrerHost)
+ && (strpos($this->referrerHost, 'googleads') !== false || strpos($this->referrerHost, 'doubleclick') !== false)
+ ) {
+ // This parameter sometimes is found & contains the page with the adsense ad bringing visitor to our site
+ $value = $this->getParameterValueFromReferrerUrl('url');
+ if (!empty($value)) {
+ $parsedAdsenseReferrerUrl = parse_url($value);
+ if (!empty($parsedAdsenseReferrerUrl['host'])) {
+
+ if(empty($this->nameReferrerAnalyzed)) {
+ $type = $this->getParameterValueFromReferrerUrl('ad_type');
+ $type = $type ? " ($type)" : '';
+ $this->nameReferrerAnalyzed = self::LABEL_ADWORDS_NAME . $type;
+ $this->typeReferrerAnalyzed = Common::REFERRER_TYPE_CAMPAIGN;
+ }
+ $this->keywordReferrerAnalyzed = self::LABEL_PREFIX_ADWORDS_KEYWORD . $parsedAdsenseReferrerUrl['host'];
+ }
+ }
+ }
+
+ }
+
+ /**
+ * @return string
+ */
+ protected function getParameterValueFromReferrerUrl($adsenseReferrerParameter)
+ {
+ $value = trim(urldecode(UrlHelper::getParameterFromQueryString($this->referrerUrlParse['query'], $adsenseReferrerParameter)));
+ return $value;
+ }
+
+ /**
+ * @return bool
+ */
+ protected function detectReferrerCampaign()
+ {
+ $this->detectReferrerCampaignFromLandingUrl();
+ $this->detectCampaignKeywordFromReferrerUrl();
+
+ if ($this->typeReferrerAnalyzed != Common::REFERRER_TYPE_CAMPAIGN) {
+ return false;
+ }
+ // if we detected a campaign but there is still no keyword set, we set the keyword to the Referrer host
+ if(empty($this->keywordReferrerAnalyzed)) {
+ $this->keywordReferrerAnalyzed = $this->referrerHost;
+ }
+
+ $this->keywordReferrerAnalyzed = Common::mb_strtolower($this->keywordReferrerAnalyzed);
+ $this->nameReferrerAnalyzed = Common::mb_strtolower($this->nameReferrerAnalyzed);
+ return true;
+ }
+
+}
diff --git a/plugins/Referrers/Columns/ReferrerCampaign.php b/plugins/Referrers/Columns/ReferrerCampaign.php
new file mode 100644
index 0000000000..8cefe48d35
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerCampaign.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerCampaign extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_ColumnCampaign');
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerKeyword.php b/plugins/Referrers/Columns/ReferrerKeyword.php
new file mode 100644
index 0000000000..029316893a
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerKeyword.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Tracker\Request;
+
+class ReferrerKeyword extends Base
+{
+ protected $fieldName = 'referer_keyword';
+ protected $fieldType = 'VARCHAR(255) NULL';
+
+ public function getName()
+ {
+ return Piwik::translate('General_ColumnKeyword');
+ }
+
+ public function onNewVisit(Request $request, $visit)
+ {
+ $referrerUrl = $request->getParam('urlref');
+ $currentUrl = $request->getParam('url');
+
+ $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+
+ return $information['referer_keyword'];
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerName.php b/plugins/Referrers/Columns/ReferrerName.php
new file mode 100644
index 0000000000..288957f436
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerName.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Tracker\Request;
+
+class ReferrerName extends Base
+{
+ protected $fieldName = 'referer_name';
+ protected $fieldType = 'VARCHAR(70) NULL';
+
+ public function getName()
+ {
+ return '';
+ }
+
+ public function onNewVisit(Request $request, $visit)
+ {
+ $referrerUrl = $request->getParam('urlref');
+ $currentUrl = $request->getParam('url');
+
+ $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+
+ return $information['referer_name'];
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerReferrer.php b/plugins/Referrers/Columns/ReferrerReferrer.php
new file mode 100644
index 0000000000..9601913125
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerReferrer.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerReferrer extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_Referrer');
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerSearchEngine.php b/plugins/Referrers/Columns/ReferrerSearchEngine.php
new file mode 100644
index 0000000000..aa94df5874
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerSearchEngine.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerSearchEngine extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_ColumnSearchEngine');
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerSocial.php b/plugins/Referrers/Columns/ReferrerSocial.php
new file mode 100644
index 0000000000..667e219270
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerSocial.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerSocial extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_ColumnSocial');
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerType.php b/plugins/Referrers/Columns/ReferrerType.php
new file mode 100644
index 0000000000..25f84a8fc7
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerType.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Tracker\Request;
+
+class ReferrerType extends Base
+{
+ protected $fieldName = 'referer_type';
+ protected $fieldType = 'TINYINT(1) UNSIGNED NULL';
+
+ public function getName()
+ {
+ return Piwik::translate('Referrers_Type');
+ }
+
+ public function onNewVisit(Request $request, $visit)
+ {
+ $referrerUrl = $request->getParam('urlref');
+ $currentUrl = $request->getParam('url');
+
+ $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+
+ return $information['referer_type'];
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerUrl.php b/plugins/Referrers/Columns/ReferrerUrl.php
new file mode 100644
index 0000000000..c11586b363
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerUrl.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Tracker\Request;
+
+class ReferrerUrl extends Base
+{
+ protected $fieldName = 'referer_url';
+ protected $fieldType = 'TEXT NOT NULL';
+
+ public function getName()
+ {
+ return '';
+ }
+
+ public function onNewVisit(Request $request, $visit)
+ {
+ $referrerUrl = $request->getParam('urlref');
+ $currentUrl = $request->getParam('url');
+
+ $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+
+ return $information['referer_url'];
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerWebsite.php b/plugins/Referrers/Columns/ReferrerWebsite.php
new file mode 100644
index 0000000000..f8b72c32ba
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerWebsite.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerWebsite extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_ColumnWebsite');
+ }
+}
diff --git a/plugins/Referrers/Columns/ReferrerWebsitePage.php b/plugins/Referrers/Columns/ReferrerWebsitePage.php
new file mode 100644
index 0000000000..48d1b3c331
--- /dev/null
+++ b/plugins/Referrers/Columns/ReferrerWebsitePage.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\Plugins\Referrers\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\VisitDimension;
+
+class ReferrerWebsitePage extends VisitDimension
+{
+ public function getName()
+ {
+ return Piwik::translate('Referrers_ColumnWebsitePage');
+ }
+}