From acc2df1251a1c1b9ec5ede13bdf46d516dc64b0d Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Wed, 14 May 2014 02:16:31 +0200 Subject: use more flexible serializer that ignores nulls, non entity values and responses --- controller/entityapiserializer.php | 48 ++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 10 deletions(-) (limited to 'controller/entityapiserializer.php') diff --git a/controller/entityapiserializer.php b/controller/entityapiserializer.php index 8bd17ba29..b84006750 100644 --- a/controller/entityapiserializer.php +++ b/controller/entityapiserializer.php @@ -12,6 +12,9 @@ namespace OCA\News\Controller; use \OCP\AppFramework\Http\IResponseSerializer; +use \OCP\AppFramework\Http\Response; + +use \OCA\News\Db\IAPI; class EntityApiSerializer implements IResponseSerializer { @@ -23,24 +26,49 @@ class EntityApiSerializer implements IResponseSerializer { /** - * Wrap a list of entities in an array with $level as index and serialize - * them using the toAPI method + * Call toAPI() method on all entities. Works on + * @param mixed $data: + * * Entity + * * Entity[] + * * array('level' => Entity[]) + * * Response */ public function serialize($data) { - if(!is_array($data)) { - $data = array($data); + + if($data === null || $data instanceof Response) { + return $data; } - $response = array( - $this->level => array() - ); + if($data instanceof IAPI) { + return array( + $this->level => array($data->toAPI()) + ); + } - foreach($data as $entity) { - $response[$this->level][] = $entity->toAPI(); + if(is_array($data) && array_key_exists($this->level, $data)) { + $data[$this->level] = $this->convert($data[$this->level]); + } elseif(is_array($data)) { + $data = array( + $this->level => $this->convert($data) + ); } - return $response; + return $data; } + private function convert($entities) { + $converted = array(); + + foreach($entities as $entity) { + if($entity instanceof IAPI) { + $converted[] = $entity->toAPI(); + } else { + $converted[] = $entity; + } + } + + return $converted; + } + } \ No newline at end of file -- cgit v1.2.3