* @version $Revision: 18172 $ */ class AjaxianTheme extends GalleryTheme { function AjaxianTheme() { global $gallery; $this->setId('ajaxian'); $this->setName($gallery->i18n('Ajaxian')); $this->setDescription($gallery->i18n('DHTML-enabled Slideshow theme')); $this->setVersion('1.0.4'); $this->setRequiredCoreApi(array(7, 27)); $this->setRequiredThemeApi(array(2, 5)); $this->setStandardSettings( array('rows' => 3, 'columns' => 8, 'showAlbumOwner' => 0, 'itemFrame' => '', 'photoFrame' => '', 'colorpack' => '', 'showMicroThumbs' => 0, 'sidebarBlocks' => serialize(array()), 'albumBlocks' => serialize(array( array('core.ItemLinks', array('useDropdown' => true)))), 'photoBlocks' => serialize(array( array('exif.ExifInfo', array()))))); } /** * @see GalleryTheme::showAlbumPage */ function showAlbumPage(&$template, $item, $params, $childIds) { $ret = $this->loadCommonTemplateData( $template, $item, $params, array('owner', 'viewCount', 'childCount', 'descendentCount', 'parents', 'peers', 'systemLinks', 'itemLinks', 'itemSummaries', 'permissions', 'thumbnails', 'pageNavigator', 'jumpRange'), $childIds); if ($ret) { return array($ret, null); } $ret = $this->preloadBlock($template, 'search.SearchBlock'); if ($ret) { return array($ret, null); } /* Add in our extra stuff */ $theme =& $template->getVariableByReference('theme'); /* From slider */ list ($ret, $imageWidths, $imageHeights) = $this->_buildItemList($childIds, $theme['children']); if ($ret) { return array($ret, null); } $theme['imageWidths'] = implode(',', $imageWidths); $theme['imageHeights'] = implode(',', $imageHeights); $theme['imageCount'] = count($imageWidths); return array(null, 'theme.tpl'); } /** * @see GalleryTheme::showPhotoPage */ function showPhotoPage(&$template, $item, $params) { $dataTypes = array('owner', 'parents', 'systemLinks', 'itemLinks', 'permissions', 'itemLinksDetailed', 'itemNavigator', 'imageViews'); if (!empty($params['showMicroThumbs'])) { $dataTypes[] = 'navThumbnails'; } $ret = $this->loadCommonTemplateData($template, $item, $params, $dataTypes); if ($ret) { return array($ret, null); } $ret = $this->preloadBlock($template, 'search.SearchBlock'); if ($ret) { return array($ret, null); } return array(null, 'theme.tpl'); } /** * @see GalleryTheme::showModulePage */ function showModulePage(&$template, $item, $params, $templateFile) { $ret = $this->loadCommonTemplateData($template, $item, $params, array('parents', 'systemLinks')); if ($ret) { return array($ret, null); } $ret = $this->preloadBlock($template, 'search.SearchBlock'); if ($ret) { return array($ret, null); } return array(null, 'theme.tpl'); } /** * @see GalleryTheme::showAdminPage */ function showAdminPage(&$template, $item, $params, $templateFile) { $ret = $this->loadCommonTemplateData($template, $item, $params, array('parents', 'systemLinks')); if ($ret) { return array($ret, null); } $ret = $this->preloadBlock($template, 'search.SearchBlock'); if ($ret) { return array($ret, null); } return array(null, 'theme.tpl'); } /** * @see GalleryTheme::showErrorPage */ function showErrorPage(&$template) { return array(null, 'error.tpl'); } /** * @see GalleryTheme::showProgressBarPage */ function showProgressBarPage(&$template, $item, $params) { $ret = $this->loadCommonTemplateData($template, $item, $params, array('parents', 'systemLinks')); if ($ret) { return array($ret, null); } $ret = $this->preloadBlock($template, 'search.SearchBlock'); if ($ret) { return array($ret, null); } return array(null, 'theme.tpl'); } /** * Prepare data about items in this album. * @access private */ function _buildItemList($childIds, &$children) { $imageWidths = $imageHeights = $childItems = array(); if (!empty($childIds)) { $ret = GalleryCoreApi::studyPermissions($childIds); if ($ret) { return array($ret, null, null); } list ($ret, $childItems) = GalleryCoreApi::loadEntitiesById($childIds, 'GalleryItem'); if ($ret) { return array($ret, null, null); } list ($ret, $resizedImages) = GalleryCoreApi::fetchResizesByItemIds($childIds); if ($ret) { return array($ret, null, null); } list ($ret, $preferredFullImages) = GalleryCoreApi::fetchPreferredsByItemIds($childIds); if ($ret) { return array($ret, null, null); } list ($ret, $thumbnails) = GalleryCoreApi::fetchThumbnailsByItemIds($childIds); if ($ret) { return array($ret, null, null); } } $i = -1; foreach ($childItems as $child) { $i++; $childId = $child->getId(); if (!GalleryUtilities::isA($child, 'GalleryDataItem')) { continue; } if (isset($thumbnails[$childId])) { if (!($thumbnails[$childId]->getWidth() && $thumbnails[$childId]->getHeight())) { list ($ret, $thumbnails[$childId]) = GalleryCoreApi::rebuildDerivativeCache($thumbnails[$childId]->getId()); if ($ret) { return array($ret, null, null); } } $children[$i]['thumbnail'] = (array)$thumbnails[$childId]; } list ($ret, $permissions) = GalleryCoreApi::getPermissions($childId); if ($ret) { return array($ret, null, null); } $images = array(); if (isset($permissions['core.viewResizes']) && isset($resizedImages[$childId])) { foreach ($resizedImages[$childId] as $resize) { $images[] = $resize; } } if (empty($images)) { if (isset($permissions['core.viewSource'])) { /* Full size; check for preferred copy */ if (isset($preferredFullImages[$childId])) { $images[] = $preferredFullImages[$childId]; } else if ($child->canBeViewedInline()) { $images[] = $child; } } } if (!empty($images)) { $image = $images[0]; /* Rebuild derivative if needed so width/height known */ if (GalleryUtilities::isA($image, 'GalleryDerivativeImage') && !($image->getWidth() && $image->getHeight())) { list ($ret, $image) = GalleryCoreApi::rebuildDerivativeCache($image->getId()); if ($ret) { return array($ret, null, null); } } $image = (array)$image; } $children[$i]['imageIndex'] = count($imageWidths); if (GalleryUtilities::isExactlyA($child, 'GalleryPhotoItem') && !empty($image) && $image['width'] > 0 && $image['height'] > 0) { $children[$i]['image'] = $image; $imageWidths[] = $image['width']; $imageHeights[] = $image['height']; } else { $imageWidths[] = $imageHeights[] = -1; } } return array(null, $imageWidths, $imageHeights); } } ?>