Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Giehl <stefan@matomo.org>2021-04-16 03:04:35 +0300
committerGitHub <noreply@github.com>2021-04-16 03:04:35 +0300
commitaffd3737c1c608923ec45f484ddb9afd2650aa6e (patch)
tree644655a4071d66771ed5065f466ebc102da0dc2c /core/ReportRenderer
parent6e3f165ab16f49969b7393ca752aad51e180bf0d (diff)
Allow generating reports in TSV format (#17464)
* Allow generating reports in TSV format * adds test files
Diffstat (limited to 'core/ReportRenderer')
-rw-r--r--core/ReportRenderer/Tsv.php175
1 files changed, 175 insertions, 0 deletions
diff --git a/core/ReportRenderer/Tsv.php b/core/ReportRenderer/Tsv.php
new file mode 100644
index 0000000000..4e137128e8
--- /dev/null
+++ b/core/ReportRenderer/Tsv.php
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Matomo - free/libre analytics platform
+ *
+ * @link https://matomo.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+namespace Piwik\ReportRenderer;
+
+use Piwik\DataTable\DataTableInterface;
+use Piwik\DataTable\Renderer\Tsv as TsvDataTableRenderer;
+use Piwik\Piwik;
+use Piwik\ReportRenderer;
+
+/**
+ * TSV report renderer
+ */
+class Tsv extends ReportRenderer
+{
+ /**
+ * @var string
+ */
+ protected $rendered;
+
+ /**
+ * Initialize locale settings.
+ * If not called, locale settings defaults to 'en'
+ *
+ * @param string $locale
+ */
+ public function setLocale($locale)
+ {
+ return;
+ }
+
+ /**
+ * Save rendering to disk
+ *
+ * @param string $filename without path & without format extension
+ * @return string path of file
+ */
+ public function sendToDisk($filename)
+ {
+ return ReportRenderer::writeFile(
+ $filename,
+ ReportRenderer::TSV_FORMAT,
+ $this->getRenderedReport()
+ );
+ }
+
+ /**
+ * Send rendering to browser with a 'download file' prompt
+ *
+ * @param string $filename without path & without format extension
+ */
+ public function sendToBrowserDownload($filename)
+ {
+ ReportRenderer::sendToBrowser(
+ $filename,
+ ReportRenderer::TSV_FORMAT,
+ "text/" . ReportRenderer::TSV_FORMAT,
+ $this->getRenderedReport()
+ );
+ }
+
+ /**
+ * Output rendering to browser
+ *
+ * @param string $filename without path & without format extension
+ */
+ public function sendToBrowserInline($filename)
+ {
+ ReportRenderer::sendToBrowser(
+ $filename,
+ ReportRenderer::TSV_FORMAT,
+ "application/" . ReportRenderer::TSV_FORMAT,
+ $this->getRenderedReport()
+ );
+ }
+
+ /**
+ * Get rendered report
+ */
+ public function getRenderedReport()
+ {
+ return $this->rendered;
+ }
+
+ /**
+ * Generate the first page.
+ *
+ * @param string $reportTitle
+ * @param string $prettyDate formatted date
+ * @param string $description
+ * @param array $reportMetadata metadata for all reports
+ * @param array $segment segment applied to all reports
+ */
+ public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
+ {
+ return;
+ }
+
+ /**
+ * Render the provided report.
+ * Multiple calls to this method before calling outputRendering appends each report content.
+ *
+ * @param array $processedReport @see API::getProcessedReport()
+ */
+ public function renderReport($processedReport)
+ {
+ $tsvRenderer = $this->getRenderer(
+ $processedReport['reportData'],
+ $processedReport['metadata']['uniqueId']
+ );
+
+ $reportData = $tsvRenderer->render();
+ if (empty($reportData)) {
+ $reportData = Piwik::translate('CoreHome_ThereIsNoDataForThisReport');
+ }
+
+ $replaceBySpace = array( $tsvRenderer->separator);
+ $reportName = str_replace($replaceBySpace, " ", $processedReport['metadata']['name']);
+ $this->rendered .= implode(
+ '',
+ array(
+ $reportName,
+ $tsvRenderer->lineEnd,
+ $reportData,
+ $tsvRenderer->lineEnd,
+ $tsvRenderer->lineEnd,
+ )
+ );
+ }
+
+ /**
+ * @param DataTableInterface $table
+ * @param string $uniqueId
+ * @return \Piwik\DataTable\Renderer\Tsv
+ */
+ protected function getRenderer(DataTableInterface $table, $uniqueId)
+ {
+ $tsvRenderer = new TsvDataTableRenderer();
+ $tsvRenderer->setIdSite($this->idSite);
+ $tsvRenderer->setTable($table);
+ $tsvRenderer->setConvertToUnicode(false);
+ $tsvRenderer->setApiMethod(
+ $this->getApiMethodNameFromUniqueId($uniqueId)
+ );
+
+ return $tsvRenderer;
+ }
+
+ /**
+ * @param $uniqueId
+ * @return string
+ */
+ protected function getApiMethodNameFromUniqueId($uniqueId)
+ {
+ return str_replace("_", ".", $uniqueId);
+ }
+
+ /**
+ * Get report attachments, ex. graph images
+ *
+ * @param $report
+ * @param $processedReports
+ * @param $prettyDate
+ * @return array
+ */
+ public function getAttachments($report, $processedReports, $prettyDate)
+ {
+ return array();
+ }
+}