PDF rausgenommen

This commit is contained in:
aschwarz
2023-01-23 11:03:31 +01:00
parent 82d562a322
commit a6523903eb
28078 changed files with 4247552 additions and 2 deletions

View File

@ -0,0 +1,46 @@
<?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\UserId;
use Piwik\Archive;
use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\DataTable;
use Piwik\DataTable\Row;
/**
* API for plugin UserId. Allows to get User IDs table.
*
* @method static \Piwik\Plugins\UserId\API getInstance()
*/
class API extends \Piwik\Plugin\API
{
/**
* Get a report of all User Ids.
*
* @param int $idSite
*
* @param string $period
* @param int $date
* @param string|bool $segment
*
* @return DataTable
*/
public function getUsers($idSite, $period, $date, $segment = false)
{
Piwik::checkUserHasViewAccess($idSite);
$archive = Archive::build($idSite, $period, $date, $segment);
$dataTable = $archive->getDataTable(Archiver::USERID_ARCHIVE_RECORD);
$dataTable->queueFilter('ReplaceColumnNames');
$dataTable->queueFilter('ReplaceSummaryRowLabel');
return $dataTable;
}
}

View File

@ -0,0 +1,140 @@
<?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\UserId;
use Piwik\Config;
use Piwik\DataArray;
use Piwik\DataTable;
use Piwik\Metrics;
/**
* Archiver that aggregates metrics per user ID (user_id field).
*/
class Archiver extends \Piwik\Plugin\Archiver
{
const USERID_ARCHIVE_RECORD = "UserId_users";
const VISITOR_ID_FIELD = 'idvisitor';
const USER_ID_FIELD = 'user_id';
protected $maximumRowsInDataTableLevelZero;
function __construct($processor)
{
parent::__construct($processor);
$this->maximumRowsInDataTableLevelZero = Config::getInstance()->General['datatable_archiving_maximum_rows_userid_users'];
}
/**
* @var DataArray
*/
protected $arrays;
/**
* Array to save visitor IDs for every user ID met during archiving process. We use it to
* fill metadata before actual inserting rows to DB.
* @var array
*/
protected $visitorIdsUserIdsMap = array();
/**
* Archives data for a day period.
*/
public function aggregateDayReport()
{
$this->arrays = new DataArray();
$this->aggregateUsers();
$this->insertDayReports();
}
/**
* Period archiving: simply sums up daily archives
*/
public function aggregateMultipleReports()
{
$dataTableRecords = array(self::USERID_ARCHIVE_RECORD);
$columnsAggregationOperation = null;
$this->getProcessor()->aggregateDataTableRecords(
$dataTableRecords,
$this->maximumRowsInDataTableLevelZero,
$this->maximumRowsInDataTableLevelZero,
$columnToSort = 'nb_visits',
$columnsAggregationOperation,
$columnsToRenameAfterAggregation = null,
$countRowsRecursive = array());
}
/**
* Used to aggregate daily data per user ID
*/
protected function aggregateUsers()
{
$userIdFieldName = self::USER_ID_FIELD;
$visitorIdFieldName = self::VISITOR_ID_FIELD;
/** @var \Zend_Db_Statement $query */
$query = $this->getLogAggregator()->queryVisitsByDimension(
array(self::USER_ID_FIELD),
"log_visit.$userIdFieldName IS NOT NULL AND log_visit.$userIdFieldName != ''",
array("LOWER(HEX($visitorIdFieldName)) as $visitorIdFieldName")
);
if ($query === false) {
return;
}
$rowsCount = 0;
while ($row = $query->fetch()) {
$rowsCount++;
$this->arrays->sumMetricsVisits($row[$userIdFieldName], $row);
$this->rememberVisitorId($row);
}
}
/**
* Insert aggregated daily data serialized
*
* @throws \Exception
*/
protected function insertDayReports()
{
/** @var DataTable $dataTable */
$dataTable = $this->arrays->asDataTable();
$this->setVisitorIds($dataTable);
$report = $dataTable->getSerialized($this->maximumRowsInDataTableLevelZero, null, Metrics::INDEX_NB_VISITS);
$this->getProcessor()->insertBlobRecord(self::USERID_ARCHIVE_RECORD, $report);
}
/**
* Remember visitor ID per user. We use it to fill metadata before actual inserting rows to DB.
*
* @param array $row
*/
private function rememberVisitorId($row)
{
if (!empty($row[self::USER_ID_FIELD]) && !empty($row[self::VISITOR_ID_FIELD])) {
$this->visitorIdsUserIdsMap[$row[self::USER_ID_FIELD]] = $row[self::VISITOR_ID_FIELD];
}
}
/**
* Fill visitor ID as metadata before actual inserting rows to DB.
*
* @param DataTable $dataTable
*/
private function setVisitorIds(DataTable $dataTable)
{
foreach ($dataTable->getRows() as $row) {
$userId = $row->getColumn('label');
if (isset($this->visitorIdsUserIdsMap[$userId])) {
$row->setMetadata(self::VISITOR_ID_FIELD, $this->visitorIdsUserIdsMap[$userId]);
}
}
}
}

