. */ namespace Volkszaehler\View; use Volkszaehler\View\HTTP; use Volkszaehler\Util; /** * CSV view * * @author Steffen Vogel * @package default * @todo rework */ class CSV extends View { protected $delimiter = ';'; protected $enclosure = '"'; protected $csv = array(); /** * constructor */ public function __construct(HTTP\Request $request, HTTP\Response $response) { parent::__construct($request, $response); echo 'source: volkszaehler.org' . PHP_EOL; echo 'version: ' . VZ_VERSION . PHP_EOL; $this->response->setHeader('Content-type', 'text/csv'); $this->response->setHeader('Content-Disposition', 'attachment; filename="data.csv"'); } public function addChannel(Model\Channel $channel, array $data = NULL) { $this->csv = array_merge($this->csv, $data); } public function addAggregator(Model\Aggregator $aggregator) { } public function addDebug(Util\Debug $debug) { } protected function addException(\Exception $e) { } public function renderResponse() { // channel data foreach ($this->csv as $row) { $array = array_map(array($this, 'escape'), $row); echo implode($this->delimiter, $row) . PHP_EOL; } echo PHP_EOL; // debug echo 'time: ' . $debug->getExecutionTime() . PHP_EOL; echo 'database: ' . Util\Configuration::read('db.driver') . PHP_EOL; foreach ($debug->getMessages() as $message) { echo 'message: ' . $message['message'] . PHP_EOL; // TODO add more information } foreach ($debug->getQueries() as $query) { echo 'query: ' . $query['sql'] . PHP_EOL; echo ' parameters: ' . implode(', ', $query['parameters']) . PHP_EOL; } } protected function escape($value) { if (is_string($value)) { return $this->enclosure . $value . $this->enclosure; } elseif (is_numeric($value)) { return $value; } else { return (string) $value; } } } ?>