From 86061b9a2716aa4c1cf0a46ca6d60ddec7c2b178 Mon Sep 17 00:00:00 2001 From: mattab <matthieu.aubry@gmail.com> Date: Tue, 18 Feb 2014 16:05:06 +1300 Subject: [PATCH] Refs #4701 Add CSV renderer --- core/ReportRenderer/Csv.php | 144 ++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 core/ReportRenderer/Csv.php diff --git a/core/ReportRenderer/Csv.php b/core/ReportRenderer/Csv.php new file mode 100644 index 0000000000..3cad78fee4 --- /dev/null +++ b/core/ReportRenderer/Csv.php @@ -0,0 +1,144 @@ +<?php +namespace Piwik\ReportRenderer; + +use Piwik\ReportRenderer; +use Piwik\DataTable\Renderer\Csv as CsvDataTableRenderer; +use Piwik\DataTable\DataTableInterface; + +class Csv 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::CSV_FORMAT, + $this->rendered + ); + } + + /** + * 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::CSV_FORMAT, + "text/" . ReportRenderer::CSV_FORMAT, + $this->rendered + ); + } + + /** + * Output rendering to browser + * + * @param string $filename without path & without format extension + */ + public function sendToBrowserInline($filename) + { + ReportRenderer::sendToBrowser( + $filename, + ReportRenderer::CSV_FORMAT, + "application/" . ReportRenderer::CSV_FORMAT, + $this->rendered + ); + } + + /** + * 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) + { + + $csvRenderer = $this->getRenderer( + $processedReport['reportData'], + $processedReport['metadata']['uniqueId'] + ); + + $this->rendered .= implode( + '', + array( + $processedReport['metadata']['name'], + $csvRenderer->lineEnd, + $csvRenderer->render($processedReport), + $csvRenderer->lineEnd, + $csvRenderer->lineEnd, + ) + ); + } + + /** + * @param DataTableInterface $table + * @param string $uniqueId + * @return \Piwik\DataTable\Renderer\Csv + */ + protected function getRenderer(DataTableInterface $table, $uniqueId) + { + $csvRenderer = new CsvDataTableRenderer(); + $csvRenderer->setTable($table); + $csvRenderer->setConvertToUnicode(false); + $csvRenderer->setApiMethod( + $this->getApiMethodNameFromUniqueId($uniqueId) + ); + + return $csvRenderer; + } + + /** + * @param $uniqueId + * @return string + */ + protected function getApiMethodNameFromUniqueId($uniqueId) + { + return str_replace("_", ".", $uniqueId); + } +} -- GitLab