diff options
Diffstat (limited to 'plugins/VisitsSummary')
-rw-r--r-- | plugins/VisitsSummary/API.php | 3 | ||||
-rw-r--r-- | plugins/VisitsSummary/Controller.php | 134 | ||||
-rw-r--r-- | plugins/VisitsSummary/Menu.php | 20 | ||||
-rw-r--r-- | plugins/VisitsSummary/Reports/Get.php | 147 | ||||
-rw-r--r-- | plugins/VisitsSummary/Widgets.php | 22 | ||||
-rw-r--r-- | plugins/VisitsSummary/Widgets/Index.php | 47 | ||||
-rw-r--r-- | plugins/VisitsSummary/lang/en.json | 30 |
7 files changed, 234 insertions, 169 deletions
diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php index b80c505fbb..c46bd93b7b 100644 --- a/plugins/VisitsSummary/API.php +++ b/plugins/VisitsSummary/API.php @@ -12,6 +12,7 @@ use Piwik\Archive; use Piwik\Metrics\Formatter; use Piwik\Piwik; use Piwik\Plugin\Report; +use Piwik\Plugin\Reports; use Piwik\SettingsPiwik; /** @@ -29,7 +30,7 @@ class API extends \Piwik\Plugin\API $requestedColumns = Piwik::getArrayFromApiParameter($columns); - $report = Report::factory("VisitsSummary", "get"); + $report = Reports::factory("VisitsSummary", "get"); $columns = $report->getMetricsRequiredForReport($this->getCoreColumns($period), $requestedColumns); $dataTable = $archive->getDataTableFromNumeric($columns); diff --git a/plugins/VisitsSummary/Controller.php b/plugins/VisitsSummary/Controller.php index 336ee26937..ca141b7ed8 100644 --- a/plugins/VisitsSummary/Controller.php +++ b/plugins/VisitsSummary/Controller.php @@ -12,8 +12,9 @@ use Piwik\API\Request; use Piwik\Common; use Piwik\DataTable; use Piwik\DataTable\Row; +use Piwik\FrontController; use Piwik\Piwik; -use Piwik\Plugins\Actions\API as APIActions; +use Piwik\Plugins\CoreVisualizations\Visualizations\Sparklines; use Piwik\Site; use Piwik\Translation\Translator; use Piwik\View; @@ -35,38 +36,32 @@ class Controller extends \Piwik\Plugin\Controller parent::__construct(); } - public function index() + /** + * @deprecated used to be a widgetized URL. There to not break widget URLs + */ + public function getSparklines() { - $view = new View('@VisitsSummary/index'); - $this->setPeriodVariablesView($view); - $view->graphEvolutionVisitsSummary = $this->getEvolutionGraph(array(), array('nb_visits'), 'getIndexGraph'); - $this->setSparklinesAndNumbers($view); - return $view->render(); - } + $_GET['forceView'] = '1'; + $_GET['viewDataTable'] = Sparklines::ID; - // sparkline.js:81 dataTable.trigger('reload', …); does not remove the old headline, - // so when updating this graph (such as when selecting a different metric) - // ONLY the graph should be returned - public function getIndexGraph() - { - return $this->getEvolutionGraph(array(), array(), __FUNCTION__); + return FrontController::getInstance()->fetchDispatch('VisitsSummary', 'get'); } - public function getSparklines() + /** + * @deprecated used to be a widgetized URL. There to not break widget URLs + */ + public function index() { - $view = new View('@VisitsSummary/getSparklines'); - $this->setPeriodVariablesView($view); - $this->setSparklinesAndNumbers($view); - return $view->render(); + $_GET['containerId'] = 'VisitOverviewWithGraph'; + + return FrontController::getInstance()->fetchDispatch('CoreHome', 'renderWidgetContainer'); } - public function getEvolutionGraph(array $columns = array(), array $defaultColumns = array(), $callingAction = __FUNCTION__) + public function getEvolutionGraph() { - if (empty($columns)) { - $columns = Common::getRequestVar('columns', false); - if (false !== $columns) { - $columns = Piwik::getArrayFromApiParameter($columns); - } + $columns = Common::getRequestVar('columns', false); + if (false !== $columns) { + $columns = Piwik::getArrayFromApiParameter($columns); } $documentation = $this->translator->translate('VisitsSummary_VisitsSummaryDocumentation') . '<br />' @@ -116,11 +111,11 @@ class Controller extends \Piwik\Plugin\Controller } // $callingAction may be specified to distinguish between // "VisitsSummary_WidgetLastVisits" and "VisitsSummary_WidgetOverviewGraph" - $view = $this->getLastUnitGraphAcrossPlugins($this->pluginName, $callingAction, $columns, + $view = $this->getLastUnitGraphAcrossPlugins($this->pluginName, __FUNCTION__, $columns, $selectableColumns, $documentation); - if (empty($view->config->columns_to_display) && !empty($defaultColumns)) { - $view->config->columns_to_display = $defaultColumns; + if (empty($view->config->columns_to_display)) { + $view->config->columns_to_display = array('nb_visits'); } return $this->renderView($view); @@ -137,87 +132,4 @@ class Controller extends \Piwik\Plugin\Controller return empty($result) ? new DataTable() : $result; } - - public static function getVisits() - { - $requestString = "method=VisitsSummary.getVisits" . - "&format=original" . - "&disable_generic_filters=1"; - $request = new Request($requestString); - return $request->process(); - } - - protected function setSparklinesAndNumbers($view) - { - $view->urlSparklineNbVisits = $this->getUrlSparkline('getEvolutionGraph', array('columns' => $view->displayUniqueVisitors ? array('nb_visits', 'nb_uniq_visitors') : array('nb_visits'))); - $view->urlSparklineNbUsers = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_users'))); - $view->urlSparklineNbPageviews = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_pageviews', 'nb_uniq_pageviews'))); - $view->urlSparklineNbDownloads = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_downloads', 'nb_uniq_downloads'))); - $view->urlSparklineNbOutlinks = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_outlinks', 'nb_uniq_outlinks'))); - $view->urlSparklineAvgVisitDuration = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_time_on_site'))); - $view->urlSparklineMaxActions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('max_actions'))); - $view->urlSparklineActionsPerVisit = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_actions_per_visit'))); - $view->urlSparklineBounceRate = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('bounce_rate'))); - $view->urlSparklineAvgGenerationTime = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('avg_time_generation'))); - - $idSite = Common::getRequestVar('idSite'); - $displaySiteSearch = Site::isSiteSearchEnabledFor($idSite); - if ($displaySiteSearch) { - $view->urlSparklineNbSearches = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_searches', 'nb_keywords'))); - } - $view->displaySiteSearch = $displaySiteSearch; - - $dataTableVisit = self::getVisitsSummary(); - $dataRow = $dataTableVisit->getRowsCount() == 0 ? new Row() : $dataTableVisit->getFirstRow(); - $view->nbUniqVisitors = (int)$dataRow->getColumn('nb_uniq_visitors'); - $view->nbUsers = (int)$dataRow->getColumn('nb_users'); - $nbVisits = (int)$dataRow->getColumn('nb_visits'); - $view->nbVisits = $nbVisits; - - $view->averageVisitDuration = $dataRow->getColumn('avg_time_on_site'); - $view->bounceRate = $dataRow->getColumn('bounce_rate'); - $view->maxActions = (int)$dataRow->getColumn('max_actions'); - $view->nbActionsPerVisit = $dataRow->getColumn('nb_actions_per_visit'); - - if (Common::isActionsPluginEnabled()) { - $view->showActionsPluginReports = true; - - $dataTableActions = Request::processRequest("Actions.get", array( - 'idSite' => $idSite, - 'period' => Common::getRequestVar('period'), - 'date' => Common::getRequestVar('date'), - 'segment' => Request::getRawSegmentFromRequest() - ), $defaultParams = array()); - - $dataActionsRow = - $dataTableActions->getRowsCount() == 0 ? new Row() : $dataTableActions->getFirstRow(); - - $view->nbPageviews = (int)$dataActionsRow->getColumn('nb_pageviews'); - $view->nbUniquePageviews = (int)$dataActionsRow->getColumn('nb_uniq_pageviews'); - $view->nbDownloads = (int)$dataActionsRow->getColumn('nb_downloads'); - $view->nbUniqueDownloads = (int)$dataActionsRow->getColumn('nb_uniq_downloads'); - $view->nbOutlinks = (int)$dataActionsRow->getColumn('nb_outlinks'); - $view->nbUniqueOutlinks = (int)$dataActionsRow->getColumn('nb_uniq_outlinks'); - $view->averageGenerationTime = $dataActionsRow->getColumn('avg_time_generation'); - - if ($displaySiteSearch) { - $view->nbSearches = (int)$dataActionsRow->getColumn('nb_searches'); - $view->nbKeywords = (int)$dataActionsRow->getColumn('nb_keywords'); - } - - // backward compatibility: - // show actions if the finer metrics are not archived - $view->showOnlyActions = false; - if ($dataActionsRow->getColumn('nb_pageviews') - + $dataActionsRow->getColumn('nb_downloads') - + $dataActionsRow->getColumn('nb_outlinks') == 0 - && $dataRow->getColumn('nb_actions') > 0 - ) { - $view->showOnlyActions = true; - $view->nbActions = $dataRow->getColumn('nb_actions'); - $view->urlSparklineNbActions = $this->getUrlSparkline('getEvolutionGraph', array('columns' => array('nb_actions'))); - } - } - - } } diff --git a/plugins/VisitsSummary/Menu.php b/plugins/VisitsSummary/Menu.php deleted file mode 100644 index 1b87e46be9..0000000000 --- a/plugins/VisitsSummary/Menu.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -/** - * Piwik - free/libre analytics platform - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - * - */ -namespace Piwik\Plugins\VisitsSummary; - -use Piwik\Menu\MenuReporting; - -class Menu extends \Piwik\Plugin\Menu -{ - public function configureReportingMenu(MenuReporting $menu) - { - $menu->addVisitorsItem('', array('module' => 'VisitsSummary', 'action' => 'index'), 10); - $menu->addVisitorsItem('General_Overview', array('module' => 'VisitsSummary', 'action' => 'index'), 1); - } -} diff --git a/plugins/VisitsSummary/Reports/Get.php b/plugins/VisitsSummary/Reports/Get.php index 55696873be..7fb95d2950 100644 --- a/plugins/VisitsSummary/Reports/Get.php +++ b/plugins/VisitsSummary/Reports/Get.php @@ -8,11 +8,23 @@ */ namespace Piwik\Plugins\VisitsSummary\Reports; +use Piwik\Common; +use Piwik\Container\StaticContainer; +use Piwik\DataTable; use Piwik\DataTable\DataTableInterface; +use Piwik\Metrics\Formatter; use Piwik\Piwik; +use Piwik\Plugin\ViewDataTable; use Piwik\Plugins\CoreHome\Columns\Metrics\ActionsPerVisit; use Piwik\Plugins\CoreHome\Columns\Metrics\AverageTimeOnSite; use Piwik\Plugins\CoreHome\Columns\Metrics\BounceRate; +use Piwik\Plugins\CoreHome\Columns\UserId; +use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution; +use Piwik\Plugins\CoreVisualizations\Visualizations\Sparklines; +use Piwik\Report\ReportWidgetFactory; +use Piwik\SettingsPiwik; +use Piwik\Site; +use Piwik\Widget\WidgetsList; class Get extends \Piwik\Plugin\Report { @@ -21,7 +33,7 @@ class Get extends \Piwik\Plugin\Report protected function init() { parent::init(); - $this->category = 'VisitsSummary_VisitsSummary'; + $this->categoryId = 'General_Visitors'; $this->name = Piwik::translate('VisitsSummary_VisitsSummary'); $this->documentation = ''; // TODO $this->processedMetrics = array( @@ -36,12 +48,145 @@ class Get extends \Piwik\Plugin\Report 'nb_actions', 'max_actions' ); + $this->subcategoryId = 'General_Overview'; // Used to process metrics, not displayed/used directly // 'sum_visit_length', // 'nb_visits_converted', $this->order = 1; } + public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory) + { + $widgetsList->addWidgetConfig( + $factory->createWidget() + ->setName('VisitsSummary_WidgetLastVisits') + ->forceViewDataTable(Evolution::ID) + ->setAction('getEvolutionGraph') + ->setOrder(5) + ); + + $widgetsList->addWidgetConfig( + $factory->createWidget() + ->setName('VisitsSummary_WidgetVisits') + ->forceViewDataTable(Sparklines::ID) + ->setOrder(10) + ); + } + + public function configureView(ViewDataTable $view) + { + if ($view->isViewDataTableId(Sparklines::ID)) { + /** @var Sparklines $view */ + $view->requestConfig->apiMethodToRequestDataTable = 'API.get'; + $this->addSparklineColumns($view); + $view->config->addTranslations($this->getSparklineTranslations()); + $view->config->filters[] = function (DataTable $table) use ($view) { + $firstRow = $table->getFirstRow(); + + if (($firstRow->getColumn('nb_pageviews') + + $firstRow->getColumn('nb_downloads') + + $firstRow->getColumn('nb_outlinks')) == 0 + && $firstRow->getColumn('nb_actions') > 0) { + $view->config->removeSparklineMetric(array('nb_downloads', 'nb_uniq_downloads')); + $view->config->removeSparklineMetric(array('nb_outlinks', 'nb_uniq_outlinks')); + $view->config->removeSparklineMetric(array('nb_pageviews', 'nb_uniq_pageviews')); + $view->config->removeSparklineMetric(array('nb_searches', 'nb_keywords')); + } else { + $view->config->removeSparklineMetric(array('nb_actions')); + } + + $nbUsers = $firstRow->getColumn('nb_users'); + if (!is_numeric($nbUsers) || 0 >= $nbUsers) { + $view->config->replaceSparklineMetric(array('nb_users'), ''); + } + + $avgGenerationTime = $firstRow->getColumn('avg_time_generation'); + if (false === $avgGenerationTime) { + // fix avgGenerationTime is not formatted if value is false + /** @var Formatter $formatter */ + $formatter = StaticContainer::get('Piwik\Metrics\Formatter'); + $avgGenerationTime = $formatter->getPrettyTimeFromSeconds($avgGenerationTime, true); + $firstRow->setColumn('avg_time_generation', $avgGenerationTime); + } + }; + } + } + + private function getSparklineTranslations() + { + $translations = array( + 'nb_actions' => 'NbActionsDescription', + 'nb_visits' => 'NbVisitsDescription', + 'nb_users' => 'NbUsersDescription', + 'nb_uniq_visitors' => 'NbUniqueVisitors', + 'avg_time_generation' => 'AverageGenerationTime', + 'avg_time_on_site' => 'AverageVisitDuration', + 'max_actions' => 'MaxNbActions', + 'nb_actions_per_visit' => 'NbActionsPerVisit', + 'nb_downloads' => 'NbDownloadsDescription', + 'nb_uniq_downloads' => 'NbUniqueDownloadsDescription', + 'nb_outlinks' => 'NbOutlinksDescription', + 'nb_uniq_outlinks' => 'NbUniqueOutlinksDescription', + 'nb_keywords' => 'NbKeywordsDescription', + 'nb_searches' => 'NbSearchesDescription', + 'nb_pageviews' => 'NbPageviewsDescription', + 'nb_uniq_pageviews' => 'NbUniquePageviewsDescription', + 'bounce_rate' => 'NbVisitsBounced', + ); + + foreach ($translations as $metric => $key) { + $translations[$metric] = Piwik::translate('VisitsSummary_' . $key); + } + + return $translations; + } + + private function addSparklineColumns(Sparklines $view) + { + $currentPeriod = Common::getRequestVar('period'); + $currentIdSite = Common::getRequestVar('idSite'); + $currentDate = Common::getRequestVar('date'); + $displayUniqueVisitors = SettingsPiwik::isUniqueVisitorsEnabled($currentPeriod); + + $isActionPluginEnabled = Common::isActionsPluginEnabled(); + + $view->config->addSparklineMetric($displayUniqueVisitors ? array('nb_visits', 'nb_uniq_visitors') : array('nb_visits'), 5); + + if ($isActionPluginEnabled) { + $view->config->addSparklineMetric(array('nb_actions'), 10); // either actions or pageviews will be displayed + $view->config->addSparklineMetric(array('nb_pageviews', 'nb_uniq_pageviews'), 20); + } else { + // make sure to still create a div on the right side for this, just leave it empty + $view->config->addPlaceholder(10); + } + + $userId = new UserId(); + if ($userId->isUsedInAtLeastOneSite($currentIdSite, $currentPeriod, $currentDate)) { + $view->config->addSparklineMetric(array('nb_users'), 30); + $view->config->addPlaceholder(31); + } + + $view->config->addSparklineMetric(array('avg_time_on_site'), 40); + + $idSite = Common::getRequestVar('idSite'); + if ($isActionPluginEnabled && Site::isSiteSearchEnabledFor($idSite)) { + $view->config->addSparklineMetric(array('nb_searches', 'nb_keywords'), 50); + } else { + // make sure to still create a div on the right side for this, just leave it empty + $view->config->addPlaceholder(50); + } + + $view->config->addSparklineMetric(array('bounce_rate'), 60); + + if ($isActionPluginEnabled) { + $view->config->addSparklineMetric(array('nb_downloads', 'nb_uniq_downloads'), 70); + $view->config->addSparklineMetric(array('nb_actions_per_visit'), 71); + $view->config->addSparklineMetric(array('nb_outlinks', 'nb_uniq_outlinks'), 72); + $view->config->addSparklineMetric(array('avg_time_generation'), 73); + $view->config->addSparklineMetric(array('max_actions'), 74); + } + } + public function getMetrics() { $metrics = parent::getMetrics(); diff --git a/plugins/VisitsSummary/Widgets.php b/plugins/VisitsSummary/Widgets.php deleted file mode 100644 index 5ec7eef56e..0000000000 --- a/plugins/VisitsSummary/Widgets.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php -/** - * Piwik - free/libre analytics platform - * - * @link http://piwik.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - * - */ -namespace Piwik\Plugins\VisitsSummary; - -class Widgets extends \Piwik\Plugin\Widgets -{ - protected $category = 'VisitsSummary_VisitsSummary'; - - public function init() - { - $this->addWidget('VisitsSummary_WidgetLastVisits', 'getEvolutionGraph', array('columns' => array('nb_visits'))); - $this->addWidget('VisitsSummary_WidgetVisits', 'getSparklines'); - $this->addWidget('VisitsSummary_WidgetOverviewGraph', 'index'); - } - -} diff --git a/plugins/VisitsSummary/Widgets/Index.php b/plugins/VisitsSummary/Widgets/Index.php new file mode 100644 index 0000000000..1b39fad7c6 --- /dev/null +++ b/plugins/VisitsSummary/Widgets/Index.php @@ -0,0 +1,47 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ +namespace Piwik\Plugins\VisitsSummary\Widgets; + +use Piwik\Plugin\Report; +use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution; +use Piwik\Plugins\CoreVisualizations\Visualizations\Sparklines; +use Piwik\Plugin\Reports; +use Piwik\Report\ReportWidgetFactory; +use Piwik\Widget\WidgetsList; + +class Index extends \Piwik\Widget\WidgetContainerConfig +{ + protected $categoryId = 'General_Visitors'; + protected $name = 'VisitsSummary_WidgetOverviewGraph'; + protected $id = 'VisitOverviewWithGraph'; + protected $isWidgetizable = true; + + public function isEnabled() + { + return Reports::factory('VisitsSummary', 'get')->isEnabled(); + } + + public function getWidgetConfigs() + { + $report = Reports::factory('VisitsSummary', 'get'); + + $factory = new ReportWidgetFactory($report); + $widgets = array(); + + $list = new WidgetsList(); + $report->configureWidgets($list, $factory); + + foreach ($list->getWidgetConfigs() as $config) { + $config->setIsNotWidgetizable(); + $widgets[] = $config; + } + + return $widgets; + } +} diff --git a/plugins/VisitsSummary/lang/en.json b/plugins/VisitsSummary/lang/en.json index e4a46bc5ae..fc9d3c4777 100644 --- a/plugins/VisitsSummary/lang/en.json +++ b/plugins/VisitsSummary/lang/en.json @@ -1,22 +1,24 @@ { "VisitsSummary": { - "AverageGenerationTime": "%s average generation time", - "AverageVisitDuration": "%s average visit duration", + "AverageGenerationTime": "average generation time", + "AverageVisitDuration": "average visit duration", "GenerateQueries": "%s queries executed", "GenerateTime": "%s seconds to generate the page", - "MaxNbActions": "%s max actions in one visit", + "MaxNbActions": "max actions in one visit", "NbActionsDescription": "%s actions", - "NbActionsPerVisit": "%s actions (page views, downloads, outlinks and internal site searches) per visit", - "NbDownloadsDescription": "%s downloads", - "NbKeywordsDescription": "%s unique keywords", - "NbOutlinksDescription": "%s outlinks", - "NbPageviewsDescription": "%s pageviews", - "NbSearchesDescription": "%s total searches on your website", - "NbUniqueDownloadsDescription": "%s unique downloads", - "NbUniqueOutlinksDescription": "%s unique outlinks", - "NbUniquePageviewsDescription": "%s unique pageviews", - "NbUniqueVisitors": "%s unique visitors", - "NbVisitsBounced": "%s visits have bounced (left the website after one page)", + "NbActionsPerVisit": "actions (page views, downloads, outlinks and internal site searches) per visit", + "NbDownloadsDescription": "downloads", + "NbKeywordsDescription": "unique keywords", + "NbOutlinksDescription": "outlinks", + "NbPageviewsDescription": "pageviews", + "NbSearchesDescription": "total searches on your website", + "NbUniqueDownloadsDescription": "unique downloads", + "NbUniqueOutlinksDescription": "unique outlinks", + "NbUniquePageviewsDescription": "unique pageviews", + "NbUniqueVisitors": "unique visitors", + "NbUsersDescription": "users", + "NbVisitsDescription": "visits", + "NbVisitsBounced": "visits have bounced (left the website after one page)", "PluginDescription": "Reports general analytics metrics: visits, unique visitors, number of actions, bounce rate, etc.", "VisitsSummary": "Visits Summary", "VisitsSummaryDocumentation": "This is an overview of the visit evolution.", |