/** * 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); }
/** * Outputs the html for a gallery tile. * * @param Ansel_Gallery $gallery The Ansel_Gallery we are displaying. * @param Ansel_Style $style A style object. * @param boolean $mini Force the use of a mini thumbail? * @param array $params An array containing additional parameters. * Currently, gallery_view_url and * image_view_url are used to override the * respective urls. %g and %i are replaced * with image id and gallery id, respectively * * * @return Outputs the HTML for the tile. */ public static function getTile(Ansel_Gallery $gallery, Ansel_Style $style = null, $mini = false, array $params = array()) { global $prefs, $registry, $injector; // Create view $view = $injector->createInstance('Horde_View'); $view->addTemplatePath(ANSEL_TEMPLATES . '/tile'); $view->gallery = $gallery; $view_type = Horde_Util::getFormData('view', 'Gallery'); $haveSearch = $view_type == 'Results' ? 1 : 0; if ($view_type == 'Results' || $view_type == 'List' || basename($_SERVER['PHP_SELF']) == 'index.php' && $prefs->getValue('defaultview') == 'galleries') { $showOwner = true; } else { $showOwner = false; } // Use the galleries style if not explicitly passed. if (is_null($style)) { $style = $gallery->getStyle(); } // If the gallery has subgalleries, and no images, use one of the // subgalleries' stack image. hasSubGalleries already takes // permissions into account. if ($gallery->hasPermission($registry->getAuth(), Horde_Perms::READ) && !$gallery->countImages() && $gallery->hasSubGalleries()) { try { $galleries = $injector->getInstance('Ansel_Storage')->listGalleries(array('parent' => $gallery->id, 'all_levels' => false, 'perm' => Horde_Perms::READ)); foreach ($galleries as $sgallery) { if ($default_img = $sgallery->getKeyImage($style)) { $view->gallery_image = Ansel::getImageUrl($default_img, $mini ? 'mini' : 'thumb', true, $style); } } } catch (Ansel_Exception $e) { } } elseif ($gallery->hasPermission($registry->getAuth(), Horde_Perms::READ) && $gallery->countImages()) { $thumbstyle = $mini ? 'mini' : 'thumb'; if ($gallery->hasPasswd()) { $view->gallery_image = Horde_Themes::img('gallery-locked.png'); } else { $view->gallery_image = Ansel::getImageUrl($gallery->getKeyImage($style), $thumbstyle, true, $style); } } // If no image at this point, we can't get one. if (empty($view->gallery_image)) { $view->gallery_image = Horde_Themes::img('thumb-error.png'); } // Check for being called via the api and generate correct view links if (!isset($params['gallery_view_url'])) { $view->view_link = Ansel::getUrlFor('view', array('gallery' => $gallery->id, 'view' => 'Gallery', 'havesearch' => $haveSearch, 'slug' => $gallery->get('slug'))); } else { $view->view_link = new Horde_Url(str_replace(array('%g', '%s'), array($gallery->id, $gallery->get('slug')), urldecode($params['gallery_view_url']))); } if ($gallery->hasPermission($registry->getAuth(), Horde_Perms::EDIT) && !$mini) { $view->properties_link = Horde::url('gallery.php', true)->add(array('gallery' => $gallery->id, 'actionID' => 'modify', 'havesearch' => $haveSearch, 'url' => Horde::selfUrl(true, false, true))); } if ($showOwner && !$mini && $registry->getAuth() != $gallery->get('owner')) { $view->owner_link = Ansel::getUrlFor('view', array('view' => 'List', 'owner' => $gallery->get('owner'), 'groupby' => 'owner'), true); $view->owner_string = $gallery->getIdentity()->getValue('fullname'); if (empty($view->owner_string)) { $view->owner_string = $gallery->get('owner'); } } $view->background_color = $style->background; $view->gallery_count = $gallery->countImages(true); $view->date_format = $prefs->getValue('date_format'); return $view->render('gallery' . ($mini ? 'mini' : '')); }