diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/csv.php | 124 | ||||
-rw-r--r-- | apps/field.php | 51 | ||||
-rw-r--r-- | apps/index.php | 42 | ||||
-rw-r--r-- | apps/malete.php | 181 | ||||
-rw-r--r-- | apps/phpisis.php | 29 | ||||
-rw-r--r-- | apps/read.php | 51 | ||||
-rw-r--r-- | apps/repetition.php | 51 | ||||
-rw-r--r-- | apps/subfield.php | 56 | ||||
-rw-r--r-- | apps/test.php | 28 |
9 files changed, 613 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"; + } + } +} diff --git a/apps/field.php b/apps/field.php new file mode 100644 index 0000000..b9f9c3a --- /dev/null +++ b/apps/field.php @@ -0,0 +1,51 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Get input data. +$entry = CinisisHttpHelper::get_numeric_arg('entry'); +$field = CinisisHttpHelper::get_numeric_arg('field'); + +// Draw the document. +$display = new CinisisDisplayHelper('Field finder'); +$form = $display->form_input_text('entry', $entry); +$form .= $display->form_input_text('field', $field); +$display->form($form, 'field.php'); + +// Get a db instance. +$isis = new CinisisDb(); + +// Setup database and entry number. +if ($isis->db) { + // Get the number of entries. + $field_name = $isis->db->format['fields'][$field]['name']; + $entries = $isis->db->entries(); + $entry--; + + // Query database. + do { + $result = $isis->db->read(++$entry); + if ($entry == $entries) { + break; + } + } while (!isset($result[$field_name])); + + // Navigation bar. + $display->navbar($entry, $entries, $repetition, '&field='. $field); + + // Format output. + echo "<pre>\n"; + echo "Selected field: $field: $field_name.\n"; + echo "Showing entry ". $display->entry_link($entry) ." from $entries total entries.\n"; + echo "Repetitions found: ". count($result[$field_name]) .".\n"; + echo "\n"; + print_r($result[$field_name]); + echo '</pre>'; +} + +$display->footer(); +?> diff --git a/apps/index.php b/apps/index.php new file mode 100644 index 0000000..b395b80 --- /dev/null +++ b/apps/index.php @@ -0,0 +1,42 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Get entry number. +$entry = CinisisHttpHelper::get_numeric_arg('entry'); + +// Draw the document. +$display = new CinisisDisplayHelper('Isis Navigator'); +$display->form($display->form_input_text('entry', $entry)); + +// Get a db instance. +$isis = new CinisisDb(); + +// Setup database and entry number. +if ($isis->db) { + // Get the number of entries. + $entries = $isis->db->entries(); + + // Input sanitization. + if ($entries < $entry) { + $entry = 1; + } + + // Query database. + $result = $isis->db->read($entry); + $display->navbar($entry, $entries); + + // Format output. + echo "<pre>\n"; + echo "Showing entry $entry from $entries total entries.\n"; + echo "\n"; + print_r($result); + echo '</pre>'; +} + +$display->footer(); +?> diff --git a/apps/malete.php b/apps/malete.php new file mode 100644 index 0000000..03451f2 --- /dev/null +++ b/apps/malete.php @@ -0,0 +1,181 @@ +<?php +/** + * Test query script. + */ + +// Import Malete Library +require 'contrib/malete/php/Isis.php'; + +?> + +<html><head><title>Query</title></head><body> + +<?php + + // Create a db with field list ("fdt") + $fdt_anu10 = array( + 'Periodico' => 1, + 'Data' => 2, + 'Titulo' => 3, + 'Autor' => 4, + 'Assuntos primarios' => 5, + 'Assuntos secundarios' => 6, + 'Ilustrado' => 7, + 'Caderno' => 8, + 'Pagina' => 9, + 'Arquivo digital' => 10, + 'Forma documento' => 11, + 'Local de publicacao' => 12, + 'Observacoes' => 13, + 'Descritores imagem' => 14, + 'Termo geografico' => 16, + 'Coluna' => 17, + 'Recorte' => 19, + 'Alimentador' => 20, + 'Tema Anuario' => 21, + ); + + $fdt_tupi = array( + 'cod.titulo' => 1, + 'postopo' => 2, + 'num.entrada' => 3, + 'num.tombo' => 4, + 'datain' => 5, + 'dataex' => 6, + 'acervo (DIF ou PRE)' => 7, + 'cadarq' => 10, + 'caddep' => 11, + 'cadddl' => 12, + 'outarq' => 13, + 'categorias' => 15, + 'presok' => 16, + 'roteiro de locução' => 17, + 'mat.acervo' => 18, + 'mat.orig' => 19, + 'titulo' => 20, + 'outros titulos' => 22, + 'data/série' => 24, + 'conteudo/sinopse' => 25, + 'descritores' => 26, + 'descritores secundários' => 27, + 'identidades' => 28, + 'ndxlib' => 29, + 'materiais' => 40, + 'materiais' => 41, + 'materiais' => 42, + 'materiais' => 43, + 'materiais' => 44, + 'materiais' => 45, + 'mat' => 46, + 'mat' => 47, + 'mat' => 48, + 'mat' => 49, + 'mat' => 50, + 'mat' => 51, + 'mat' => 52, + 'mat' => 53, + 'mat' => 54, + 'mat' => 55, + 'evol.estado tec.' => 56, + 'movimentacao' => 57, + 'movimentacao' => 58, + 'obsmat' => 59, + 'producao*' => 60, + 'dir.arte*' => 61, + 'fotografia*' => 62, + 'musica*' => 63, + 'som*' => 64, + 'montagem*' => 65, + 'direcao*' => 66, + 'arg/roteiro*' => 67, + 'distribuicao*' => 68, + 'colab./outros' => 69, + 'producao1' => 70, + 'dir.arte1' => 71, + 'fotografia1' => 72, + 'musica1' => 73, + 'som1' => 74, + 'montagem1' => 75, + 'producao2(res.p/expandir)' => 80, + 'dir.arte2(res.p/expandir)' => 81, + 'fotografia2(res.p/expandir)' => 82, + 'musica2(res.p/expandir)' => 83, + 'som2(res.p/expandir)' => 84, + 'loc.prod.lan' => 85, + 'dat.prod.lan' => 86, + 'lab/est/locacoes' => 87, + 'premios' => 88, + 'fontes' => 89, + 'certificados' => 95, + 'examinador' => 98, + 'observações' => 99, + 'termos geográficos' => 165, + 'quicktime' => 900, + 'revisão' => 901, + 'vídeo' => 902, + ); + + //$db = 'tupi'; + $db = 'anu10'; + $fdt = ${'fdt_'. $db}; +?> + +<h2>server</h2> + +<?php + $db = new Isis_Db($fdt, $db, new Isis_Server()); + if (!$db->srv->sock) { + echo "could not contact server\n"; + } + else { + //print_r($db); +?> + +<h3>number of records...</h3> + +<?php + $query = 'HORA'; + $recs = $db->num_recs($query); + echo "got ",count($recs), " terms for '$query'</br>\n"; +?> + +<h3>terms beginning with...</h3> + +<?php + $query = 'Hora'; + $terms = $db->terms(strtoupper($query)); + echo "got ",count($terms), " terms for '$query'</br>\n"; + foreach ($terms as $t) { + list($cnt, $term) = explode("\t", $t); + echo "'$term'($cnt) "; + } + echo "</br>\n"; +?> + +<h3>query reading records</h3> + +<?php + $query = 'Corumbiara'; + $recs = $db->query(strtoupper($query)); + echo "got ",count($recs), " records for '$query'</br>\n"; + foreach ($recs as $r) { + echo "<pre>---\n", $r->toString(), "---\n</pre>\n"; + } +?> + +<h3>query reading a record</h3> + +<?php + $r = $db->read(6); + echo "<pre>---\n", $r->toString(), "---\n</pre><br>\n"; + echo '<pre>'; + //print_r($r); + //print_r($r->val[8]); + //print_r(preg_split('/\t/', $r->val[7])); + //print_r(array_flip($fdt_anu10)); + echo '</pre>'; + } // end else could contact server + +?> + +</body></html> diff --git a/apps/phpisis.php b/apps/phpisis.php new file mode 100644 index 0000000..75326f1 --- /dev/null +++ b/apps/phpisis.php @@ -0,0 +1,29 @@ +<?php +/** + * Test query script. + */ +?> + +<h3>Testing pecl-isis</h3> +<?php + + $db = isis_open('db/dbname/dbname'); + print_r(isis_last_mfn($db)); + + echo '<table>'; + + $result = isis_search('$', $db); + while ($record = isis_fetch_flat_array($result) ) { + print (" <tr><td colspan=\"2\">MFN: $record[mfn]</td></tr>\n"); + for ($i=0; $i<count($record)-1; ++$i) { //-1 porque el mfn es +1 + list ($tag, $value) = $record[$i]; + print (" <tr>\n". + " <td>$tag</td>\n". + " <td>".htmlspecialchars($value)."</td>\n". + " </tr>\n"); + } + } + echo '</table>'; +?> + +</body></html> diff --git a/apps/read.php b/apps/read.php new file mode 100644 index 0000000..835ae60 --- /dev/null +++ b/apps/read.php @@ -0,0 +1,51 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Draw the document. +$display = new CinisisDisplayHelper('Isis Reader'); +?> + +<table><tr> + +<?php + +$configs = array( + 0 => array( + 'implementation' => 'PhpIsis', + 'database' => 'dbname', + ), + 1 => array( + 'implementation' => 'BiblioIsis', + 'database' => 'dbname', + ), +); + +foreach ($configs as $config) { + // Get a db instance. + $isis = new CinisisDb($config); + + // Test connection. + if ($isis->db) { + $result = $isis->db->read(1); + $entries = $isis->db->entries(); + + // Format output. + echo '<td>'; + echo '<pre>'; + echo 'Implementation: '. $config['implementation'] ."\n"; + echo "Rows: $entries\n"; + print_r($result); + echo '</pre>'; + echo '</td>'; + } +} + +?> + +</tr></table> +</body> diff --git a/apps/repetition.php b/apps/repetition.php new file mode 100644 index 0000000..37d0889 --- /dev/null +++ b/apps/repetition.php @@ -0,0 +1,51 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Get input data. +$entry = CinisisHttpHelper::get_numeric_arg('entry'); +$field = CinisisHttpHelper::get_numeric_arg('field'); + +// Draw the document. +$display = new CinisisDisplayHelper('Repetition finder'); +$form = $display->form_input_text('entry', $entry); +$form .= $display->form_input_text('field', $field); +$display->form($form, 'repetition.php'); + +// Get a db instance. +$isis = new CinisisDb(); + +// Setup database and entry number. +if ($isis->db) { + // Get the number of entries. + $field_name = $isis->db->format['fields'][$field]['name']; + $entries = $isis->db->entries(); + $entry--; + + // Query database. + do { + $result = $isis->db->read(++$entry); + if ($entry == $entries) { + break; + } + } while (!isset($result[$field_name]) || count($result[$field_name]) < 2); + + // Navigation bar. + $display->navbar($entry, $entries, $repetition, '&field='. $field); + + // Format output. + echo "<pre>\n"; + echo "Selected field: $field: $field_name.\n"; + echo "Showing entry ". $display->entry_link($entry) ." from $entries total entries.\n"; + echo "Repetitions found: ". count($result[$field_name]) .".\n"; + echo "\n"; + print_r($result[$field_name]); + echo '</pre>'; +} + +$display->footer(); +?> diff --git a/apps/subfield.php b/apps/subfield.php new file mode 100644 index 0000000..117b8ce --- /dev/null +++ b/apps/subfield.php @@ -0,0 +1,56 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Get input data. +$entry = CinisisHttpHelper::get_numeric_arg('entry'); +$field = CinisisHttpHelper::get_numeric_arg('field'); +$subfield = CinisisHttpHelper::get_textual_arg('subfield'); + +// Draw the document. +$display = new CinisisDisplayHelper('Subfield finder'); +$form = $display->form_input_text('entry', $entry); +$form .= $display->form_input_text('field', $field); +$form .= $display->form_input_text('subfield', $subfield); +$display->form($form, 'subfield.php'); + +// Get a db instance. +$isis = new CinisisDb(); + +// Setup database and entry number. +if ($isis->db) { + // Get the number of entries. + $field_name = $isis->db->format['fields'][$field]['name']; + $subfield_name = $isis->db->format['fields'][$field]['subfields'][$subfield]; + $entries = $isis->db->entries(); + $entry--; + + // Query database. + do { + $result = $isis->db->read(++$entry); + if ($entry == $entries) { + break; + } + } while (!isset($result[$field_name][0][$subfield_name])); + + // Navigation bar. + $display->navbar($entry, $entries, $repetition, '&field='. $field . '&subfield='. $subfield); + + // Format output. + $link = $display->entry_link($entry); + echo "<pre>\n"; + echo "Selected field: $field: $field_name.\n"; + echo "Selected subfield: $subfield: $subfield_name.\n"; + echo "Showing entry ". $display->entry_link($entry) ." from $entries total entries.\n"; + echo "Repetitions found: ". count($result[$field]) .".\n"; + echo "\n"; + print_r($result[$field_name]); + echo '</pre>'; +} + +$display->footer(); +?> diff --git a/apps/test.php b/apps/test.php new file mode 100644 index 0000000..2b1fe5c --- /dev/null +++ b/apps/test.php @@ -0,0 +1,28 @@ +<?php +/** + * Cinisis - Isis db reading tool. + */ + +// Import requisites. +require_once '../index.php'; + +// Draw the document. +$display = new CinisisDisplayHelper('Isis Test'); + +// Get a db instance. +$isis = new CinisisDb(); + +// Test connection. +if ($isis->db) { + $result = $isis->db->read(1); + $entries = $isis->db->entries(); + + // Format output. + echo '<pre>'; + echo "Connection test:\n"; + echo "Rows: $entries\n"; + print_r($result); + echo '</pre>'; +} + +$display->footer(); |