View File

@ -0,0 +1,19 @@
<?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\UserId\Categories;
use Piwik\Category\Subcategory;
class VisitorsUserSubcategory extends Subcategory
{
protected $categoryId = 'General_Visitors';
protected $id = 'UserId_UserReportTitle';
protected $order = 40;
}

View File

@ -0,0 +1,22 @@
<?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\UserId\Columns;
use Piwik\Piwik;
use Piwik\Plugin\Dimension\VisitDimension;
/**
* UserId dimension
*/
class UserId extends VisitDimension
{
protected $nameSingular = 'UserId_UserId';
}

View File

@ -0,0 +1,19 @@
<?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\UserId\Reports;
use Piwik\Plugin\Report;
abstract class Base extends Report
{
protected function init()
{
$this->categoryId = 'General_Visitors';
}
}

View File

@ -0,0 +1,72 @@
<?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\UserId\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
use Piwik\Plugins\UserId\Columns\UserId;
use Piwik\Report\ReportWidgetFactory;
use Piwik\Widget\WidgetsList;
/**
* A report showing all unique user IDs and some aggregated information about them. It also allows
* to open a popover with visitor details
*/
class GetUsers extends Base
{
protected function init()
{
parent::init();
$this->name = Piwik::translate('UserId_UserReportTitle');
$this->subcategoryId = 'UserId_UserReportTitle';
$this->documentation = '';
$this->dimension = new UserId();
$this->metrics = array('label', 'nb_visits', 'nb_actions', 'nb_visits_converted');
$this->supportsFlatten = false;
// This defines in which order your report appears in the mobile app, in the menu and in the list of widgets
$this->order = 9;
}
/**
* @return array
*/
public static function getColumnsToDisplay()
{
return array();
}
/**
* @param ViewDataTable $view
*/
public function configureView(ViewDataTable $view)
{
$view->config->addTranslation('label', Piwik::translate('General_UserId'));
$view->config->addTranslation('nb_visits_converted', Piwik::translate('General_VisitConvertedGoal'));
/*
* Hide most of the table footer actions, leaving only export icons and pagination
*/
$view->config->columns_to_display = $this->metrics;
$view->config->show_all_views_icons = false;
$view->config->show_active_view_icon = false;
$view->config->show_related_reports = false;
$view->config->show_insights = false;
$view->config->show_pivot_by_subtable = false;
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_row_evolution = false;
}
// exclude users with less then 2 visits, when low population filter is active
$view->requestConfig->filter_excludelowpop_value = 2;
}
}

View File

@ -0,0 +1,53 @@
<?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\UserId;
use Piwik\Db;
/**
* Plugin adds a new Users report showing all unique user IDs and some aggregated data
*/
class UserId extends \Piwik\Plugin
{
/**
* Register event observers
*
* @return array
*/
public function registerEvents()
{
return array(
// Add plugin's custom JS files
'AssetManager.getJavaScriptFiles' => 'getJavaScriptFiles',
// Add translations for the client side JS
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
);
}
/**
* Add a custom JS to the page. It adds possibility to open visitor details popover for each
* user ID in a report table
*
* @param $jsFiles
*/
public function getJavaScriptFiles(&$jsFiles)
{
$jsFiles[] = "plugins/UserId/javascripts/rowaction.js";
}
/**
* Add translations for the client side JS
*
* @param $translationKeys
*/
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = "Live_ViewVisitorProfile";
}
}

View File

