1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-21 22:47:43 +00:00
Files
matomo/plugins/Actions/Actions.php
Michal Kleiner 9a3ef94df6 [Coding Style] Enable rule PSR12.Files.FileHeader + unify file headers (#22132)
* [Coding Style] Enable rule PSR12.Files.FileHeader

* Apply CS

* Replace Piwik with Matomo in file headers

* Unify file headers (position, no. of lines, https links)

* Rebuild dist files

* Apply CS

* Fix system test that relies on line numbers in a file that had the file header updated

---------

Co-authored-by: Stefan Giehl <stefan@matomo.org>
2024-04-20 20:50:47 +02:00

199 خطوط
6.9 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Actions;
use Piwik\Columns\Dimension;
use Piwik\Site;
use Piwik\Plugin\ViewDataTable;
use Piwik\Tracker\Action;
/**
* Actions plugin
*
* Reports about the page views, the outlinks and downloads.
*
*/
class Actions extends \Piwik\Plugin
{
public const ACTIONS_REPORT_ROWS_DISPLAY = 100;
/**
* @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'ViewDataTable.configure' => 'configureViewDataTable',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Insights.addReportToOverview' => 'addReportToInsightsOverview',
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'Metrics.getDefaultMetricSemanticTypes' => 'addMetricSemanticTypes',
'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
'Actions.addActionTypes' => 'addActionTypes'
);
}
public function addMetricSemanticTypes(array &$types): void
{
$metrics = array(
'nb_pageviews' => Dimension::TYPE_NUMBER,
'nb_uniq_pageviews' => Dimension::TYPE_NUMBER,
'nb_downloads' => Dimension::TYPE_NUMBER,
'nb_uniq_downloads' => Dimension::TYPE_NUMBER,
'nb_outlinks' => Dimension::TYPE_NUMBER,
'nb_uniq_outlinks' => Dimension::TYPE_NUMBER,
'nb_searches' => Dimension::TYPE_NUMBER,
'nb_keywords' => Dimension::TYPE_NUMBER,
'entry_nb_visits' => Dimension::TYPE_NUMBER,
'entry_bounce_count' => Dimension::TYPE_NUMBER,
'exit_nb_visits' => Dimension::TYPE_NUMBER,
'nb_pages_per_search' => Dimension::TYPE_NUMBER,
'nb_hits_following_search' => Dimension::TYPE_NUMBER,
);
$types = array_merge($types, $metrics);
}
public function addMetricTranslations(&$translations)
{
$metrics = array(
'nb_pageviews' => 'General_ColumnPageviews',
'nb_uniq_pageviews' => 'General_ColumnUniquePageviews',
'nb_downloads' => 'General_Downloads',
'nb_uniq_downloads' => 'Actions_ColumnUniqueDownloads',
'nb_outlinks' => 'General_Outlinks',
'nb_uniq_outlinks' => 'Actions_ColumnUniqueOutlinks',
'nb_searches' => 'Actions_ColumnSearches',
'nb_keywords' => 'Actions_ColumnSiteSearchKeywords',
'avg_time_generation' => 'General_ColumnAverageGenerationTime',
'exit_rate' => 'General_ColumnExitRate',
'entry_nb_visits' => 'General_ColumnEntrances',
'entry_bounce_count' => 'General_ColumnBounces',
'exit_nb_visits' => 'General_ColumnExits',
'nb_pages_per_search' => 'Actions_ColumnPagesPerSearch',
'nb_hits_following_search' => 'General_ColumnViewedAfterSearch',
);
$translations = array_merge($translations, $metrics);
}
public function addMetricDocumentationTranslations(&$translations)
{
$metrics = array(
'nb_pageviews' => 'General_ColumnPageviewsDocumentation',
'nb_uniq_pageviews' => 'General_ColumnUniquePageviewsDocumentation',
'nb_downloads' => 'Actions_ColumnClicksDocumentation',
'nb_uniq_downloads' => 'Actions_ColumnUniqueClicksDocumentation',
'nb_outlinks' => 'Actions_ColumnClicksDocumentation',
'nb_uniq_outlinks' => 'Actions_ColumnUniqueClicksDocumentation',
'nb_searches' => 'Actions_ColumnSearchesDocumentation',
'avg_time_generation' => 'General_ColumnAverageGenerationTimeDocumentation',
'entry_nb_visits' => 'General_ColumnEntrancesDocumentation',
'entry_bounce_count' => 'General_ColumnBouncesDocumentation',
'exit_nb_visits' => 'General_ColumnExitsDocumentation',
'exit_rate' => 'General_ColumnExitRateDocumentation'
);
$translations = array_merge($translations, $metrics);
}
public function addReportToInsightsOverview(&$reports)
{
$reports['Actions_getPageUrls'] = array();
$reports['Actions_getPageTitles'] = array();
$reports['Actions_getDownloads'] = array('flat' => 1);
}
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "plugins/Actions/javascripts/actionsDataTable.js";
$jsFiles[] = "plugins/Actions/javascripts/rowactions.js";
}
public function addActionTypes(&$types)
{
$types[] = [
'id' => Action::TYPE_PAGE_URL,
'name' => 'pageviews'
];
$types[] = [
'id' => Action::TYPE_CONTENT,
'name' => 'contents'
];
$types[] = [
'id' => Action::TYPE_SITE_SEARCH,
'name' => 'sitesearches'
];
$types[] = [
'id' => Action::TYPE_EVENT,
'name' => 'events'
];
$types[] = [
'id' => Action::TYPE_OUTLINK,
'name' => 'outlinks'
];
$types[] = [
'id' => Action::TYPE_DOWNLOAD,
'name' => 'downloads'
];
}
public function isSiteSearchEnabled($idSites, $idSite)
{
$idSites = Site::getIdSitesFromIdSitesString($idSites, true);
if (!empty($idSite)) {
$idSites[] = $idSite;
}
if (empty($idSites)) {
return false;
}
foreach ($idSites as $idSite) {
if (!Site::isSiteSearchEnabledFor($idSite)) {
return false;
}
}
return true;
}
public function configureViewDataTable(ViewDataTable $view)
{
if ($this->pluginName == $view->requestConfig->getApiModuleToRequest()) {
if ($view->isRequestingSingleDataTable()) {
// make sure custom visualizations are shown on actions reports
$view->config->show_all_views_icons = true;
$view->config->show_bar_chart = false;
$view->config->show_pie_chart = false;
$view->config->show_tag_cloud = false;
}
}
}
/**
* @param \Piwik\DataTable $dataTable
* @param int $level
*/
public static function setDataTableRowLevels($dataTable, $level = 0)
{
foreach ($dataTable->getRows() as $row) {
$row->setMetadata('css_class', 'level' . $level);
$subtable = $row->getSubtable();
if ($subtable) {
self::setDataTableRowLevels($subtable, $level + 1);
}
}
}
}