adapted views to new layout

This commit is contained in:
Steffen Vogel 2010-09-19 20:47:59 +02:00
parent 0d056ee51f
commit b3c85c8239
3 changed files with 63 additions and 43 deletions

View file

@ -47,30 +47,29 @@ class JSON extends View {
/**
* constructor
*/
public function __construct(HTTP\Request $request, HTTP\Response $response, $padding = FALSE) {
public function __construct(HTTP\Request $request, HTTP\Response $response) {
parent::__construct($request, $response);
$this->json = new Util\JSON();
$this->json['source'] = 'volkszaehler.org';
$this->json['version'] = VZ_VERSION;
$this->setPadding($padding);
$this->response->setHeader('Content-type', 'application/json');
$this->setPadding($request->getParameter('padding'));
}
public function addChannel(Model\Channel $channel, array $data = NULL) {
$jsonChannel = self::convertEntity($channel);
$jsonChannel['type'] = $channel->getType();
if (isset($data)) {
$jsonChannel['data'] = self::convertData($data);
}
$this->json['channels'][] = $jsonChannel;
$this->json['channel'] = $jsonChannel;
}
public function addAggregator(Model\Aggregator $aggregator, $recursive = FALSE) {
$this->json['groups'][] = self::convertAggregator($aggregator, $recursive);
$this->json['group'] = self::convertAggregator($aggregator, $recursive);
}
public function addDebug(Util\Debug $debug) {
@ -108,8 +107,8 @@ class JSON extends View {
$jsonEntity = array();
$jsonEntity['uuid'] = (string) $entity->getUuid();
foreach ($entity->getProperties() as $property) {
$jsonEntity[$property->getName()] = $property->getValue();
foreach ($entity->getProperties() as $key => $value) {
$jsonEntity[$key] = $value;
}
return $jsonEntity;
@ -123,10 +122,10 @@ class JSON extends View {
}
if ($recursive) {
$jsonAggregator['children'] = array();
$jsonAggregator['groups'] = array();
foreach ($aggregator->getChildren() as $subAggregator) {
$jsonAggregator['children'][] = $this->toJson($subAggregator, $recursive); // recursion
$jsonAggregator['groups'][] = $this->toJson($subAggregator, $recursive); // recursion
}
}
@ -134,26 +133,21 @@ class JSON extends View {
}
protected static function convertData($data) {
$jsonData = array();
array_walk($data, function(&$reading) {
$reading[1] = round($reading[1], View::PRECISSION);
});
foreach ($data as $reading) {
$jsonData[] = array(
(int) $reading[0],
(float) round($reading[1], View::PRECISSION),
(int) $reading[2]
);
}
return $jsonData;
return $data;
}
public function renderResponse() {
public function render() {
$json = $this->json->encode((Util\Debug::isActivated()) ? JSON_PRETTY : 0);
if ($this->padding) {
$json = 'if (self.' . $this->padding . ') { ' . $this->padding . '(' . $json . '); }';
}
$this->response->setHeader('Content-type', 'application/json');
echo $json;
}

View file

@ -48,8 +48,8 @@ class JpGraph extends View {
protected $channels = array();
protected $width = 800;
protected $height = 400;
const WIDTH = 800;
const HEIGHT = 400;
protected static $colors = array('chartreuse', 'chocolate1', 'cyan', 'blue', 'lightcyan4', 'gold');
@ -64,7 +64,10 @@ class JpGraph extends View {
public function __construct(HTTP\Request $request, HTTP\Response $response, $format = 'png') {
parent::__construct($request, $response);
$this->graph = new \Graph($this->width,$this->height);
$width = $this->request->getParameter('width') ? $this->request->getParameter('width') : self::WIDTH;
$height = $this->request->getParameter('height') ? $this->request->getParameter('height') : self::HEIGHT;
$this->graph = new \Graph($width, $height);
$this->graph->img->SetImgFormat($format);
@ -125,7 +128,7 @@ class JpGraph extends View {
$this->channels[] = $channel;
}
else {
throw new \Exception('can\'t plot channels without data!');
throw new \Exception('Can\'t plot channels without data!');
}
}

View file

@ -28,25 +28,13 @@ use Volkszaehler\View\HTTP;
use Volkszaehler\Util;
/**
* Interface for all View classes
*
* @author Steffen Vogel <info@steffenvogel.de>
* @package default
*/
interface ViewInterface {
public function addChannel(Model\Channel $channel, array $data = NULL);
function addAggregator(Model\Aggregator $aggregator);
function addDebug(Util\Debug $debug);
}
/**
* Superclass for all view classes
* Base class for all view formats
*
* @package default
* @author Steffen Vogel <info@steffenvogel.de>
*
*/
abstract class View implements ViewInterface {
abstract class View {
/**
* @var integer round all values to x decimals
*/
@ -79,6 +67,11 @@ abstract class View implements ViewInterface {
set_error_handler(array($this, 'errorHandler'));
}
public function __desctruct() {
restore_exception_handler();
restore_error_handler();
}
/**
* error & exception handling
*/
@ -91,22 +84,52 @@ abstract class View implements ViewInterface {
$code = ($exception->getCode() == 0 && HTTP\Response::getCodeDescription($exception->getCode())) ? 400 : $exception->getCode();
$this->response->setCode($code);
$this->sendResponse();
$this->send();
die();
}
public function sendResponse() {
public function send() {
if (Util\Debug::isActivated()) {
$this->addDebug(Util\Debug::getInstance());
}
$this->renderResponse();
$this->render();
$this->response->send();
}
protected abstract function renderResponse();
/**
*
* @param mixed $data
*/
public function add($data) {
if (isset($data)) {
if (is_array($data)) {
array_walk($data, array($this, 'add'));
}
else {
if ($data instanceof Model\Channel) {
$this->addChannel($data);
}
elseif ($data instanceof Model\Aggregator) {
$this->addAggregator($data);
}
elseif ($data instanceof \Exception) {
$this->addException($data);
}
elseif ($data instanceof Util\Debug) {
$this->addDebug($data);
}
else {
throw new \Exception('Can\'t show ' . get_class($data));
}
}
}
}
protected abstract function render();
protected abstract function addException(\Exception $exception);
protected abstract function addDebug(Util\Debug $debug);
}
?>