<?php /** * Display helpers for test scripts. */ class CinisisDisplayHelper { /** * Constructor. * * @param $title * Page title; */ function __construct($title) { if ($title != NULL) { $this->header($title); $this->title($title); } } /** * Determine internal method names. * * @param $method * Method name. * * @return * Method name. */ static function methodName($method) { if (php_sapi_name() == "cli") { return 'cli'. ucfirst($method); } else { return 'web'. ucfirst($method); } } /** * Dispatcher, dynamic version. * * @param $method * Method name. * * @param $arguments * Argument list. * * @return * Callback result. */ public function __call($method, $arguments) { $method = $this->methodName($method); if (method_exists($this, $method)) { return call_user_func_array(array($this, $method), $arguments); } } /** * Dispatcher, static version. * * @param $method * Method name. * * @param $arguments * Argument list. * * @return * Callback result. */ public static function __callStatic($method, $arguments) { $method = self::methodName($method); if (is_callable('self', $method)) { return call_user_func_array(array('self', $method), $arguments); } } /** * Draws a page title. * * @param $title * Page title; */ protected static function webTitle($title) { if (php_sapi_name() == "cli") { echo "$title\n"; } else { echo "<h1>$title</h1>\n"; } } /** * Draws title, CLI version. * * @param $title * Page title; */ protected static function cliTitle($title) { echo "$title\n"; } /** * Draws the page header. * * @param $title * Page title; */ protected static function webHeader($title) { echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">'; echo '<head>'; echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; echo '<title>'. $title .'</title>'; echo '</head>'; echo '<body>'; } /** * Draws the page footer. */ protected static function webFooter() { echo '</body>'; } /** * Draws a form. * * @param $content * Form inner content. * * @param $action * Form action. * * @param $method * Form method. */ protected static function webForm($content, $action = 'index.php', $method = 'get') { echo '<td>'; echo '<form action="'. $action .'" method="'. $method .'">'; echo $content; echo '<input type="submit" />'; echo '</form>'; echo '<br />'; echo '</td><td>'; } /** * Draws a form text input. * * @param $name * Input name. * * @param $default * Default value. * * @return * Rendered text input. */ protected static function webFormInputText($name, $default = null) { if ($default) { $default = 'value="'. $default .'"'; } return ucfirst($name) .': <input name="'. $name .'" type="text" '. $default .'/>'; } /** * Draws a navigation bar. * * @param $entry * Current entry. * * @param $entries * Total number of entries. * * @param $action * Page action. * * @param $extra * Extra parameters. */ protected static function webNavbar($entry, $entries, $action = 'index.php', $extra = NULL) { self::preOpen(); // First / prev links. if ($entry != 1) { $prev = $entry - 1; echo '<a href="'. $action .'?entry=1"'. $extra .'>first</a> '; echo '<a href="'. $action .'?entry='. $prev . $extra .'">< prev</a> '; } // Next / last links. if ($entry < $entries) { $next = $entry + 1; echo '<a href="'. $action .'?entry='. $next . $extra .'">next ></a> '; echo '<a href="'. $action .'?entry='. $entries . $extra .'">last</a>'; } self::preClose(); } /** * Format a link. * * @param $action * Link action. * * @param $args * Action arguments. * * @param $title * Link title. * * @return * Formatted link. */ protected static function webLink($action, $args, $title) { return '<a href="'. $action . $args .'">'. $title .'</a>'; } /** * Format an entry link. * * @param $entry * Entry number. * * @return * Formatted link. */ protected static function webEntryLink($entry) { return self::link('index.php', '?entry='. $entry, $entry); } /** * Format a link to the field app. * * @param $entry * Entry number. * * @param $fid * Field code. * * @return * Formatted link. */ protected static function webFieldLink($entry, $fid) { return "Field search: ". self::link('field.php', '?entry='. $entry .'&fid='. $fid, $entry); } /** * Format a link to the field app. * * @param $entry * Entry number. * * @param $fid * Field code. * * @return * Formatted link. */ protected static function webRepetitionLink($entry, $fid) { return "Repetition search: ". self::link('repetition.php', '?entry='. $entry .'&fid='. $fid, $entry); } /** * Draws tags for opening a table. */ protected static function webOpenTable() { echo '<table><tr>'; } /** * Draws tags for closing a table. */ protected static function webCloseTable() { echo '</td></tr></table>'; } /** * Draws a h2 element. * * @param $text * Inner text. */ protected static function webH2($text) { echo "<h2>$text</h2>"; } /** * Draws a h2 element, CLI version. * * @param $text * Inner text. */ protected static function cliH2($text) { echo "$text\n"; } /** * Draws a h3 element. * * @param $text * Inner text. */ protected static function webH3($text) { echo "<h3>$text</h3>"; } /** * Draws a h3 element, CLI version. * * @param $text * Inner text. */ protected static function cliH3($text) { echo "$text\n"; } /** * Draws a line break element. */ protected static function webBr() { echo "<br />"; } /** * Draws a line break element, CLI version. */ protected static function cliBr() { echo "\n"; } /** * Draws a pre format block element. * * @param $text * Inner text. */ protected static function webPre($text) { echo "<pre>$text</pre>"; } /** * Draws a pre open element. */ protected static function webPreOpen() { echo "<pre>"; } /** * Draws a pre open element. */ protected static function webPreClose() { echo "</pre>"; } /** * Draws a pre format block element. * * @param $text * Inner text. */ protected static function cliPre($text) { echo "$text\n"; } /** * Dump value. * * @param $var * Variable to dump. */ protected static function webDump($var) { if (file_exists('../contrib/krumo/class.krumo.php')) { // Use Krumo. include_once '../contrib/krumo/class.krumo.php'; krumo($var); } else { self::preOpen(); print_r($var); self::preClose(); } } /** * Dump value. * * @param $var * Variable to dump. */ protected static function cliDump($var) { print_r($var); } /** * Set the response helper. * * @param $mime * MIME type. * * @param $filename * File name. */ protected static function webHttpHeader($mime, $filename) { header("Content-type: $mime"); header("Content-Disposition: attachment; filename=$filename"); header("Pragma: no-cache"); header("Expires: 0"); } /** * Display a value with CSV format. * * @param $value * Value entry. */ protected static function webCsv($value = NULL) { echo '"'. preg_replace('/"/', '""', $value) .'",'; } /** * Display CSV titles. * * @param $format * ISIS database format. */ protected static function webCsvTitles($format) { // Format fields. foreach ($format['fields'] as $field) { self::csv($field['name']); if (isset($field['subfields']) && is_array($field['subfields'])) { foreach ($field['subfields'] as $key => $value) { self::csv($field['name'] .': '. $value); } } } } /** * Display a new CSV row. */ protected static function webCsvRow() { echo "\n"; } /** * Merge items in a CSV roll. * * @param $items * Array with items to be merged. */ protected static function webMergeCsvItems($items) { if (!empty($items)) { self::csv(implode(';', $items)); } else { self::csv(); } } /** * Renders a radio button. * * @param $name * Radio name. * * @param $value * Radio value. * * @param $caption * Radio caption. * * @param $checked * Whether the radio is checked. * * @return * HTML rendered radio button. */ protected static function webRadio($name, $value, $caption, $checked = NULL) { return '<input type="radio" name="'. $name .'" value="'. $value .'" '. $checked .' > '. $value .' - '. $caption .'<br />'; } /** * Draws a combination of radio buttons. * * @param $name * Radio names. * * @param $data * Array with values and captions. * * @param $checked * Index of the selected option. */ protected static function webRadios($name, $data, $checked = NULL) { ksort($data); $radios = '<table><tr><td>'; $count = 0; foreach ($data as $key => $value) { if ($count++ > 25) { $count = 0; $radios .= '</td><td>'; } if ($key == $checked) { $radios .= self::webRadio($name, $key, $value, 'checked'); } else { $radios .= self::webRadio($name, $key, $value); } } $radios .= '</td></tr></table>'; return $radios; } }