getAlbum(); $a = array( 'width' => $img->getWidth(), 'height' => $img->getHeight(), 'title' => $img->getTitle(), 'desc' => $img->getDesc(), 'link' => 'http://' . $_SERVER['SERVER_NAME'] . '/' . $img->getImageLink(), 'thumbLink' => $img->getThumb() ); return $this->jsonize($a); } function getQueryTarget() { global $_zp_gallery; $album = $_REQUEST['album']; $image = $_REQUEST['image']; $a = new Album($_zp_gallery, $album); return new _Image($a, $image); } } class JsonAlbumEncoder extends JsonEncoder { function JsonAlbumEncoder() { } function encode($album) { $images = array(); $imgs = $album->getImages(); foreach ( $imgs as $i ) { $ref = new _Image($album, $i); $ji = new JsonImageEncoder(); $json = $ji->encode($ref); if ( isset($ji) ) { $images[] = $json; } } $a = array( 'albumTitle' => $album->getTitle(), 'albumLink' => 'http://' . $_SERVER['SERVER_NAME'] . '/' . $album->getAlbumLink(), 'images' => $images ); return $this->jsonize($a); } function getQueryTarget() { global $_zp_gallery; $album = $_REQUEST['album']; return new Album($_zp_gallery, $album); } } abstract class JsonEncoder { protected function jsonize($o) { global $service_json; return $service_json->encode($o); } function setHeaders() { header('Cache-Control: no-cache'); header('Content-type: application/json;charset=utf-8'); } } abstract class Encoder { abstract function encode($persistable); abstract function getQueryTarget(); } class EncoderService { static $encoders = array(); static $defaults = '{ }'; static function encode() { $encoder = self::lookupEncoder(); if ( !isset($encoder) ) { return self::$defaults; } $target = $encoder->getQueryTarget(); if ( !isset($target) ) { return self::$defaults; } return $encoder->encode($target); } static function registerEncoder($encoder, $parameters) { self::$encoders[] = array( 'encoder' => $encoder, 'parameters' => $parameters ); } private function lookupEncoder() { foreach ( self::$encoders as $e ) { $candidate = true; $params = $e['parameters']; foreach ( $params as $p ) { if ( !isset($_REQUEST[$p]) ) { $candidate = false; break; } } if ( $candidate ) { return $e['encoder']; } } return null; } } EncoderService::registerEncoder(new JsonImageEncoder(), array('album', 'image')); EncoderService::registerEncoder(new JsonAlbumEncoder(), array('album')); ?>