/**
* JSON representation of this gallery's images. We don't use
* Ansel_Gallery::toJson() on purpose since that is a general jsonification
* of the gallery data. This method is specific to the view, paging, links
* etc...
*
* @param Ansel_Gallery $gallery The gallery to represent in this view
* @param array $params An array of parameters for this method:
* <pre>
* full - Should a full URL be generated? [false]
* from - Starting image count [0]
* count - The number of images to include (starting at from) [0]
* image_view - The type of ImageGenerator to obtain the src url for. [screen]
* view_links - Should the JSON include links to the Image and/or Gallery View? [false]
* perpage - Number of images per page [from user prefs]
* </pre>
*
* @return string A serialized JSON array.
*/
public static function json(Ansel_Gallery $gallery, $params = array())
{
global $conf, $prefs;
$default = array('full' => false, 'from' => 0, 'count' => 0, 'image_view' => 'screen', 'view_links' => false, 'perpage' => $prefs->getValue('tilesperpage', $conf['thumbnail']['perpage']));
$params = array_merge($default, $params);
$json = array();
$curimage = 0;
$curpage = 0;
if (empty($params['images'])) {
$images = $gallery->getImages($params['from'], $params['count']);
}
$style = $gallery->getStyle();
if ($params['image_view'] == 'thumb' && !empty($params['generator'])) {
$style->thumbstyle = $params['generator'];
}
foreach ($images as $image) {
// Calculate the page this image will appear on in the gallery view.
if (++$curimage > $params['perpage']) {
++$curpage;
$curimage = 0;
}
$data = array((string) Ansel::getImageUrl($image->id, $params['image_view'], $params['full'], $style), htmlspecialchars($image->filename), $GLOBALS['injector']->getInstance('Horde_Core_Factory_TextFilter')->filter($image->caption, 'text2html', array('parselevel' => Horde_Text_Filter_Text2html::MICRO_LINKURL)), $image->id, $curpage);
if ($params['view_links']) {
$data[] = (string) Ansel::getUrlFor('view', array('gallery' => $gallery->id, 'slug' => $gallery->get('slug'), 'image' => $image->id, 'view' => 'Image', 'page' => $curpage), true);
$data[] = (string) Ansel::getUrlFor('view', array('gallery' => $image->gallery, 'slug' => $gallery->get('slug'), 'view' => 'Gallery'), true);
}
// Source, Width, Height, Name, Caption, Image Id, Gallery Page
$json[] = $data;
}
return Horde_Serialize::serialize($json, Horde_Serialize::JSON);
}