* Java applet: @author Rüdiger Appel * http://www.3quarks.com/Applets/Metamorphose/ */ /** * The implementation of the Panorama module * * @package Panorama */ class PanoramaModule extends GalleryModule { function PanoramaModule() { global $gallery; $this->setId('panorama'); $this->setName('Panorama'); $this->setDescription($gallery->i18n('View wide jpeg/gif images in a java applet viewer')); $this->setVersion('0.8.7'); $this->setGroup('display', $this->translate('Display')); $this->setCallbacks('getSiteAdminViews|getItemLinks'); $this->setRequiredCoreApi(array(4, 0)); $this->setRequiredModuleApi(array(0, 9)); } /** * @see GalleryModule::upgrade() */ function upgrade($currentVersion) { if (!isset($currentVersion)) { /* Initial install */ foreach (array('itemType' => 1, 'itemLink' => 1, 'width' => 800) as $key => $value) { $ret = $this->setParameter($key, $value); if ($ret->isError()) { return $ret->wrap(__FILE__, __LINE__); } } } return GalleryStatus::success(); } /** * @see GalleryModule::performFactoryRegistrations() */ function performFactoryRegistrations() { $ret = GalleryCoreApi::registerFactoryImplementation( 'GalleryEntity', 'PanoramaDerivativeImage', 'PanoramaDerivativeImage', 'modules/panorama/classes/PanoramaDerivativeImage.class', 'panorama', null); if ($ret->isError()) { return $ret->wrap(__FILE__, __LINE__); } $ret = GalleryCoreApi::registerFactoryImplementation( 'GalleryEntity', 'PanoramaPhotoItem', 'PanoramaPhotoItem', 'modules/panorama/classes/PanoramaPhotoItem.class', 'panorama', null); if ($ret->isError()) { return $ret->wrap(__FILE__, __LINE__); } $ret = GalleryCoreApi::registerFactoryImplementation( 'GalleryDerivative', 'PanoramaDerivativeImage', 'PanoramaDerivativeImage', 'modules/panorama/classes/PanoramaDerivativeImage.class', 'panorama', array('PanoramaPhotoItem')); if ($ret->isError()) { return $ret->wrap(__FILE__, __LINE__); } $ret = GalleryCoreApi::registerFactoryImplementation( 'ItemEditOption', 'PanoramaOption', 'PanoramaOption', 'modules/panorama/PanoramaOption.inc', 'panorama', array('ItemEditPhoto')); if ($ret->isError()) { return $ret->wrap(__FILE__, __LINE__); } return GalleryStatus::success(); } /** * @see GalleryModule::isRecommendedDuringInstall() */ function isRecommendedDuringInstall() { return true; } /** * @see GalleryModule::autoConfigure() */ function autoConfigure() { /* We don't require any special configuration */ return array(GalleryStatus::success(), true); } /** * @see GalleryModule::deactivate() */ function deactivate() { require_once(dirname(__FILE__) . '/classes/PanoramaHelper.class'); list ($ret, $count) = PanoramaHelper::fetchItemCount(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($count > 0) { /* Can't deactivate if panorama entities exist.. */ return array(GalleryStatus::success(), array('view' => 'core:SiteAdmin', 'subView' => 'panorama:PanoramaSiteAdmin')); } list ($ret, $redirect) = parent::deactivate(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } return array(GalleryStatus::success(), $redirect); } /** * @see GalleryModule::getSiteAdminViews() */ function getSiteAdminViews() { return array(GalleryStatus::success(), array(array('name' => $this->translate('Panorama'), 'view' => 'panorama:PanoramaSiteAdmin'))); } /** * @see GalleryModule::getItemLinks() */ function getItemLinks($items) { $links = array(); list ($ret, $param) = GalleryCoreApi::fetchAllPluginParameters('module', 'panorama'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($param['itemLink']) { require_once(dirname(__FILE__) . '/classes/PanoramaHelper.class'); list ($ret, $images) = PanoramaHelper::fetchViewableImages($items); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } foreach ($items as $item) { if (!isset($images[$item->getId()])) { continue; } $image = $images[$item->getId()]; $mimeType = $item->getMimeType(); $width = $image->getWidth(); /* Applet supports jpeg and gif images */ if (GalleryUtilities::isA($item, 'GalleryPhotoItem') && !GalleryUtilities::isA($item, 'PanoramaPhotoItem') && preg_match(':^image/(gif|p?jpeg)$:', $mimeType) && $width > $param['width'] && ($image->getHeight() / $width < 0.6)) { $links[$item->getId()][] = array('text' => $this->translate('view panorama'), 'params' => array('view' => 'panorama:Panorama', 'itemId' => $item->getId())); } } } return array(GalleryStatus::success(), $links); } } ?>