diff options
Diffstat (limited to '')
-rw-r--r-- | library/Icinga/File/Csv.php | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/library/Icinga/File/Csv.php b/library/Icinga/File/Csv.php new file mode 100644 index 0000000..56ee233 --- /dev/null +++ b/library/Icinga/File/Csv.php @@ -0,0 +1,47 @@ +<?php +/* Icinga Web 2 | (c) 2013 Icinga Development Team | GPLv2+ */ + +namespace Icinga\File; + +use Traversable; + +class Csv +{ + protected $query; + + protected function __construct() + { + } + + public static function fromQuery(Traversable $query) + { + $csv = new static(); + $csv->query = $query; + return $csv; + } + + public function dump() + { + header('Content-type: text/csv'); + echo (string) $this; + } + + public function __toString() + { + $first = true; + $csv = ''; + foreach ($this->query as $row) { + if ($first) { + $csv .= implode(',', array_keys((array) $row)) . "\r\n"; + $first = false; + } + $out = array(); + foreach ($row as & $val) { + $out[] = '"' . str_replace('"', '""', $val) . '"'; + } + $csv .= implode(',', $out) . "\r\n"; + } + + return $csv; + } +} |