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/VisitsSummary/Reports/Get.php')
-rw-r--r--plugins/VisitsSummary/Reports/Get.php147
1 files changed, 146 insertions, 1 deletions
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();