You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
2.7 KiB
PHP

<?php
namespace BSR\Lib\Formatter;
class Html extends Formatter {
protected static function init() {
self::registerFormats(array(
'application/xhtml+xml',
'text/html',
));
}
private function result($data) {
// the format is array('result' => array('funcname' => DATA))
// so take the first element of the 'result' array
$data = reset($data['result']);
$first = reset($data);
$single = ! is_array($first);
$content = '<table class="table table-striped table-hover"><thead>';
if($single) {
$content .= "<tr><th>Field</th><th>Value</th></tr>";
} else {
$columns = array_keys($first);
$content .= '<tr>';
foreach($columns as $k) {
$content .= "<th>$k</th>";
}
$content .= '</tr>';
}
$content .= '</thead><tbody>';
if($single) {
foreach($data as $k => $v) {
$content .= "<tr><th>$k</th><td>".print_r($v, true)."</td></tr>";
}
} else {
foreach($data as $row) {
$content .= '<tr>';
foreach($columns as $c) {
$v = print_r(isset($row[$c]) ? $row[$c] : '', true);
$limit = 50;
if(strlen($v) > $limit) {
$v = substr($v, 0, $limit).' [...]';
}
$content .= "<td>$v</td>";
}
$content .= '</tr>';
}
}
$content .= '</tbody></table>';
return $content;
}
private function error($data) {
$code = $data['error']['code'];
$name = $data['error']['name'];
$msg = $data['error']['reason'];
return '<h1>An error occured</h1>'.
"<h2>[$code] $name</h2>".
"<p>$msg</p>";
}
private function failure($data) {
$code = $data['failure']['code'];
$name = $data['failure']['reason'];
return '<h1>A failure occured</h1>'.
"<h2>[$code] $name</h2>";
}
public function render($data)
{
$type = key($data);
if (method_exists($this, $type)) {
$content = call_user_func_array(array($this, $type), array($data));
} else {
$content = '<h1>Unable to render this</h1>';
}
$html = file_get_contents('template.html');
$context = array(
'title' => 'BSR - WebService',
'content' => $content
);
foreach($context as $k => $v) {
$html = str_replace("{{ $k }}", $v, $html);
}
echo $html;
}
}