diff options
Diffstat (limited to 'plugins/Referrers/Reports/Get.php')
-rw-r--r-- | plugins/Referrers/Reports/Get.php | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/plugins/Referrers/Reports/Get.php b/plugins/Referrers/Reports/Get.php new file mode 100644 index 0000000000..07c429cc6e --- /dev/null +++ b/plugins/Referrers/Reports/Get.php @@ -0,0 +1,200 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\Referrers\Reports; + + +use Piwik\API\Request; +use Piwik\Common; +use Piwik\DataTable; +use Piwik\DataTable\Filter\CalculateEvolutionFilter; +use Piwik\DataTable\Filter\ColumnCallbackAddColumnPercentage; +use Piwik\Date; +use Piwik\NumberFormatter; +use Piwik\Period; +use Piwik\Period\Factory; +use Piwik\Period\Month; +use Piwik\Period\Range; +use Piwik\Piwik; +use Piwik\Plugin\ViewDataTable; +use Piwik\Plugins\CoreVisualizations\Visualizations\Sparklines; +use Piwik\Plugins\Referrers\Archiver; +use Piwik\Plugins\Referrers\Controller; +use Piwik\Report\ReportWidgetFactory; +use Piwik\Widget\WidgetsList; + +class Get extends Base +{ + const TOTAL_DIRECT_ENTRIES_METRIC_NAME = 'Referrers_directEntries'; + + protected function init() + { + parent::init(); + + $this->name = Piwik::translate('Referrers_ReferrersOverview'); + $this->documentation = ''; + $this->processedMetrics = [ + // none + ]; + $this->metrics = [ + 'Referrers_visitorsFromSearchEngines', + 'Referrers_visitorsFromSearchEngines_percent', + 'Referrers_visitorsFromSocialNetworks', + 'Referrers_visitorsFromSocialNetworks_percent', + 'Referrers_visitorsFromDirectEntry', + 'Referrers_visitorsFromDirectEntry_percent', + 'Referrers_visitorsFromWebsites', + 'Referrers_visitorsFromWebsites_percent', + 'Referrers_visitorsFromCampaigns', + 'Referrers_visitorsFromCampaigns_percent', + Archiver::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME, + Archiver::METRIC_DISTINCT_SOCIAL_NETWORK_RECORD_NAME, + Archiver::METRIC_DISTINCT_WEBSITE_RECORD_NAME, + Archiver::METRIC_DISTINCT_KEYWORD_RECORD_NAME, + Archiver::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME, + ]; + } + + public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory) + { + // empty + } + + public function configureView(ViewDataTable $view) + { + if ($view->isViewDataTableId(Sparklines::ID) + && $view instanceof Sparklines + ) { + $this->addSparklineColumns($view); + $view->config->addTranslations($this->getSparklineTranslations()); + + // add evolution values + list($lastPeriodDate, $ignore) = Range::getLastDate(); + if ($lastPeriodDate !== false) { + $date = Common::getRequestVar('date'); + + /** @var DataTable $previousData */ + $previousData = Request::processRequest('Referrers.get', ['date' => $lastPeriodDate]); + $previousDataRow = $previousData->getFirstRow(); + + $view->config->compute_evolution = function ($columns) use ($date, $lastPeriodDate, $previousDataRow) { + $value = reset($columns); + $columnName = key($columns); + + if (!in_array($columnName, $this->metrics)) { + return; + } + + $pastValue = $previousDataRow->getColumn($columnName); + + $currentValueFormatted = NumberFormatter::getInstance()->format($value); + $pastValueFormatted = NumberFormatter::getInstance()->format($pastValue); + + return [ + 'currentValue' => $value, + 'pastValue' => $pastValue, + 'tooltip' => Piwik::translate('General_EvolutionSummaryGeneric', array( + Piwik::translate('General_NVisits', $currentValueFormatted), + $date, + Piwik::translate('General_NVisits', $pastValueFormatted), + $lastPeriodDate, + CalculateEvolutionFilter::calculate($value, $pastValue, $precision = 1) + )), + ]; + }; + } + } + } + + /** + * Returns the pretty date representation + * + * @param $date string + * @param $period string + * @return string Pretty date + */ + public static function getPrettyDate($date, $period) + { + return self::getCalendarPrettyDate(Factory::build($period, Date::factory($date))); + } + + /** + * Returns a prettified date string for use in period selector widget. + * + * @param Period $period The period to return a pretty string for. + * @return string + * @api + */ + public static function getCalendarPrettyDate($period) + { + if ($period instanceof Month) { + // show month name when period is for a month + + return $period->getLocalizedLongString(); + } else { + return $period->getPrettyString(); + } + } + + private function addSparklineColumns(Sparklines $view) + { + $directEntry = Controller::getTranslatedReferrerTypeLabel(Common::REFERRER_TYPE_DIRECT_ENTRY); + $directEntry = urlencode($directEntry); + + $website = Controller::getTranslatedReferrerTypeLabel(Common::REFERRER_TYPE_WEBSITE); + $website = urlencode($website); + + $searchEngine = Controller::getTranslatedReferrerTypeLabel(Common::REFERRER_TYPE_SEARCH_ENGINE); + $searchEngine = urlencode($searchEngine); + + $campaigns = Controller::getTranslatedReferrerTypeLabel(Common::REFERRER_TYPE_CAMPAIGN); + $campaigns = urlencode($campaigns); + + $socialNetworks = Controller::getTranslatedReferrerTypeLabel(Common::REFERRER_TYPE_SOCIAL_NETWORK); + $socialNetworks = urlencode($socialNetworks); + + $total = Piwik::translate('General_Total'); + + $view->config->addSparklineMetric(['Referrers_visitorsFromDirectEntry', 'Referrers_visitorsFromDirectEntry_percent'], 10, ['rows' => $directEntry . ',' . $total]); + $view->config->addSparklineMetric(['Referrers_visitorsFromWebsites', 'Referrers_visitorsFromWebsites_percent'], 20, ['rows' => $website . ',' . $total]); + $view->config->addSparklineMetric(['Referrers_visitorsFromSearchEngines', 'Referrers_visitorsFromSearchEngines_percent'], 30, ['rows' => $searchEngine . ',' . $total]); + $view->config->addSparklineMetric(['Referrers_visitorsFromSocialNetworks', 'Referrers_visitorsFromSocialNetworks_percent'], 40, ['rows' => $socialNetworks . ',' . $total]); + $view->config->addSparklineMetric(['Referrers_visitorsFromCampaigns', 'Referrers_visitorsFromCampaigns_percent'], 50, ['rows' => $campaigns . ',' . $total]); + $view->config->addSparklineMetric([Archiver::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME], 50); + $view->config->addSparklineMetric([Archiver::METRIC_DISTINCT_SOCIAL_NETWORK_RECORD_NAME], 60); + $view->config->addSparklineMetric([Archiver::METRIC_DISTINCT_WEBSITE_RECORD_NAME], 70); + $view->config->addSparklineMetric([Archiver::METRIC_DISTINCT_KEYWORD_RECORD_NAME], 80); + $view->config->addSparklineMetric([Archiver::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME], 90); + } + + private function getSparklineTranslations() + { + $translations = [ + 'Referrers_visitorsFromDirectEntry' => Piwik::translate('Referrers_TypeDirectEntries'), + 'Referrers_visitorsFromWebsites' => Piwik::translate('Referrers_TypeWebsites'), + 'Referrers_visitorsFromSearchEngines' => Piwik::translate('Referrers_TypeSearchEngines'), + 'Referrers_visitorsFromSocialNetworks' => Piwik::translate('Referrers_TypeSocialNetworks'), + 'Referrers_visitorsFromCampaigns' => Piwik::translate('Referrers_TypeCampaigns'), + ]; + + foreach ($translations as $name => $label) { + $translations[$name . '_percent'] = Piwik::translate('Referrers_XPercentOfVisits'); + } + + $translations = array_merge($translations, [ + Archiver::METRIC_DISTINCT_SEARCH_ENGINE_RECORD_NAME => Piwik::translate('Referrers_DistinctSearchEngines'), + Archiver::METRIC_DISTINCT_SOCIAL_NETWORK_RECORD_NAME => Piwik::translate('Referrers_DistinctSocialNetworks'), + Archiver::METRIC_DISTINCT_WEBSITE_RECORD_NAME => Piwik::translate('Referrers_DistinctWebsites'), + Archiver::METRIC_DISTINCT_KEYWORD_RECORD_NAME => Piwik::translate('Referrers_DistinctKeywords'), + Archiver::METRIC_DISTINCT_CAMPAIGN_RECORD_NAME => Piwik::translate('Referrers_DistinctCampaigns'), + ]); + + return $translations; + } +}
\ No newline at end of file |