added tests and removed logger from package
This commit is contained in:
157
tests/Webservice/Formatter/HtmlTest.php
Normal file
157
tests/Webservice/Formatter/HtmlTest.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
|
||||
namespace BSR\Webservice\Formatter;
|
||||
|
||||
use BSR\Webservice\Logger;
|
||||
|
||||
class Html extends Formatter {
|
||||
protected static function init() {
|
||||
self::registerFormats(array(
|
||||
'application/xhtml+xml',
|
||||
'text/html',
|
||||
));
|
||||
}
|
||||
|
||||
protected function truncate($v, $ellipsis = ' [...]') {
|
||||
$limit = 50;
|
||||
if(strlen($v) > $limit) {
|
||||
$v = substr($v, 0, $limit).$ellipsis;
|
||||
}
|
||||
return $v;
|
||||
}
|
||||
|
||||
protected function formatValue($v) {
|
||||
if(is_numeric($v)) {
|
||||
return $v;
|
||||
}
|
||||
if(is_bool($v)) {
|
||||
return '<span class="glyphicon glyphicon-'.($v ? 'ok' : 'remove').'"></span>';
|
||||
}
|
||||
if(is_string($v) && strpos($v, 'http') !== false) {
|
||||
$url = $v;
|
||||
$v = $this->truncate($v, '...');
|
||||
return "<a href='$url' target='_blank'>$v</a>";
|
||||
}
|
||||
|
||||
return $this->truncate(print_r($v, true));
|
||||
}
|
||||
|
||||
protected function result($data) {
|
||||
// the format is array('result' => array('function name' => DATA))
|
||||
// so take the first element of the 'result' array
|
||||
$func = key($data['result']);
|
||||
$data = reset($data['result']);
|
||||
$data = is_array($data) ? $data : array();
|
||||
$title = $func;
|
||||
|
||||
$content = '';
|
||||
$after = '';
|
||||
|
||||
if($func == 'NewSearch') {
|
||||
$content .= '<p>Count : '.$data['count'].'</p>';
|
||||
$after .= '<p>Extra : <pre>'.print_r($data['facets'], true).'</pre></p>';
|
||||
|
||||
unset($data['count']);
|
||||
unset($data['facets']);
|
||||
}
|
||||
|
||||
$first = reset($data);
|
||||
$single = ! is_array($first);
|
||||
$columns = array();
|
||||
|
||||
$content .= '<table class="table table-striped table-hover table-condensed table-responsive"><thead>';
|
||||
if($single) {
|
||||
$content .= "<tr><th>Field</th><th>Value</th></tr>";
|
||||
} else {
|
||||
$columns = array_keys($first);
|
||||
|
||||
$title .= ' ('.count($data).' results)';
|
||||
|
||||
$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>".$this->formatValue($v)."</td></tr>";
|
||||
}
|
||||
} else {
|
||||
foreach($data as $row) {
|
||||
$content .= '<tr>';
|
||||
foreach($columns as $c) {
|
||||
$content .= '<td>'.$this->formatValue(isset($row[$c]) ? $row[$c] : '').'</td>';
|
||||
}
|
||||
$content .= '</tr>';
|
||||
}
|
||||
}
|
||||
$content .= '</tbody></table>'.$after;
|
||||
|
||||
return array(
|
||||
'title' => $title,
|
||||
'content' => $content,
|
||||
'status' => 'success',
|
||||
);
|
||||
}
|
||||
|
||||
protected function error($data) {
|
||||
$code = $data['error']['code'];
|
||||
$name = $data['error']['name'];
|
||||
$msg = $data['error']['reason'];
|
||||
|
||||
return array(
|
||||
'title' => 'Error',
|
||||
'content' => "<h2>[$code] $name : $msg</h2>",
|
||||
'status' => 'warning',
|
||||
);
|
||||
}
|
||||
|
||||
protected function failure($data) {
|
||||
$code = $data['failure']['code'];
|
||||
$name = $data['failure']['reason'];
|
||||
|
||||
return array(
|
||||
'title' => 'Failure',
|
||||
'content' => "<h2>[$code] $name</h2>",
|
||||
'status' => 'danger',
|
||||
);
|
||||
}
|
||||
|
||||
public function render($data)
|
||||
{
|
||||
$type = key($data);
|
||||
|
||||
if (method_exists($this, $type)) {
|
||||
$context = call_user_func_array(array($this, $type), array($data));
|
||||
} else {
|
||||
$context = array(
|
||||
'title' => 'Formatter error',
|
||||
'content' => '<h1>Unable to render this</h1>',
|
||||
'status' => 'info',
|
||||
);
|
||||
}
|
||||
$info = Logger::data();
|
||||
$context['time'] = $info['time'];
|
||||
|
||||
$panel = static::template($context, 'panel');
|
||||
|
||||
if(isset($data['extra'])) {
|
||||
$panel .= $data['extra'];
|
||||
}
|
||||
|
||||
echo static::template(array(
|
||||
'version' => $info['version'],
|
||||
'title' => $context['title'],
|
||||
'content' => $panel,
|
||||
));
|
||||
}
|
||||
|
||||
public static function template(array $context = array(), $template = 'layout') {
|
||||
$html = file_get_contents(sprintf('templates/%s.html', $template));
|
||||
|
||||
$patterns = array_map(function($p) { return "{{ $p }}"; }, array_keys($context));
|
||||
return str_replace($patterns, array_values($context), $html);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user