*/ /** * Add new/updated image in summary info for new/updated items. * New sort option to put new items in front, follwed by another sort. * Thanks to Felix Rabinovich (virshu) for the idea. * * @package NewItems */ class NewItemsModule extends GalleryModule { function NewItemsModule() { global $gallery; $this->setId('newitems'); $this->setName($gallery->i18n('New Items')); $this->setDescription($gallery->i18n('Highlight new/updated Gallery items')); $this->setVersion('0.5.1'); $this->setGroup('display', $this->translate('Display')); $this->setCallbacks('getSiteAdminViews|getItemSummaries'); $this->setRequiredCoreApi(array(4, 0)); $this->setRequiredModuleApi(array(0, 9)); } /** * @see GalleryModule::upgrade() */ function upgrade($currentVersion) { if (!isset($currentVersion)) { foreach (array('days.new' => '7', 'days.updated' => '7' ) 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( 'GallerySortInterface_1_1', 'NewItemsSortOrder', 'NewItems', 'modules/newitems/classes/NewItemsSortOrder.class', 'newitems', null); 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() { GalleryCoreApi::requireOnce(dirname(__FILE__) . '/classes/NewItemsHelper.class'); list ($ret, $count) = NewItemsHelper::fetchAlbumCount(); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } list ($ret, $default) = GalleryCoreApi::getPluginParameter('module', 'core', 'default.orderBy'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } if ($count > 0 || strpos($default, 'NewItems') !== false) { // Can't deactivate if NewItems sort is in use.. return array(GalleryStatus::success(), array('view' => 'core:SiteAdmin', 'subView' => 'newitems:NewItemsSiteAdmin')); } 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('New Items'), 'view' => 'newitems:NewItemsSiteAdmin'))); } /** * @see GalleryModule::getItemSummaries() */ function getItemSummaries($items) { global $gallery; $urlGenerator =& $gallery->getUrlGenerator(); $newImage = $urlGenerator->generateUrl( array('href' => 'modules/newitems/images/new.gif'), false); $updatedImage = $urlGenerator->generateUrl( array('href' => 'modules/newitems/images/updated.gif'), false); list ($ret, $param) = GalleryCoreApi::fetchAllPluginParameters('module', 'newitems'); if ($ret->isError()) { return array($ret->wrap(__FILE__, __LINE__), null); } $newTime = time() - $param['days.new'] * 86400; $updatedTime = time() - $param['days.updated'] * 86400; $newAltString = $this->translate('New'); $updatedAltString = $this->translate('Updated'); $summaries = array(); foreach ($items as $item) { if ($param['days.new'] > 0 && $item->getCreationTimestamp() > $newTime) { $summaries[$item->getId()] = sprintf('%s', $newImage, $newAltString); } else if ($param['days.updated'] > 0 && $item->getModificationTimestamp() > $updatedTime) { $summaries[$item->getId()] = sprintf('%s', $updatedImage, $updatedAltString); } } return array(GalleryStatus::success(), $summaries); } } ?>