checkSitePermission();
$view = new View('@PagePerformance/getPagePerformancePopover');
$dataTable = $this->getEvolutionTable();
$view->graph = $this->getRowEvolutionGraph($dataTable);
$view->metrics = '';
$metrics = Metrics::getPagePerformanceMetrics();
foreach ($metrics as $metric) {
$view->metrics .= sprintf('%s: %s
', $metric->getTranslatedName(), $metric->getDocumentation());
}
return $view->render();
}
protected function getEvolutionTable()
{
$apiMethod = Common::getRequestVar('apiMethod');
$period = Common::getRequestVar('period');
$params = [
'method' => $apiMethod,
'period' => $period,
'label' => Common::getRequestVar('label', ''),
'idSite' => $this->idSite,
'segment' => Common::getRequestVar('segment', ''),
'date' => 'range' === $period ? $this->strDate : EvolutionViz::getDateRangeAndLastN($period, $this->strDate)[0],
'format' => 'original',
'serialize' => '0',
];
/** @var DataTable $dataTable */
$dataTable = Request::processRequest($apiMethod, $params, []);
$dataTable->deleteColumn('label');
return $dataTable;
}
/**
* @return string|void
* @throws \Exception
*/
public function getRowEvolutionGraph($dataTable=null)
{
$this->checkSitePermission();
$apiMethod = Common::getRequestVar('apiMethod');
if (empty($dataTable)) {
$dataTable = $this->getEvolutionTable();
}
// set up the view data table
$view = ViewDataTableFactory::build(
StackedBarEvolution::ID, $apiMethod, 'PagePerformance.getRowEvolutionGraph', $forceDefault = true);
$view->setDataTable($dataTable);
$view->config->columns_to_display = array_keys(Metrics::getPagePerformanceMetrics());
$view->requestConfig->request_parameters_to_modify['label'] = '';
$view->config->show_goals = false;
$view->config->show_search = false;
$view->config->show_all_views_icons = false;
$view->config->show_related_reports = false;
$view->config->show_series_picker = false;
$view->config->show_footer_message = false;
$view->config->selectable_columns = array_keys(Metrics::getPagePerformanceMetrics());
return $this->renderView($view);
}
public function getEvolutionGraph()
{
$this->checkSitePermission();
$columns = Common::getRequestVar('columns', false);
if (false !== $columns) {
$columns = Piwik::getArrayFromApiParameter($columns);
}
$view = ViewDataTableFactory::build(
StackedBarEvolution::ID,
'PagePerformance.get',
$this->pluginName . '.' . __FUNCTION__,
$forceDefault = true
);
$view->config->show_goals = false;
$performanceMetrics = array_keys(Metrics::getPagePerformanceMetrics());
if (!empty($columns)) {
$view->config->columns_to_display = array_intersect($columns, $performanceMetrics);
}
if (empty($view->config->columns_to_display)) {
$view->config->columns_to_display = $performanceMetrics;
}
$view->config->documentation = Piwik::translate('PagePerformance_EvolutionOverPeriod') . '
';
$metrics = Metrics::getPagePerformanceMetrics();
foreach ($metrics as $metric) {
$view->config->documentation .= sprintf('%s: %s
', $metric->getTranslatedName(), $metric->getDocumentation());
}
$report = ReportsProvider::factory('PagePerformance', 'get');
$view->config->selectable_columns = array_keys(Metrics::getPagePerformanceMetrics());
$numberFormatter = new Formatter\Html();
$metrics = $report->getMetrics();
$view->config->filters[] = function (DataTable $table) use ($numberFormatter, $metrics) {
$firstRow = $table->getFirstRow();
if ($firstRow) {
foreach ($metrics as $metric => $name) {
$metricValue = $firstRow->getColumn($metric);
if (false !== $metricValue) {
$firstRow->setColumn($metric, $numberFormatter->getPrettyTimeFromSeconds($metricValue));
}
}
}
};
$view->config->addTranslations(Metrics::getMetricTranslations());
return $this->renderView($view);
}
}