/** * @param boolean $retry * * @return Ansel_Gallery */ private function _getGallery($retry = false) { // Make sure we haven't already selected a gallery. if ($this->_gallery instanceof Ansel_Gallery) { return $this->_gallery; } // Get the gallery object and cache it. if (isset($this->_params['gallery']) && $this->_params['gallery'] != '__random') { $this->_gallery = $GLOBALS['injector']->getInstance('Ansel_Storage')->getGallery($this->_params['gallery']); } else { $this->_gallery = $GLOBALS['injector']->getInstance('Ansel_Storage')->getRandomGallery(); } // Protect at least a little bit against getting an empty gallery. We // can't just loop until we get one with images since it's possible we // actually don't *have* any with images yet. if ($this->_params['gallery'] == '__random' && !empty($this->_gallery) && !$this->_gallery->countImages() && $this->_gallery->hasSubGalleries() && !$retry) { $this->_gallery = null; $this->_gallery = $this->_getGallery(true); } if (empty($this->_gallery)) { throw new Horde_Exception_NotFound(_("Gallery does not exist.")); } elseif (!$this->_gallery->hasPermission($GLOBALS['registry']->getAuth(), Horde_Perms::SHOW) || !$this->_gallery->isOldEnough() || $this->_gallery->hasPasswd()) { throw new Horde_Exception_PermissionDenied(_("Access denied viewing this gallery.")); } // Return the gallery. return $this->_gallery; }
/** * 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' : '')); }