*/
/**
* 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('
',
$newImage,
$newAltString);
} else if ($param['days.updated'] > 0 && $item->getModificationTimestamp() > $updatedTime) {
$summaries[$item->getId()] = sprintf('
',
$updatedImage,
$updatedAltString);
}
}
return array(GalleryStatus::success(), $summaries);
}
}
?>