@ -0,0 +1,73 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
/**
* This file registers the visitor details overlay row action on the user IDs list page.
*/
(function () {
var actionName = 'visitorDetails';
function DataTable_RowActions_VisitorDetails(dataTable) {
this.dataTable = dataTable;
this.actionName = actionName;
this.trEventName = 'piwikTriggerVisitorDetailsAction';
}
DataTable_RowActions_VisitorDetails.prototype = new DataTable_RowAction();
DataTable_RowActions_VisitorDetails.prototype.performAction = function (label, tr, e) {
var visitorId = this.getRowMetadata($(tr)).idvisitor || '';
visitorId = encodeURIComponent(visitorId);
if (visitorId.length > 0) {
DataTable_RowAction.prototype.openPopover.apply(this, ['module=Live&action=getVisitorProfilePopup&visitorId=' + visitorId]);
}
};
DataTable_RowActions_VisitorDetails.prototype.doOpenPopover = function (urlParam) {
Piwik_Popover.createPopupAndLoadUrl(urlParam, _pk_translate('Live_VisitorProfile'), 'visitor-profile-popup');
};
DataTable_RowActions_Registry.register({
name: actionName,
instance: null,
dataTableIcon: 'icon-visitor-profile',
order: 30,
dataTableIconTooltip: [
_pk_translate('Live_ViewVisitorProfile'),
''
],
isAvailableOnReport: function (dataTableParams, undefined) {
return dataTableParams.module == 'UserId';
},
isAvailableOnRow: function (dataTableParams, tr) {
return DataTable_RowAction.prototype.getRowMetadata(tr).hasOwnProperty('idvisitor');
},
createInstance: function (dataTable, param) {
if (dataTable !== null && typeof dataTable.visitorDetailsInstance != 'undefined') {
return dataTable.segmentVisitorLogInstance;
}
var instance = new DataTable_RowActions_VisitorDetails(dataTable);
if (dataTable !== null) {
dataTable.visitorDetailsInstance = instance;
}
this.instance = instance;
return instance;
}
});
})();

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "ተጠቃሚዎች"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "معرّفات المستخدمين"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Карыстачы"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Потребители"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Usuaris"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "ID uživatelů",
"PluginDescription": "Zobrazí reporty uživatel"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Bruger-id",
"UserReportTitle": "Bruger-ider",
"PluginDescription": "Viser brugerrapporter"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Benutzer-ID",
"UserReportTitle": "Benutzer IDs",
"PluginDescription": "Zeigt Benutzer-Berichte"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Αναγνωριστικό χρήστη",
"UserReportTitle": "Αναγνωριστικά χρηστών",
"PluginDescription": "Εμφανίζει τις αναφορές χρηστών"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "User IDs",
"PluginDescription": "Shows user reports"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Identificación",
"UserReportTitle": "Identificadores de usuario",
"PluginDescription": "Muestra informes de usuario"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "IDs de Usuario",
"PluginDescription": "Muestra reportes de usuario"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserId": "KasutajaID"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Erabiltzaileak"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "شناسه های کاربری"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Käyttäjän ID",
"UserReportTitle": "Käyttäjän IDt",
"PluginDescription": "Näyttää käyttäjän raportit"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "ID Utilisateur",
"PluginDescription": "Affiche les rapports utilisateur"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Usuario"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "משתמשים"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "उपयोगकर्ता"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Korisnici"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "felhasználó azonosítók"
}
}

View File

@ -0,0 +1,6 @@
{
"UserId": {
"UserId": "IdPengguna",
"PluginDescription": "Tampilkan laporan pengguna"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Notendur"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Id Utente",
"UserReportTitle": "ID Utente",
"PluginDescription": "Mostra i report utente"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "ユーザー ID",
"UserReportTitle": "ユーザーID",
"PluginDescription": "ユーザーレポートを表示します"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "მომხმარებლები"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "사용자 ID"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Naudotojai"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Lietotāji"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Bruker-ID",
"UserReportTitle": "Bruker IDer",
"PluginDescription": "Vises brukerrapporter"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Gebruiker-ID",
"UserReportTitle": "Gebruiker-ID's",
"PluginDescription": "Toont gebruikersrapporten"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Brukarar"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "ID użytkownika",
"UserReportTitle": "ID użytkownika",
"PluginDescription": "Pokazuje raporty użytkownika"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "Usuário IDs",
"PluginDescription": "Mostra relatórios de usuários"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "IDs do utilizador",
"PluginDescription": "Mostra os relatórios de utilizador"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Utilizatori"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "UserId",
"UserReportTitle": "ID пользователя",
"PluginDescription": "Показать пользовательские отчёты"
}
}

View File

@ -0,0 +1,6 @@
{
"UserId": {
"UserId": "UserId",
"PluginDescription": "Zobraziť reporty užívateľa"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Uporabniki"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "ID përdoruesi",
"UserReportTitle": "ID-ra përdoruesish",
"PluginDescription": "Shfaq raporte përdoruesi"
}
}

View File

@ -0,0 +1,6 @@
{
"UserId": {
"UserId": "Korisnik",
"PluginDescription": "Prikazuje izveštaj po korisniku"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Användar ID",
"UserReportTitle": "Besökar-ID",
"PluginDescription": "Visa användarrapporter"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "பாவனையாளர்கள்"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "వాడుకరులు"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "ผู้ใช้"
}
}

View File

@ -0,0 +1,5 @@
{
"UserId": {
"UserReportTitle": "Users"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "Kullanıcı Kodu",
"UserReportTitle": "Kullanıcı Kodları",
"PluginDescription": "Kullanıcı raporlarını görüntüler"
}
}

View File

@ -0,0 +1,6 @@
{
"UserId": {
"UserId": "Ідентифікатор",
"PluginDescription": "Показує користувцькі звіти"
}
}

View File

@ -0,0 +1,6 @@
{
"UserId": {
"UserId": "ID người dùng",
"PluginDescription": "Hiển thị báo cáo người dùng"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "用户ID",
"UserReportTitle": "用户ID",
"PluginDescription": "显示用户报告"
}
}

View File

@ -0,0 +1,7 @@
{
"UserId": {
"UserId": "使用者 ID",
"UserReportTitle": "使用者 ID",
"PluginDescription": "顯示使用者報表"
}
}