1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-23 23:47:37 +00:00
Files
matomo/plugins/Insights/Model.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

128 خطوط
3.4 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\Insights;
use Piwik\API\Request as ApiRequest;
use Piwik\DataTable;
use Piwik\Period\Range;
use Piwik\Plugins\API\ProcessedReport;
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
/**
* API for plugin Insights
*
* @method static \Piwik\Plugins\Insights\API getInstance()
*/
class Model
{
/**
* @var ProcessedReport
*/
private $processedReport;
public function __construct(ProcessedReport $processedReport)
{
$this->processedReport = $processedReport;
}
public function requestReport($idSite, $period, $date, $reportUniqueId, $metric, $segment)
{
$report = $this->getReportByUniqueId($idSite, $reportUniqueId);
$params = array(
'format' => 'original',
'idSite' => $idSite,
'period' => $period,
'date' => $date,
'filter_limit' => 1000,
'showColumns' => $metric,
'totals' => 1,
);
if (!empty($segment)) {
$params['segment'] = $segment;
}
if (!empty($report['parameters']) && is_array($report['parameters'])) {
$params = array_merge($params, $report['parameters']);
}
$table = ApiRequest::processRequest($report['module'] . '.' . $report['action'], $params, $default = []);
return $table;
}
public function getLastDate($date, $period, $comparedToXPeriods)
{
$pastDate = Range::getDateXPeriodsAgo(abs($comparedToXPeriods), $date, $period);
if (empty($pastDate[0])) {
throw new \Exception('Not possible to compare this date/period combination');
}
return $pastDate[0];
}
/**
* Returns either the $totalValue (eg 5500 visits) or the total value of the report
* (eg 2500 visits of 5500 total visits as for instance only 2500 visits came to the website using a search engine).
*
* If the metric total (2500) is much lower than $totalValue, the metric total will be returned, otherwise the
* $totalValue
*/
public function getRelevantTotalValue(DataTable $currentReport, $metric, $totalValue)
{
$totalMetric = $this->getMetricTotalValue($currentReport, $metric);
if ($totalMetric > $totalValue) {
return $totalMetric;
}
if (($totalMetric * 2) < $totalValue) {
return $totalMetric;
}
return $totalValue;
}
public function getTotalValue($idSite, $period, $date, $metric, $segment)
{
$visits = VisitsSummaryAPI::getInstance()->get($idSite, $period, $date, $segment);
$firstRow = $visits->getFirstRow();
if (empty($firstRow)) {
return 0;
}
$totalValue = $firstRow->getColumn($metric);
return (int) $totalValue;
}
public function getMetricTotalValue(DataTable $currentReport, $metric)
{
$totals = $currentReport->getMetadata('totals');
if (!empty($totals[$metric])) {
$totalValue = (int) $totals[$metric];
} else {
$totalValue = 0;
}
return $totalValue;
}
public function getReportByUniqueId($idSite, $reportUniqueId)
{
$report = $this->processedReport->getReportMetadataByUniqueId($idSite, $reportUniqueId);
return $report;
}
}