diff options
author | Silvio <silvio@devlet.com.br> | 2010-08-18 12:00:21 -0300 |
---|---|---|
committer | Silvio <silvio@devlet.com.br> | 2010-08-18 12:00:21 -0300 |
commit | 70539fe94d67cb4bdde7edce8a26873343d3c240 (patch) | |
tree | 2009cc33ccafa6a6f7c3d66523e6000cca10677d /apps/csv.php | |
parent | f7b8ba01cb6cbf78d5e687bd17dc5c571fe6c85e (diff) | |
download | cinisis-70539fe94d67cb4bdde7edce8a26873343d3c240.tar.gz cinisis-70539fe94d67cb4bdde7edce8a26873343d3c240.tar.bz2 |
Moving tests to apps folder
Diffstat (limited to 'apps/csv.php')
-rw-r--r-- | apps/csv.php | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/apps/csv.php b/apps/csv.php new file mode 100644 index 0000000..e50249b --- /dev/null +++ b/apps/csv.php @@ -0,0 +1,124 @@ +<?php +/** + * Cinisis - Isis db reading tool. + * + * @TODO: check what happens if theres a field and subfields with repetition. + */ + +/** + * Format a value for CSV output. + * + * @param $field + * Field entry. + * + * @return + * Formatted CSV field. + */ +function csv($field = NULL) { + return '"'. preg_replace('/"/', '""', $field) .'",'; +} + +/** + * Apply filters into the result. + * + * @param $field + * Field entry. + */ +function filter(&$field = NULL) { + // Remove brackets from field content. + $field = str_replace('<', '', $field); + $field = str_replace('>', '', $field); +} + +/** + * Merge fields in a single cel. + * + * @param $data + * Array with field data. + * + * @param $field + * Field name. + * + * @return + * Cel with merged fields. + */ +function merge_fields($data, $field) { + $cel = ''; + $sep = (count($data) > 1) ? '; ': ''; + foreach ($data as $subkey => $subvalue) { + $cel = $cel . $data[$subkey][$field] . $sep; + } + + return $cel; +} + +// Import Cinisis Library. +require_once '../index.php'; + +// Get a db instance. +$isis = new CinisisDb(); + +// Test connection. +if ($isis->db) { + // Get format and number of entries. + $entries = $isis->db->entries(); + $format = $isis->db->format; + + // Prepare output. + header("Content-type: application/text/x-csv"); + header("Content-Disposition: attachment; filename=export.csv"); + header("Pragma: no-cache"); + header("Expires: 0"); + + // Format fields. + foreach ($format['fields'] as $field) { + echo csv($field['name']); + if (is_array($field['subfields'])) { + foreach ($field['subfields'] as $key => $value) { + echo csv($field['name'] .': '. $value); + } + } + } + + // New roll. + echo "\n"; + + // Format output. + for ($n = 1; $n <= $entries; $n++) { + $result = $isis->db->read($n); + + if ($result) { + // Filter results. + array_walk_recursive($result, 'filter'); + + foreach ($format['fields'] as $field) { + if (is_array($result[$field['name']])) { + // Print main field if needed. + if (is_array($result[$field['name']][0])) { + echo csv(); + } + else { + echo csv($result[$field['name']][0]); + } + } + else { + echo csv($result[$field['name']]); + } + if (is_array($field['subfields'])) { + foreach ($field['subfields'] as $key => $value) { + // Deals with subfield repetition. + if (isset($result[$field['name']][0][$value])) { + echo csv(merge_fields($result[$field['name']], $value)); + } + else { + echo csv($result[$field['name']][$value]); + } + } + } + } + + // New roll. + echo "\n"; + } + } +} |