| |
* It supports standard gallery pages as well a custom and Zenpage news articles, categories and pages.
*
* @param string $separator How you wish the parts to be separated
* @param bool $listparentalbums If the parent albums should be printed in reversed order before the current
* @param bool $listparentpage If the parent Zenpage pages should be printed in reversed order before the current page
*/
function printHeadTitle($separator = ' | ', $listparentalbums = true, $listparentpages = true) {
echo '' . getHeadTitle($separator, $listparentalbums, $listparentpages) . '';
}
/**
* Returns the raw description of the gallery.
*
* @return string
*/
function getGalleryDesc() {
global $_zp_gallery;
return $_zp_gallery->getDesc();
}
/**
* Returns a text-only description of the gallery.
*
* @return string
*/
function getBareGalleryDesc() {
return getBare(getGalleryDesc());
}
/**
* Prints the description of the gallery.
*/
function printGalleryDesc() {
echo html_encodeTagged(getGalleryDesc());
}
function printBareGalleryDesc() {
echo html_encode(getBareGalleryDesc());
}
/**
* Returns the name of the main website as set by the "Website Title" option
* on the gallery options tab. Use this if Zenphoto is only a part of your website.
*
* @return string
*/
function getMainSiteName() {
global $_zp_gallery;
return $_zp_gallery->getWebsiteTitle();
}
/**
* Returns the URL of the main website as set by the "Website URL" option
* on the gallery options tab. Use this if Zenphoto is only a part of your website.
*
* @return string
*/
function getMainSiteURL() {
global $_zp_gallery;
return $_zp_gallery->getWebsiteURL();
}
/**
* Returns the URL of the main gallery index page. If a custom index page is set this returns that page.
* So this is not necessarily the home page of the site!
* @return string
*/
function getGalleryIndexURL() {
global $_zp_current_album, $_zp_gallery_page;
$page = 1;
if (in_context(ZP_ALBUM) && $_zp_gallery_page != 'index.php') {
$album = getUrAlbum($_zp_current_album);
$page = $album->getGalleryPage();
}
if (!$link = getCustomGalleryIndexURL($page)) {
$link = getStandardGalleryIndexURL($page);
}
return zp_apply_filter('getLink', $link, 'index.php', NULL);
}
/**
* Returns the url to the standard gallery index.php page
*
* @see getGalleryIndexURL()
*
* @param int $page Pagenumber to append
* @param bool $webpath host path to be prefixed. If "false" is passed you will get a localized "WEBPATH"
* @return string
*/
function getStandardGalleryIndexURL($page = 1, $webpath = null) {
if ($page > 1) {
return rewrite_path('/' . _PAGE_ . '/' . $page . '/', "/index.php?" . "page=" . $page, $webpath);
} else {
if (is_null($webpath)) {
if (class_exists('seo_locale')) {
$webpath = seo_locale::localePath();
} else {
$webpath = WEBPATH;
}
}
return $webpath . "/";
}
}
/**
* Gets the custom gallery index url if one is set, otherwise false
*
* @see getGalleryIndexURL()
*
* @global array $_zp_conf_vars
* @param int $page Pagenumber for pagination
* @param bool $webpath host path to be prefixed. If "false" is passed you will get a localized "WEBPATH"
* @return string
*/
function getCustomGalleryIndexURL($page = 1, $webpath = null) {
$custom_index = getOption('custom_index_page');
if ($custom_index) {
$link = getCustomPageURL($custom_index, '', $webpath);
if ($page > 1) {
if (MOD_REWRITE) {
$link .= $page . '/';
} else {
$link .= "&page=" . $page;
}
}
return $link;
}
return false;
}
/**
* Returns the name to the individual custom gallery index page name if set,
* otherwise returns generic custom gallery page "gallery.php" that is widely supported by themes
* If you need to check if there is an indovidual custom_index_page set use
* `getOption('custom_index_page')` or `getCustomGalleryIndexURL()`
*
* @return string
*/
function getCustomGalleryIndexPage() {
$custom_index = getOption('custom_index_page');
if ($custom_index) {
return $custom_index . '.php';
}
return 'gallery.php';
}
/**
* If a custom gallery index page is set this first prints a link to the actual site index (home page = index.php)
* followed by the gallery index page link. Otherwise just the gallery index link
*
* @since 1.4.9
* @param string $after Text to append after and outside the link for breadcrumbs
* @param string $text Name of the link, if NULL "Gallery" is used
* @param bool $printHomeURL In case of a custom gallery index, display breadcrumb with home link (default is true)
*/
function printGalleryIndexURL($after = NULL, $text = NULL, $printHomeURL = true) {
global $_zp_gallery_page;
if (is_null($text)) {
$text = gettext('Gallery');
}
$customgalleryindex = getOption('custom_index_page');
if ($customgalleryindex && $printHomeURL) {
printSiteHomeURL($after);
}
if ($_zp_gallery_page == getCustomGalleryIndexPage()) {
$after = NULL;
}
if (!$customgalleryindex || ($customgalleryindex && in_array($_zp_gallery_page, array('image.php', 'album.php', getCustomGalleryIndexPage())))) {
printLinkHTML(getGalleryIndexURL(), $text, $text, 'galleryindexurl');
echo $after;
}
}
/**
* Returns the home page link (WEBPATH) to the Zenphoto theme index.php page
* Use in breadcrumbs if the theme uses a custom gallery index page so the gallery is not the site's home page
*
* @since 1.4.9
* @global string $_zp_gallery_page
* @return string
*/
function getSiteHomeURL() {
return WEBPATH . '/';
}
/**
* Prints the home page link (WEBPATH with trailing slash) to a Zenphoto theme index.php page
* Use in breadcrumbs if the theme uses a custom gallery index page so the gallery is not the site's home page
*
* @param string $after Text after and outside the link for breadcrumbs
* @param string $text Text of the link, if NULL "Home"
*/
function printSiteHomeURL($after = NULL, $text = NULL) {
global $_zp_gallery_page;
if ($_zp_gallery_page == 'index.php') {
$after = '';
}
if (is_null($text)) {
$text = gettext('Home');
}
printLinkHTML(getSiteHomeURL(), $text, $text, 'homeurl');
echo $after;
}
/**
* If the privacy page url option is set this prints a link to it
* @param string $before To print before the link
* @param string $after To print after the link
*/
function printPrivacyPageLink($before = null, $after = null) {
$data = getDataUsageNotice();
if (!empty($data['url'])) {
echo $before;
printLinkHTML($data['url'], $data['linktext'], $data['linktext'], null, null);
echo $after;
}
}
/**
* Returns the number of albums.
*
* @return int
*/
function getNumAlbums() {
global $_zp_gallery, $_zp_current_album, $_zp_current_search;
if (in_context(ZP_SEARCH) && is_null($_zp_current_album)) {
return $_zp_current_search->getNumAlbums();
} else if (in_context(ZP_ALBUM)) {
return $_zp_current_album->getNumAlbums();
} else {
return $_zp_gallery->getNumAlbums();
}
}
/**
* Returns the name of the currently active theme
*
* @return string
*/
function getCurrentTheme() {
global $_zp_gallery;
return $_zp_gallery->getCurrentTheme();
}
/* * * Album AND Gallery Context *********** */
/* * *************************************** */
/**
* WHILE next_album(): context switches to Album.
* If we're already in the album context, this is a sub-albums loop, which,
* quite simply, changes the source of the album list.
* Switch back to the previous context when there are no more albums.
* Returns true if there are albums, false if none
*
* @param bool $all true to go through all the albums
* @param bool $mine override the password checks
* @return bool
* @since 0.6
*/
function next_album($all = false, $mine = NULL) {
global $_zp_albums, $_zp_gallery, $_zp_current_album, $_zp_page, $_zp_current_album_restore, $_zp_current_search;
if (is_null($_zp_albums)) {
if (in_context(ZP_SEARCH)) {
$_zp_albums = $_zp_current_search->getAlbums($all ? 0 : $_zp_page, NULL, NULL, true, $mine);
} else if (in_context(ZP_ALBUM)) {
$_zp_albums = $_zp_current_album->getAlbums($all ? 0 : $_zp_page, NULL, NULL, true, $mine);
} else {
$_zp_albums = $_zp_gallery->getAlbums($all ? 0 : $_zp_page, NULL, NULL, true, $mine);
}
if (empty($_zp_albums)) {
return NULL;
}
$_zp_current_album_restore = $_zp_current_album;
$_zp_current_album = newAlbum(array_shift($_zp_albums), true, true);
save_context();
add_context(ZP_ALBUM);
return true;
} else if (empty($_zp_albums)) {
$_zp_albums = NULL;
$_zp_current_album = $_zp_current_album_restore;
restore_context();
return false;
} else {
$_zp_current_album = newAlbum(array_shift($_zp_albums), true, true);
return true;
}
}
/**
* Returns the number of the current page without printing it.
*
* @return int
*/
function getCurrentPage() {
global $_zp_page;
return $_zp_page;
}
/**
* Gets an array of the album ids of all accessible albums (publich or user dependend)
*
* @param object $obj from whence to get the albums
* @param array $albumlist collects the list
* @param bool $scan force scan for new images in the album folder
*/
function getAllAccessibleAlbums($obj, &$albumlist, $scan) {
global $_zp_gallery;
$locallist = $obj->getAlbums();
foreach ($locallist as $folder) {
$album = newAlbum($folder);
If (!$album->isDynamic() && $album->checkAccess()) {
if ($scan)
$album->getImages();
$albumlist[] = $album->getID();
getAllAccessibleAlbums($album, $albumlist, $scan);
}
}
}
/**
* Returns the number of pages for the current object
*
* @param bool $_oneImagePage set to true if your theme collapses all image thumbs
* or their equivalent to one page. This is typical with flash viewer themes
*
* @return int
*/
function getTotalPages($_oneImagePage = false) {
global $_zp_gallery, $_zp_current_album, $_firstPageImages, $_zp_zenpage, $_zp_current_category;
if (in_context(ZP_ALBUM | ZP_SEARCH)) {
$albums_per_page = max(1, getOption('albums_per_page'));
$pageCount = (int) ceil(getNumAlbums() / $albums_per_page);
$imageCount = getNumImages();
if ($_oneImagePage) {
if ($_oneImagePage === true) {
$imageCount = min(1, $imageCount);
} else {
$imageCount = 0;
}
}
$images_per_page = max(1, getOption('images_per_page'));
$pageCount = ($pageCount + ceil(($imageCount - $_firstPageImages) / $images_per_page));
return $pageCount;
} else if (get_context() == ZP_INDEX) {
if (galleryAlbumsPerPage() != 0) {
return (int) ceil($_zp_gallery->getNumAlbums() / galleryAlbumsPerPage());
} else {
return NULL;
}
return NULL;
} else if (isset($_zp_zenpage)) {
if (in_context(ZP_ZENPAGE_NEWS_CATEGORY)) {
$cat = $_zp_current_category;
} else {
$cat = NULL;
}
return (int) ceil(count($_zp_zenpage->getArticles(0, NULL, true, NULL, NULL, NULL, $cat)) / ZP_ARTICLES_PER_PAGE);
}
}
/**
* Returns the URL of the page number passed as a parameter
*
* @param int $page Which page is desired
* @param int $total How many pages there are.
* @return int
*/
function getPageNumURL($page, $total = null) {
global $_zp_current_album, $_zp_gallery, $_zp_current_search, $_zp_gallery_page, $_zp_conf_vars;
if (is_null($total)) {
$total = getTotalPages();
}
if ($page <= 0 || $page > $total) {
return NULL;
}
if (in_context(ZP_SEARCH)) {
$searchwords = $_zp_current_search->codifySearchString();
$searchdate = $_zp_current_search->getSearchDate();
$searchfields = $_zp_current_search->getSearchFields(true);
$searchpagepath = getSearchURL($searchwords, $searchdate, $searchfields, $page, array('albums' => $_zp_current_search->getAlbumList()));
return $searchpagepath;
} else if (in_context(ZP_ALBUM)) {
return $_zp_current_album->getLink($page);
} else if (in_array($_zp_gallery_page, array('index.php', 'album.php', 'image.php'))) {
if (in_context(ZP_INDEX)) {
$pagination1 = '/';
$pagination2 = 'index.php';
if ($page > 1) {
$pagination1 .= _PAGE_ . '/' . $page . '/';
$pagination2 .= '?page=' . $page;
}
} else {
return NULL;
}
} else {
// handle custom page
$pg = stripSuffix($_zp_gallery_page);
if (array_key_exists($pg, $_zp_conf_vars['special_pages'])) {
$pagination1 = preg_replace('~^_PAGE_/~', _PAGE_ . '/', $_zp_conf_vars['special_pages'][$pg]['rewrite']) . '/';
} else {
$pagination1 = '/' . _PAGE_ . '/' . $pg . '/';
}
$pagination2 = 'index.php?p=' . $pg;
if ($page > 1) {
$pagination1 .= $page . '/';
$pagination2 .= '&page=' . $page;
}
}
return zp_apply_filter('getLink', rewrite_path($pagination1, $pagination2), $_zp_gallery_page, $page);
}
/**
* Returns true if there is a next page
*
* @return bool
*/
function hasNextPage() {
return (getCurrentPage() < getTotalPages());
}
/**
* Returns the URL of the next page. Use within If or while loops for pagination.
*
* @return string
*/
function getNextPageURL() {
return getPageNumURL(getCurrentPage() + 1);
}
/**
* Prints the URL of the next page.
*
* @param string $text text for the URL
* @param string $title Text for the HTML title
* @param string $class Text for the HTML class
* @param string $id Text for the HTML id
*/
function printNextPageURL($text, $title = NULL, $class = NULL, $id = NULL) {
if (hasNextPage()) {
printLinkHTML(getNextPageURL(), $text, $title, $class, $id);
} else {
echo "$text";
}
}
/**
* Returns TRUE if there is a previous page. Use within If or while loops for pagination.
*
* @return bool
*/
function hasPrevPage() {
return (getCurrentPage() > 1);
}
/**
* Returns the URL of the previous page.
*
* @return string
*/
function getPrevPageURL() {
return getPageNumURL(getCurrentPage() - 1);
}
/**
* Returns the URL of the previous page.
*
* @param string $text The linktext that should be printed as a link
* @param string $title The text the html-tag "title" should contain
* @param string $class Insert here the CSS-class name you want to style the link with
* @param string $id Insert here the CSS-ID name you want to style the link with
*/
function printPrevPageURL($text, $title = NULL, $class = NULL, $id = NULL) {
if (hasPrevPage()) {
printLinkHTML(getPrevPageURL(), $text, $title, $class, $id);
} else {
echo "$text";
}
}
/**
* Prints a page navigation including previous and next page links
*
* @param string $prevtext Insert here the linktext like 'previous page'
* @param string $separator Insert here what you like to be shown between the prev and next links
* @param string $nexttext Insert here the linktext like "next page"
* @param string $class Insert here the CSS-class name you want to style the link with (default is "pagelist")
* @param string $id Insert here the CSS-ID name if you want to style the link with this
*/
function printPageNav($prevtext, $separator, $nexttext, $class = 'pagenav', $id = NULL) {
echo "";
printPrevPageURL($prevtext, gettext("Previous Page"));
echo " $separator ";
printNextPageURL($nexttext, gettext("Next Page"));
echo "
\n";
}
/**
* Prints a list of all pages.
*
* @param string $class the css class to use, "pagelist" by default
* @param string $id the css id to use
* @param int $navlen Number of navigation links to show (0 for all pages). Works best if the number is odd.
*/
function printPageList($class = 'pagelist', $id = NULL, $navlen = 9) {
printPageListWithNav(null, null, false, false, $class, $id, false, $navlen);
}
/**
* returns a page nav list.
*
* @param bool $_oneImagePage set to true if there is only one image page as, for instance, in flash themes
* @param int $navlen Number of navigation links to show (0 for all pages). Works best if the number is odd.
* @param bool $firstlast Add links to the first and last pages of you gallery
* @param int $current the current page
* @param int $total total number of pages
*
*/
function getPageNavList($_oneImagePage, $navlen, $firstlast, $current, $total) {
$result = array();
if (hasPrevPage()) {
$result['prev'] = getPrevPageURL();
} else {
$result['prev'] = NULL;
}
if ($firstlast) {
$result[1] = getPageNumURL(1, $total);
}
if ($navlen == 0) {
$navlen = $total;
}
$extralinks = 2;
if ($firstlast)
$extralinks = $extralinks + 2;
$len = floor(($navlen - $extralinks) / 2);
$j = max(round($extralinks / 2), min($current - $len - (2 - round($extralinks / 2)), $total - $navlen + $extralinks - 1));
$ilim = min($total, max($navlen - round($extralinks / 2), $current + floor($len)));
$k1 = round(($j - 2) / 2) + 1;
$k2 = $total - round(($total - $ilim) / 2);
for ($i = $j; $i <= $ilim; $i++) {
$result[$i] = getPageNumURL($i, $total);
}
if ($firstlast) {
$result[$total] = getPageNumURL($total, $total);
}
if (hasNextPage()) {
$result['next'] = getNextPageURL();
} else {
$result['next'] = NULL;
}
return $result;
}
/**
* Prints a full page navigation including previous and next page links with a list of all pages in between.
*
* @param string $prevtext Insert here the linktext like 'previous page'
* @param string $nexttext Insert here the linktext like 'next page'
* @param bool $_oneImagePage set to true if there is only one image page as, for instance, in flash themes
* @param string $nextprev set to true to get the 'next' and 'prev' links printed
* @param string $class Insert here the CSS-class name you want to style the link with (default is "pagelist")
* @param string $id Insert here the CSS-ID name if you want to style the link with this
* @param bool $firstlast Add links to the first and last pages of you gallery
* @param int $navlen Number of navigation links to show (0 for all pages). Works best if the number is odd.
*/
function printPageListWithNav($prevtext, $nexttext, $_oneImagePage = false, $nextprev = true, $class = 'pagelist', $id = NULL, $firstlast = true, $navlen = 9) {
$current = getCurrentPage();
$total = max(1, getTotalPages($_oneImagePage));
$nav = getPageNavList($_oneImagePage, $navlen, $firstlast, $current, $total);
if ($total > 1) {
?>
class="">
-
-
$link) {
$d = $i - $last;
if ($d > 2) {
?>
-
-
- >
$link) {
$d = $i - $last;
if ($d > 2) {
$k1 = $i - (int) (($i - $last) / 2);
?>
-
-
-
-
getTitle();
}
/**
* Returns a text-only title of the current album.
*
* @return string
*/
function getBareAlbumTitle() {
return getBare(getAlbumTitle());
}
/**
* Returns an album title taged with of Not visible or password protected status
*
* @return string;
*/
function getAnnotatedAlbumTitle() {
global $_zp_current_album;
$title = getBareAlbumTitle();
$pwd = $_zp_current_album->getPassword();
if (zp_loggedin() && !empty($pwd)) {
$title .= "\n" . gettext('The album is password protected.');
}
if (!$_zp_current_album->isPublished()) {
$title .= "\n" . gettext('The album is un-published.');
}
return $title;
}
function printAnnotatedAlbumTitle() {
echo html_encode(getAnnotatedAlbumTitle());
}
/**
* Prints an encapsulated title of the current album.
* If you are logged in you can click on this to modify the title on the fly.
*
* @author Ozh
*/
function printAlbumTitle() {
echo html_encodeTagged(getAlbumTitle());
}
function printBareAlbumTitle() {
echo html_encodeTagged(getBareAlbumTitle());
}
/**
* Gets the 'n' for n of m albums
*
* @return int
*/
function albumNumber() {
global $_zp_current_album, $_zp_current_image, $_zp_current_search, $_zp_gallery;
$name = $_zp_current_album->getFileName();
if (in_context(ZP_SEARCH)) {
$albums = $_zp_current_search->getAlbums();
} else if (in_context(ZP_ALBUM)) {
$parent = $_zp_current_album->getParent();
if (is_null($parent)) {
$albums = $_zp_gallery->getAlbums();
} else {
$albums = $parent->getAlbums();
}
}
$c = 0;
foreach ($albums as $albumfolder) {
$c++;
if ($name == $albumfolder) {
return $c;
}
}
return false;
}
/**
* Returns an array of the names of the parents of the current album.
*
* @param object $album optional album object to use inseted of the current album
* @return array
*/
function getParentAlbums($album = null) {
$parents = array();
if (in_context(ZP_ALBUM)) {
global $_zp_current_album, $_zp_current_search, $_zp_gallery;
if (is_null($album)) {
if (in_context(ZP_SEARCH_LINKED) && !in_context(ZP_ALBUM_LINKED)) {
$album = $_zp_current_search->getDynamicAlbum();
if (empty($album))
return $parents;
} else {
$album = $_zp_current_album;
}
}
while (!is_null($album = $album->getParent())) {
array_unshift($parents, $album);
}
}
return $parents;
}
/**
* returns the breadcrumb item for the current images's album
*
* @param string $title Text to be used as the URL title tag
* @return array
*/
function getAlbumBreadcrumb($title = NULL) {
global $_zp_current_search, $_zp_gallery, $_zp_current_album, $_zp_last_album;
$output = array();
if (in_context(ZP_SEARCH_LINKED)) {
$album = NULL;
$dynamic_album = $_zp_current_search->getDynamicAlbum();
if (empty($dynamic_album)) {
if (!is_null($_zp_current_album)) {
if (in_context(ZP_ALBUM_LINKED) && $_zp_last_album == $_zp_current_album->name) {
$album = $_zp_current_album;
}
}
} else {
if (in_context(ZP_IMAGE) && in_context(ZP_ALBUM_LINKED)) {
$album = $_zp_current_album;
} else {
$album = $dynamic_album;
}
}
} else {
$album = $_zp_current_album;
}
if ($album) {
if (is_null($title)) {
$title = $album->getTitle();
if (empty($title)) {
$title = gettext('Album Thumbnails');
}
}
return array('link' => $album->getLink(), 'text' => $title, 'title' => getBare($title));
}
return false;
}
/**
* prints the breadcrumb item for the current images's album
*
* @param string $before Text to place before the breadcrumb
* @param string $after Text to place after the breadcrumb
* @param string $title Text to be used as the URL title attribute and text link
*/
function printAlbumBreadcrumb($before = '', $after = '', $title = NULL) {
if ($breadcrumb = getAlbumBreadcrumb($title)) {
if ($before) {
$output = '' . html_encode($before) . '';
} else {
$output = '';
}
$output .= '';
$output .= html_encode($breadcrumb['text']);
$output .= '';
if ($after) {
$output .= '' . html_encode($after) . '';
}
echo $output;
}
}
/**
* Prints the "breadcrumb" for a search page
* if the search was for a data range, the breadcrumb is "Archive"
* otherwise it is "Search"
* @param string $between Insert here the text to be printed between the links
* @param string $class is the class for the link (if present)
* @param string $search text for a search page title
* @param string $archive text for an archive page title
* @param string $format data format for archive page crumb
*/
function printSearchBreadcrumb($between = NULL, $class = NULL, $search = NULL, $archive = NULL, $format = '%B %Y') {
global $_zp_current_search;
if (is_null($between)) {
$between = ' | ';
}
if ($class) {
$class = ' class="' . $class . '"';
}
if ($d = $_zp_current_search->getSearchDate()) {
if (is_null($archive)) {
$text = gettext('Archive');
$textdecoration = true;
} else {
$text = getBare(html_encode($archive));
$textdecoration = false;
}
echo "";
printf('%s' . $text . '%s', $textdecoration ? '' : '', $textdecoration ? '' : '');
echo "";
echo '' . html_encode($between) . '';
if ($format) {
$d = strtotime($d);
$d = strftime($format, $d);
}
echo $d;
} else {
if (is_null($search)) {
$text = gettext('Search');
$textdecoration = true;
} else {
$text = getBare(html_encode($search));
$textdecoration = false;
}
printf('%s' . $text . '%s', $textdecoration ? '' : '', $textdecoration ? '' : '');
}
}
/**
* returns the breadcrumb navigation for album, gallery and image view.
*
* @return array
*/
function getParentBreadcrumb() {
global $_zp_gallery, $_zp_current_search, $_zp_current_album, $_zp_last_album;
$output = array();
if (in_context(ZP_SEARCH_LINKED)) {
$page = $_zp_current_search->page;
$searchwords = $_zp_current_search->getSearchWords();
$searchdate = $_zp_current_search->getSearchDate();
$searchfields = $_zp_current_search->getSearchFields(true);
$search_album_list = $_zp_current_search->getAlbumList();
if (!is_array($search_album_list)) {
$search_album_list = array();
}
$searchpagepath = getSearchURL($searchwords, $searchdate, $searchfields, $page, array('albums' => $search_album_list));
$dynamic_album = $_zp_current_search->getDynamicAlbum();
if (empty($dynamic_album)) {
if (empty($searchdate)) {
$output[] = array('link' => $searchpagepath, 'title' => gettext("Return to search"), 'text' => gettext("Search"));
if (is_null($_zp_current_album)) {
return $output;
} else {
$parents = getParentAlbums();
}
} else {
return array(array('link' => $searchpagepath, 'title' => gettext("Return to archive"), 'text' => gettext("Archive")));
}
} else {
$album = $dynamic_album;
$parents = getParentAlbums($album);
if (in_context(ZP_ALBUM_LINKED)) {
array_push($parents, $album);
}
}
// remove parent links that are not in the search path
foreach ($parents as $key => $analbum) {
$target = $analbum->name;
if ($target !== $dynamic_album && !in_array($target, $search_album_list)) {
unset($parents[$key]);
}
}
} else {
$parents = getParentAlbums();
}
$n = count($parents);
if ($n > 0) {
array_push($parents, $_zp_current_album);
$index = -1;
foreach ($parents as $parent) {
$index++;
if($index != 0) {
$parentparent = $parents[$index-1];
$page = $parent->getGalleryPage();
$url = $parentparent->getLink($page);
$output[] = array('link' => html_encode($url), 'title' => $parentparent->getTitle(), 'text' => $parentparent->getTitle());
}
}
}
return $output;
}
/**
* Prints the breadcrumb navigation for album, gallery and image view.
*
* @param string $before Insert here the text to be printed before the links
* @param string $between Insert here the text to be printed between the links
* @param string $after Insert here the text to be printed after the links
* @param mixed $truncate if not empty, the max lenght of the description.
* @param string $elipsis the text to append to the truncated description
*/
function printParentBreadcrumb($before = NULL, $between = NULL, $after = NULL, $truncate = NULL, $elipsis = NULL) {
$crumbs = getParentBreadcrumb();
if (!empty($crumbs)) {
if (is_null($between)) {
$between = ' | ';
}
if (is_null($after)) {
$after = ' | ';
}
if (is_null($elipsis)) {
$elipsis = '...';
}
if ($before) {
$output = '' . html_encode($before) . '';
} else {
$output = '';
}
if ($between) {
$between = '' . html_encode($between) . '';
}
$i = 0;
foreach ($crumbs as $crumb) {
if ($i > 0) {
$output .= $between;
}
//cleanup things in description for use as attribute tag
$desc = $crumb['title'];
if (!empty($desc) && $truncate) {
$desc = truncate_string($desc, $truncate, $elipsis);
}
$output .= '' . html_encode($crumb['text']) . '';
$i++;
}
if ($after) {
$output .= '' . html_encode($after) . '';
}
echo $output;
}
}
/**
* Prints a link to the 'main website', not the Zenphoto site home page!
* Only prints the link if the url is not empty and does not point back the gallery page
*
* @param string $before text to precede the link
* @param string $after text to follow the link
* @param string $title Title text
* @param string $class optional css class
* @param string $id optional css id
* */
function printHomeLink($before = '', $after = '', $title = NULL, $class = NULL, $id = NULL) {
global $_zp_gallery;
$site = rtrim($_zp_gallery->getWebsiteURL(), '/');
if (!empty($site)) {
$name = $_zp_gallery->getWebsiteTitle();
if (empty($name)) {
$name = gettext('Home');
}
if ($site != SEO_FULLWEBPATH) {
if ($before) {
echo '' . html_encode($before) . '';
}
printLinkHTML($site, $name, $title, $class, $id);
if ($after) {
echo '' . html_encode($after) . '';
}
}
}
}
/**
* Returns the formatted date field of the album
*
* @param string $format optional format string for the date
* @return string
*/
function getAlbumDate($format = null) {
global $_zp_current_album;
$d = $_zp_current_album->getDateTime();
if (empty($d) || ($d == '0000-00-00 00:00:00')) {
return false;
}
if (is_null($format)) {
return $d;
}
return zpFormattedDate($format, strtotime($d));
}
/**
* Prints the date of the current album
*
* @param string $before Insert here the text to be printed before the date.
* @param string $format Format string for the date formatting
*/
function printAlbumDate($before = '', $format = NULL) {
global $_zp_current_album;
if (is_null($format)) {
$format = DATE_FORMAT;
}
$date = getAlbumDate($format);
if ($date) {
if ($before) {
$date = '' . $before . '' . $date;
}
}
echo html_encodeTagged($date);
}
/**
* Returns the Location of the album.
*
* @return string
*/
function getAlbumLocation() {
global $_zp_current_album;
return $_zp_current_album->getLocation();
}
/**
* Prints the location of the album
*
* @author Ozh
*/
function printAlbumLocation() {
echo html_encodeTagged(getAlbumLocation());
}
/**
* Returns the raw description of the current album.
*
* @return string
*/
function getAlbumDesc() {
if (!in_context(ZP_ALBUM))
return false;
global $_zp_current_album;
return $_zp_current_album->getDesc();
}
/**
* Returns a text-only description of the current album.
*
* @return string
*/
function getBareAlbumDesc() {
return getBare(getAlbumDesc());
}
/**
* Prints description of the current album
*
* @author Ozh
*/
function printAlbumDesc() {
global $_zp_current_album;
echo html_encodeTagged(getAlbumDesc());
}
function printBareAlbumDesc() {
echo html_encode(getBareAlbumDesc());
}
/**
* Returns the custom_data field of the current album
*
* @return string
*/
function getAlbumCustomData() {
global $_zp_current_album;
return $_zp_current_album->getCustomData();
}
/**
* Prints the custom_data field of the current album.
* Converts and displays line break in the admin field as
.
*
* @author Ozh
*/
function printAlbumCustomData() {
echo html_encodeTagged(getAlbumCustomData());
}
/**
* A composit for getting album data
*
* @param string $field which field you want
* @return string
*/
function getAlbumData($field) {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_album_image;
return get_language_string($_zp_album_image->get($field));
}
/**
* Prints arbitrary data from the album object
*
* @param string $field the field name of the data desired
* @param string $label text to label the field
* @author Ozh
*/
function printAlbumData($field, $label = '') {
global $_zp_current_album;
echo html_encodeTagged($_zp_current_album->get($field));
}
/**
* Returns the album page number of the current image
*
* @param object $album optional album object
* @return integer
*/
function getAlbumPage($album = NULL) {
global $_zp_current_album, $_zp_current_image, $_zp_current_search, $_firstPageImages;
if (is_null($album)) {
$album = $_zp_current_album;
}
$use_realalbum = false;
if (!$album->isDynamic()) {
$use_realalbum = true;
}
$page = 0;
if (in_context(ZP_IMAGE) && !in_context(ZP_SEARCH)) {
$imageindex = $_zp_current_image->getIndex($use_realalbum);
$numalbums = $album->getNumAlbums();
$imagepage = floor(($imageindex - $_firstPageImages) / max(1, getOption('images_per_page'))) + 1;
$albumpages = ceil($numalbums / max(1, getOption('albums_per_page')));
if ($albumpages == 0 && $_firstPageImages > 0) {
$imagepage++;
}
$page = $albumpages + $imagepage;
}
return $page;
}
/**
* Returns the album link url of the current album.
*
* @param object $album optional album object
* @return string
*/
function getAlbumURL($album = NULL) {
global $_zp_current_album;
if (is_null($album))
$album = $_zp_current_album;
if (in_context(ZP_IMAGE)) {
$page = getAlbumPage($album);
if ($page <= 1)
$page = 0;
} else {
$page = 0;
}
return $album->getLink($page);
}
/**
* Prints the album link url of the current album.
*
* @param string $text Insert the link text here.
* @param string $title Insert the title text here.
* @param string $class Insert here the CSS-class name with with you want to style the link.
* @param string $id Insert here the CSS-id name with with you want to style the link.
*/
function printAlbumURL($text, $title, $class = NULL, $id = NULL) {
printLinkHTML(getAlbumURL(), $text, $title, $class, $id);
}
/**
* Returns the name of the defined album thumbnail image.
*
* @return string
*/
function getAlbumThumb() {
global $_zp_current_album;
return $_zp_current_album->getThumb();
}
/**
* Returns an img src link to the password protect thumb substitute
*
* @param string $extra extra stuff to put in the HTML
* @return string
*/
function getPasswordProtectImage($extra = '') {
global $_zp_themeroot;
$image = '';
$themedir = SERVERPATH . '/themes/' . basename($_zp_themeroot);
if (file_exists(internalToFilesystem($themedir . '/images/err-passwordprotected.png'))) {
$image = $_zp_themeroot . '/images/err-passwordprotected.png';
} else if (file_exists(internalToFilesystem($themedir . '/images/err-passwordprotected.gif'))) {
$image = $_zp_themeroot . '/images/err-passwordprotected.gif';
} else {
$image = WEBPATH . '/' . ZENFOLDER . '/images/err-passwordprotected.png';
}
return '
';
}
/**
* Prints the album thumbnail image.
*
* @param string $alt Insert the text for the alternate image name here.
* @param string $class Insert here the CSS-class name with with you want to style the link.
* @param string $id Insert here the CSS-id name with with you want to style the link.
* @param string $title option title attribute
* */
function printAlbumThumbImage($alt, $class = NULL, $id = NULL , $title = null) {
global $_zp_current_album;
$thumbobj = $_zp_current_album->getAlbumThumbImage();
$sizes = getSizeDefaultThumb($thumbobj);
if (empty($title)) {
$title = $alt;
}
$attr = array(
'src' => html_pathurlencode($thumbobj->getThumb('album')),
'alt' => html_encode($alt),
'title' => html_encode($title),
'class' => $class,
'id' => $id,
'width' => $sizes[0],
'height' => $sizes[1],
'loading' => 'lazy'
);
if (!$_zp_current_album->isPublished()) {
$attr['class'] .= " not_visible";
}
$pwd = $_zp_current_album->getPassword();
if (!empty($pwd)) {
$attr['class'] .= " password_protected";
}
$attr['class'] = trim($attr['class']);
$attr_filtered = zp_apply_filter('standard_album_thumb_attr', $attr, $thumbobj);
if (!getOption('use_lock_image') || $_zp_current_album->isMyItem(LIST_RIGHTS) || empty($pwd)) {
$attributes = generateAttributesFromArray($attr_filtered);
$html = '
';
$html = zp_apply_filter('standard_album_thumb_html', $html, $thumbobj);
echo $html;
} else {
$size = ' width="' . $attr['width'] . '"';
echo getPasswordProtectImage($size);
}
}
/**
* Returns a link to a custom sized thumbnail of the current album
*
* @param int $size the size of the image to have
* @param int $width width
* @param int $height height
* @param int $cropw crop width
* @param int $croph crop height
* @param int $cropx crop part x axis
* @param int $cropy crop part y axis
* @param bool $effects image effects (e.g. set 'gray' to force grayscale)
*
* @return string
*/
function getCustomAlbumThumb($size, $width = NULL, $height = NULL, $cropw = NULL, $croph = NULL, $cropx = NULL, $cropy = null, $effects = NULL) {
global $_zp_current_album;
$thumb = $_zp_current_album->getAlbumThumbImage();
return $thumb->getCustomImage($size, $width, $height, $cropw, $croph, $cropx, $cropy, true, $effects);
}
/**
* Prints a link to a custom sized thumbnail of the current album
*
* See getCustomImageURL() for details.
*
* @param string $alt Alt atribute text
* @param int $size size
* @param int $width width
* @param int $height height
* @param int $cropw cropwidth
* @param int $croph crop height
* @param int $cropx crop part x axis
* @param int $cropy crop part y axis
* @param string $class css class
* @param string $id css id
* @param string $title title attribute
* @param bool $maxspace true for maxspace image, false is default
*
* @return string
*/
function printCustomAlbumThumbImage($alt, $size, $width = NULL, $height = NULL, $cropw = NULL, $croph = NULL, $cropx = NULL, $cropy = null, $class = NULL, $id = NULL, $title = null, $maxspace = false) {
global $_zp_current_album;
$thumbobj = $_zp_current_album->getAlbumThumbImage();
$sizes = getSizeCustomImage($size, $width, $height, $cropw, $croph, $cropx, $cropy, $thumbobj, 'thumb');
if (empty($title)) {
$title = $alt;
}
$attr = array(
'alt' => html_encode($alt),
'class' => $class,
'title' => html_encode($title),
'id' => $id,
'loading' => 'lazy'
);
if ($maxspace) {
getMaxSpaceContainer($width, $height, $thumbobj, true);
$attr['width'] = $width;
$attr['height'] = $height;
} else {
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
}
if (!$_zp_current_album->isPublished()) {
$attr['class'] .= " not_visible";
}
$pwd = $_zp_current_album->getPassword();
if (!empty($pwd)) {
$attr['class'] .= " password_protected";
}
$attr['class'] = trim($attr['class']);
if ($maxspace) {
$attr['src']= html_pathurlencode(getCustomAlbumThumb(null, $width, $height, null, null, null, null));
} else {
$attr['src']= html_pathurlencode(getCustomAlbumThumb($size, $width, $height, $cropw, $croph, $cropx, $cropy));
}
$attr_filtered = zp_apply_filter('custom_album_thumb_attr', $attr, $thumbobj);
if (!getOption('use_lock_image') || $_zp_current_album->isMyItem(LIST_RIGHTS) || empty($pwd)) {
$attributes = generateAttributesFromArray($attr_filtered);
$html = '
';
$html = zp_apply_filter('custom_album_thumb_html', $html, $thumbobj);
echo $html;
} else {
$size = ' width="' . $attr['width'] . '"';
echo getPasswordProtectImage($size);
}
}
/**
* Called by ***MaxSpace functions to compute the parameters to be passed to xxCustomyyy functions.
*
* @param int $width maxspace width
* @param int $height maxspace height
* @param object $image the image in question
* @param bool $thumb true if for a thumbnail
*/
function getMaxSpaceContainer(&$width, &$height, $image, $thumb = false) {
global $_zp_gallery;
$upscale = getOption('image_allow_upscale');
$imagename = $image->filename;
if ($thumb) {
$s_width = $image->getThumbWidth();
$s_height = $image->getThumbHeight();
} else {
$s_width = $image->get('width');
if ($s_width == 0)
$s_width = max($width, $height);
$s_height = $image->get('height');
if ($s_height == 0)
$s_height = max($width, $height);
}
$newW = round($height / $s_height * $s_width);
$newH = round($width / $s_width * $s_height);
if (DEBUG_IMAGE)
debugLog("getMaxSpaceContainer($width, $height, $imagename, $thumb): \$s_width=$s_width; \$s_height=$s_height; \$newW=$newW; \$newH=$newH; \$upscale=$upscale;");
if ($newW > $width) {
if ($upscale || $s_height > $newH) {
$height = $newH;
} else {
$height = $s_height;
$width = $s_width;
}
} else {
if ($upscale || $s_width > $newW) {
$width = $newW;
} else {
$height = $s_height;
$width = $s_width;
}
}
}
/**
* Returns a link to a un-cropped custom sized version of the current album thumb within the given height and width dimensions.
*
* @param int $width width
* @param int $height height
* @return string
*/
function getCustomAlbumThumbMaxSpace($width, $height) {
global $_zp_current_album;
$albumthumb = $_zp_current_album->getAlbumThumbImage();
getMaxSpaceContainer($width, $height, $albumthumb, true);
return getCustomAlbumThumb(NULL, $width, $height, NULL, NULL, NULL, NULL);
}
/**
* Prints a un-cropped custom sized album thumb within the given height and width dimensions.
* Note: a class of 'not_visible' or 'password_protected' will be added as appropriate
*
* @param string $alt Alt text for the url
* @param int $width width
* @param int $height height
* @param string $class Optional style class
* @param string $id Optional style id
* @param string $title Optional title attribute
*/
function printCustomAlbumThumbMaxSpace($alt, $width, $height, $class = NULL, $id = NULL, $title = null) {
printCustomAlbumThumbImage($alt, NULL, $width, $height, NULL, NULL, NULL, NULL, $class, $id, $title, true);
}
/**
* Returns the next album
*
* @return object
*/
function getNextAlbum() {
global $_zp_current_album, $_zp_current_search, $_zp_gallery;
if (in_context(ZP_SEARCH) || in_context(ZP_SEARCH_LINKED)) {
$nextalbum = $_zp_current_search->getNextAlbum($_zp_current_album->name);
} else if (in_context(ZP_ALBUM)) {
$nextalbum = $_zp_current_album->getNextAlbum();
} else {
return null;
}
return $nextalbum;
}
/**
* Get the URL of the next album in the gallery.
*
* @return string
*/
function getNextAlbumURL() {
$nextalbum = getNextAlbum();
if ($nextalbum) {
return $nextalbum->getLink();
}
return false;
}
/**
* Returns the previous album
*
* @return object
*/
function getPrevAlbum() {
global $_zp_current_album, $_zp_current_search;
if (in_context(ZP_SEARCH) || in_context(ZP_SEARCH_LINKED)) {
$prevalbum = $_zp_current_search->getPrevAlbum($_zp_current_album->name);
} else if (in_context(ZP_ALBUM)) {
$prevalbum = $_zp_current_album->getPrevAlbum();
} else {
return null;
}
return $prevalbum;
}
/**
* Get the URL of the previous album in the gallery.
*
* @return string
*/
function getPrevAlbumURL() {
$prevalbum = getPrevAlbum();
if ($prevalbum) {
return $prevalbum->getLink();
}
return false;
}
/**
* Returns true if this page has image thumbs on it
*
* @return bool
*/
function isImagePage() {
if (getNumImages()) {
global $_zp_page, $_firstPageImages;
$imagestart = getTotalPages(2); // # of album pages
if (!$_firstPageImages)
$imagestart++; // then images start on the last album page.
return $_zp_page >= $imagestart;
}
return false;
}
/**
* Returns true if this page has album thumbs on it
*
* @return bool
*/
function isAlbumPage() {
global $_zp_page;
$pageCount = Ceil(getNumAlbums() / max(1, getOption('albums_per_page')));
return ($_zp_page <= $pageCount);
}
/**
* Returns the number of images in the album.
*
* @return int
*/
function getNumImages() {
global $_zp_current_album, $_zp_current_search;
if ((in_context(ZP_SEARCH_LINKED) && !in_context(ZP_ALBUM_LINKED)) || in_context(ZP_SEARCH) && is_null($_zp_current_album)) {
return $_zp_current_search->getNumImages();
} else {
return $_zp_current_album->getNumImages();
}
}
/**
* Returns the next image on a page.
* sets $_zp_current_image to the next image in the album.
* Returns true if there is an image to be shown
*
* @param bool $all set to true disable pagination
* @param int $firstPageCount the number of images which can go on the page that transitions between albums and images
* Normally this parameter should be NULL so as to use the default computations.
* @param bool $mine overridePassword the password check
* @return bool
*
* @return bool
*/
function next_image($all = false, $firstPageCount = NULL, $mine = NULL) {
global $_zp_images, $_zp_current_image, $_zp_current_album, $_zp_page, $_zp_current_image_restore, $_zp_current_search, $_zp_gallery, $_firstPageImages;
if (is_null($firstPageCount)) {
$firstPageCount = $_firstPageImages;
}
$imagePageOffset = getTotalPages(2); /* gives us the count of pages for album thumbs */
if ($all) {
$imagePage = 1;
$firstPageCount = 0;
} else {
$_firstPageImages = $firstPageCount; /* save this so pagination can see it */
$imagePage = $_zp_page - $imagePageOffset;
}
if ($firstPageCount > 0 && $imagePageOffset > 0) {
$imagePage = $imagePage + 1; /* can share with last album page */
}
if ($imagePage <= 0) {
return false; /* we are on an album page */
}
if (is_null($_zp_images)) {
if (in_context(ZP_SEARCH)) {
$_zp_images = $_zp_current_search->getImages($all ? 0 : ($imagePage), $firstPageCount, NULL, NULL, true, $mine);
} else {
$_zp_images = $_zp_current_album->getImages($all ? 0 : ($imagePage), $firstPageCount, NULL, NULL, true, $mine);
}
if (empty($_zp_images)) {
return NULL;
}
$_zp_current_image_restore = $_zp_current_image;
$img = array_shift($_zp_images);
$_zp_current_image = newImage($_zp_current_album, $img, true, true);
save_context();
add_context(ZP_IMAGE);
return true;
} else if (empty($_zp_images)) {
$_zp_images = NULL;
$_zp_current_image = $_zp_current_image_restore;
restore_context();
return false;
} else {
$img = array_shift($_zp_images);
$_zp_current_image = newImage($_zp_current_album, $img, true, true);
return true;
}
}
//*** Image Context ************************
//******************************************
/**
* Sets the image passed as the current image
*
* @param object $image the image to become current
*/
function makeImageCurrent($image) {
if (!is_object($image))
return;
global $_zp_current_album, $_zp_current_image;
$_zp_current_image = $image;
$_zp_current_album = $_zp_current_image->getAlbum();
set_context(ZP_INDEX | ZP_ALBUM | ZP_IMAGE);
}
/**
* Returns the raw title of the current image.
*
* @return string
*/
function getImageTitle() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getTitle();
}
/**
* Returns a text-only title of the current image.
*
* @return string
*/
function getBareImageTitle() {
return getBare(getImageTitle());
}
/**
* Returns the image title taged with not visible annotation.
*
* @return string
*/
function getAnnotatedImageTitle() {
global $_zp_current_image;
$title = getBareImageTitle();
if (!$_zp_current_image->isPublished()) {
$title .= "\n" . gettext('The image is marked un-published.');
}
return $title;
}
function printAnnotatedImageTitle() {
echo html_encode(getAnnotatedImageTitle());
}
/**
* Prints title of the current image
*
* @author Ozh
*/
function printImageTitle() {
echo html_encodeTagged(getImageTitle());
}
function printBareImageTitle() {
echo html_encode(getBareImageTitle());
}
/**
* Returns the 'n' of n of m images
*
* @return int
*/
function imageNumber() {
global $_zp_current_image, $_zp_current_search, $_zp_current_album;
$name = $_zp_current_image->getFileName();
if (in_context(ZP_SEARCH) || (in_context(ZP_SEARCH_LINKED) && !in_context(ZP_ALBUM_LINKED))) {
$folder = $_zp_current_image->imagefolder;
$images = $_zp_current_search->getImages();
$c = 0;
foreach ($images as $image) {
$c++;
if ($name == $image['filename'] && $folder == $image['folder']) {
return $c;
}
}
} else {
return $_zp_current_image->getIndex() + 1;
}
return false;
}
/**
* Returns the image date of the current image in yyyy-mm-dd hh:mm:ss format.
* Pass it a date format string for custom formatting
*
* @param string $format formatting string for the data
* @return string
*/
function getImageDate($format = null) {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
$d = $_zp_current_image->getDateTime();
if (empty($d) || ($d == '0000-00-00 00:00:00')) {
return false;
}
if (is_null($format)) {
return $d;
}
return zpFormattedDate($format, strtotime($d));
}
/**
* Prints the date of the current album
*
* @param string $before Insert here the text to be printed before the date.
* @param string $format Format string for the date formatting
*/
function printImageDate($before = '', $format = null) {
global $_zp_current_image;
if (is_null($format)) {
$format = DATE_FORMAT;
}
$date = getImageDate($format);
if ($date) {
if ($before) {
$date = '' . $before . '' . $date;
}
}
echo html_encodeTagged($date);
}
// IPTC fields
/**
* Returns the Location field of the current image
*
* @return string
*/
function getImageLocation() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getLocation();
}
/**
* Returns the City field of the current image
*
* @return string
*/
function getImageCity() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getcity();
}
/**
* Returns the State field of the current image
*
* @return string
*/
function getImageState() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getState();
}
/**
* Returns the Country field of the current image
*
* @return string
*/
function getImageCountry() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getCountry();
}
/**
* Returns the raw description of the current image.
* new lines are replaced with
tags
*
* @return string
*/
function getImageDesc() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return $_zp_current_image->getDesc();
}
/**
* Returns a text-only description of the current image.
*
* @return string
*/
function getBareImageDesc() {
return getBare(getImageDesc());
}
/**
* Prints the description of the current image.
* Converts and displays line breaks set in the admin field as
.
*
*/
function printImageDesc() {
echo html_encodeTagged(getImageDesc());
}
function printBareImageDesc() {
echo html_encode(getBareImageDesc());
}
/**
* A composit for getting image data
*
* @param string $field which field you want
* @return string
*/
function getImageData($field) {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
return get_language_string($_zp_current_image->get($field));
}
/**
* Returns the custom_data field of the current image
*
* @return string
*/
function getImageCustomData() {
Global $_zp_current_image;
return $_zp_current_image->getCustomData();
}
/**
* Prints the custom_data field of the current image.
* Converts and displays line breaks set in the admin field as
.
*
* @return string
*/
function printImageCustomData() {
$data = getImageCustomData();
$data = str_replace("\r\n", "\n", $data);
$data = str_replace("\n", "
", $data);
echo $data;
}
/**
* Prints arbitrary data from the image object
*
* @param string $field the field name of the data desired
* @param string $label text to label the field.
* @author Ozh
*/
function printImageData($field, $label = '') {
global $_zp_current_image;
$text = getImageData($field);
if (!empty($text)) {
echo html_encodeTagged($label . $text);
}
}
/**
* Returns the file size of the full original image
*
* @since ZenphotoCMS 1.5.2
*
* @global obj $_zp_current_image
* @return int
*/
function getFullImageFilesize() {
global $_zp_current_image;
$filesize = $_zp_current_image->getFilesize();
if($filesize) {
return byteConvert($filesize);
}
}
/**
* True if there is a next image
*
* @return bool
*/
function hasNextImage() {
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
return $_zp_current_image->getNextImage();
}
/**
* True if there is a previous image
*
* @return bool
*/
function hasPrevImage() {
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
return $_zp_current_image->getPrevImage();
}
/**
* Returns the url of the next image.
*
* @return string
*/
function getNextImageURL() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_album, $_zp_current_image;
if (is_null($_zp_current_image))
return false;
$nextimg = $_zp_current_image->getNextImage();
return $nextimg->getLink();
}
/**
* Returns the url of the previous image.
*
* @return string
*/
function getPrevImageURL() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_album, $_zp_current_image;
if (is_null($_zp_current_image))
return false;
$previmg = $_zp_current_image->getPrevImage();
return $previmg->getLink();
}
/**
* Returns the thumbnail of the previous image.
*
* @return string
*/
function getPrevImageThumb() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
$img = $_zp_current_image->getPrevImage();
return $img->getThumb();
}
/**
* Returns the thumbnail of the next image.
*
* @return string
*/
function getNextImageThumb() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
$img = $_zp_current_image->getNextImage();
return $img->getThumb();
}
/**
* Returns the url of the current image.
*
* @return string
*/
function getImageURL() {
if (!in_context(ZP_IMAGE))
return false;
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
return $_zp_current_image->getLink();
}
/**
* Prints the link to the current image.
*
* @param string $text text for the link
* @param string $title title tag for the link
* @param string $class optional style class for the link
* @param string $id optional style id for the link
*/
function printImageURL($text, $title, $class = NULL, $id = NULL) {
printLinkHTML(getImageURL(), $text, $title, $class, $id);
}
/**
* Returns the Metadata infromation from the current image
*
* @param $image optional image object
* @param string $displayonly set to true to return only the items selected for display
* @return array
*/
function getImageMetaData($image = NULL, $displayonly = true) {
global $_zp_current_image, $_zp_exifvars;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image) || !$image->get('hasMetadata')) {
return false;
}
$data = $image->getMetaData();
if ($displayonly) {
foreach ($data as $field => $value) { // remove the empty or not selected to display
if (!$value || !$_zp_exifvars[$field][3]) {
unset($data[$field]);
}
}
}
if (count($data) > 0) {
return $data;
}
return false;
}
/**
* Prints the Metadata data of the current image
*
* @param string $title title tag for the class
* @param bool $toggle set to true to get a javascript toggle on the display of the data
* @param string $id style class id
* @param string $class style class
* @author Ozh
*/
function printImageMetadata($title = NULL, $toggle = true, $id = 'imagemetadata', $class = null, $span = NULL) {
global $_zp_exifvars, $_zp_current_image;
if (false === ($exif = getImageMetaData($_zp_current_image, true))) {
return;
}
if (is_null($title)) {
$title = gettext('Image Info');
}
if ($class) {
$class = ' class="' . $class . '"';
}
if (!$span) {
$span = 'exif_link';
}
$dataid = $id . '_data';
if ($id) {
$id = ' id="' . $id . '"';
}
$style = '';
if ($toggle) {
if(zp_has_filter('theme_head', 'colorbox::css')) {
$modal_class = ' colorbox';
?>
>
>
$value) {
$label = $_zp_exifvars[$field][2];
echo "$label: | ";
switch ($_zp_exifvars[$field][6]) {
case 'time':
echo zpFormattedDate(DATE_FORMAT, strtotime($value));
break;
default:
echo html_encode($value);
break;
}
echo " |
\n";
}
?>
getThumbHeight();
$w = $image->getThumbWidth();
$thumb = true;
$side = getOption('thumb_use_side');
break;
default:
case 'image':
$h = $image->getHeight();
$w = $image->getWidth();
$thumb = false;
if (isImageVideo($image)) { // size is determined by the player
return array($w, $h);
}
$side = getOption('image_use_side');
break;
}
$us = getOption('image_allow_upscale');
$args = getImageParameters(array($size, $width, $height, $cw, $ch, $cx, $cy, NULL, $thumb, NULL, $thumb, NULL, NULL, NULL), $image->album->name);
@list($size, $width, $height, $cw, $ch, $cx, $cy, $quality, $thumb, $crop, $thumbstandin, $passedWM, $adminrequest, $effects) = $args;
if (!empty($size)) {
$dim = $size;
$width = $height = false;
} else if (!empty($width)) {
$dim = $width;
$size = $height = false;
} else if (!empty($height)) {
$dim = $height;
$size = $width = false;
} else {
$dim = 1;
}
if ($w == 0) {
$hprop = 1;
} else {
$hprop = round(($h / $w) * $dim);
}
if ($h == 0) {
$wprop = 1;
} else {
$wprop = round(($w / $h) * $dim);
}
if (($size && ($side == 'longest' && $h > $w) || ($side == 'height') || ($side == 'shortest' && $h < $w)) || $height) {
// Scale the height
$newh = $dim;
$neww = $wprop;
} else {
// Scale the width
$neww = $dim;
$newh = $hprop;
}
if (!$us && $newh >= $h && $neww >= $w) {
return array($w, $h);
} else {
if ($cw && $cw < $neww)
$neww = $cw;
if ($ch && $ch < $newh)
$newh = $ch;
if ($size && $ch && $cw) {
$neww = $cw;
$newh = $ch;
}
return array($neww, $newh);
}
}
/**
* Returns an array [width, height] of the default-sized image.
*
* @param int $size override the 'image_zize' option
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return array
*/
function getSizeDefaultImage($size = NULL, $image = NULL) {
if (is_null($size))
$size = getOption('image_size');
return getSizeCustomImage($size, NULL, NULL, NULL, NULL, NULL, NULL, $image);
}
/**
* Returns an array [width, height] of the original image.
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return array
*/
function getSizeFullImage($image = NULL) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
return array($image->getWidth(), $image->getHeight());
}
/**
* The width of the default-sized image (in printDefaultSizedImage)
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return int
*/
function getDefaultWidth($size = NULL, $image = NULL) {
$size_a = getSizeDefaultImage($size, $image);
return $size_a[0];
}
/**
* Returns the height of the default-sized image (in printDefaultSizedImage)
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return int
*/
function getDefaultHeight($size = NULL, $image = NULL) {
$size_a = getSizeDefaultImage($size, $image);
return $size_a[1];
}
/**
* Returns the width of the original image
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return int
*/
function getFullWidth($image = NULL) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
return $image->getWidth();
}
/**
* Returns the height of the original image
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return int
*/
function getFullHeight($image = NULL) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
return $image->getHeight();
}
/**
* Returns true if the image is landscape-oriented (width is greater than height)
* or - kept here for backwards compatibility - square (equal widht and height)
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return bool
*/
function isLandscape($image = NULL) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
return ($image->isLandscape() || $image->isSquare());
}
/**
* Returns the url to the default sized image.
*
* @param $image object the image for which the size is desired. NULL means the current image
*
* @return string
*/
function getDefaultSizedImage($image = NULL) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
return $image->getSizedImage(getOption('image_size'));
}
/**
* Show video player with video loaded or display the image.
*
* @param string $alt Alt text
* @param string $class Optional style class
* @param string $id Optional style id
* @param string $title Optional title attribute
* @param obj $image optional image object, null means current image
*/
function printDefaultSizedImage($alt, $class = null, $id = null, $title = null, $image = null) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (is_null($image)) {
return false;
}
if (empty($title)) {
$title = $alt;
}
$attr = array(
'alt' => html_encode($alt),
'class' => $class,
'title' => html_encode($title),
'id' => $id,
'loading' => 'lazy',
'width' => getDefaultWidth(),
'height' => getDefaultHeight()
);
if (!$image->isPublished()) {
$attr['class'] .= " not_visible";
}
$album = $image->getAlbum();
$pwd = $album->getPassword();
if (!empty($pwd)) {
$attr['class'] .= " password_protected";
}
if (isImagePhoto($image)) { //Print images
$attr['src'] = html_pathurlencode(getDefaultSizedImage());
$attr_filtered = zp_apply_filter('standard_image_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '
';
$html = zp_apply_filter('standard_image_html', $html, $image);
echo $html;
} else { // better be a plugin class then
echo $image->getContent();
}
}
/**
* Returns the url to the thumbnail of the current image.
*
* @return string
*/
function getImageThumb() {
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
return $_zp_current_image->getThumb();
}
/**
* @param string $alt Alt text
* @param string $class optional class attribute
* @param string $id optional id attribute
* @param string $title optional title attribute
* @param obj $image optional image object, null means current image
*/
function printImageThumb($alt, $class = null, $id = null, $title = null, $image = null) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (is_null($image)) {
return false;
}
if (empty($title)) {
$title = $alt;
}
$attr = array(
'alt' => html_encode($alt),
'class' => $class,
'title' => html_encode($title),
'id' => $id,
'loading' => 'lazy'
);
if (!$image->isPublished()) {
$attr['class'] .= " not_visible";
}
$album = $image->getAlbum();
$pwd = $album->getPassword();
if (!empty($pwd)) {
$attr['class'] .= " password_protected";
}
$attr['src'] = html_pathurlencode($image->getThumb());
$sizes = getSizeDefaultThumb($image);
$attr['width'] = $sizes[0];
$attr['height'] = $sizes[1];
$attr_filtered = zp_apply_filter('standard_image_thumb_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '
';
$html = zp_apply_filter('standard_image_thumb_html', $html, $image);
echo $html;
}
/**
* Gets the width and height of a default thumb for the
tag height/width
* @global type $_zp_current_image
* @param obj $image Image object, if NULL the current image is used
* @return aray
*/
function getSizeDefaultThumb($image = NULL) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
$s = getOption('thumb_size');
if (getOption('thumb_crop')) {
$w = getOption('thumb_crop_width');
$h = getOption('thumb_crop_height');
$sizes = getSizeCustomImage($s, $w, $h, $w, $h, null, null, $image, 'thumb');
} else {
$w = $h = $s;
$sizes = getSizeCustomImage($s, NULL, NULL, NULL, NULL, NULL, NULL, $image, 'thumb');
}
return $sizes;
}
/**
* Returns the url to original image.
* It will return a protected image is the option "protect_full_image" is set
*
* @param $image optional image object
* @return string
*/
function getFullImageURL($image = NULL) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (is_null($image)) {
return false;
}
$outcome = getOption('protect_full_image');
if ($outcome == 'no-access') {
return NULL;
}
if ($outcome == 'unprotected') {
return $image->getFullImageURL();
} else {
return getProtectedImageURL($image, $outcome);
}
}
/**
* Returns the "raw" url to the image in the albums folder
*
* @param $image optional image object
* @return string
*
*/
function getUnprotectedImageURL($image = NULL) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (!is_null($image)) {
return $image->getFullImageURL();
}
}
/**
* Returns an url to the password protected/watermarked current image
*
* @param object $image optional image object overrides the current image
* @param string $disposal set to override the 'protect_full_image' option. 'protected', "download", "unprotected" or "no-access"
* @return string
* */
function getProtectedImageURL($image = NULL, $disposal = NULL) {
global $_zp_current_image;
if (is_null($disposal)) {
$disposal = getOption('protect_full_image');
}
if ($disposal == 'no-access')
return NULL;
if (is_null($image)) {
if (!in_context(ZP_IMAGE))
return false;
if (is_null($_zp_current_image))
return false;
$image = $_zp_current_image;
}
$album = $image->getAlbum();
$watermark_use_image = getWatermarkParam($image, WATERMARK_FULL);
if (!empty($watermark_use_image)) {
$wmt = $watermark_use_image;
} else {
$wmt = false;
}
$args = array('FULL', NULL, NULL, NULL, NULL, NULL, NULL, (int) getOption('full_image_quality'), NULL, NULL, NULL, $wmt, false, NULL, NULL);
$cache_file = getImageCacheFilename($album->name, $image->filename, $args);
$cache_path = SERVERCACHE . $cache_file;
if ($disposal != 'download' && OPEN_IMAGE_CACHE && file_exists($cache_path)) {
return WEBPATH . '/' . CACHEFOLDER . pathurlencode(imgSrcURI($cache_file));
} else if ($disposal == 'unprotected') {
return getImageURI($args, $album->name, $image->filename, $image->filemtime);
} else {
$params = '&q=' . getOption('full_image_quality');
if (!empty($watermark_use_image)) {
$params .= '&wmk=' . $watermark_use_image;
}
if ($disposal) {
$params .= '&dsp=' . $disposal;
}
$params .= '&check=' . sha1(HASH_SEED . serialize($args));
if (is_array($image->filename)) {
$album = dirname($image->filename['source']);
$image = basename($image->filename['source']);
} else {
$album = $album->name;
$image = $image->filename;
}
return WEBPATH . '/' . ZENFOLDER . '/full-image.php?a=' . $album . '&i=' . $image . $params;
}
}
/**
* Returns a link to the current image custom sized to $size
*
* @param int $size The size the image is to be
*/
function getSizedImageURL($size) {
return getCustomImageURL($size);
}
/**
* Returns the url to the image with the dimensions you define with this function.
*
* @param int $size the size of the image to have
* @param int $width width
* @param int $height height
* @param int $cropw crop width
* @param int $croph crop height
* @param int $cropx crop part x axis
* @param int $cropy crop part y axis
* @param bool $thumbStandin set true to inhibit watermarking
* @param bool $effects image effects (e.g. set gray to force to grayscale)
* @return string
*
* $size, $width, and $height are used in determining the final image size.
* At least one of these must be provided. If $size is provided, $width and
* $height are ignored. If both $width and $height are provided, the image
* will have those dimensions regardless of the original image height/width
* ratio. (Yes, this means that the image may be distorted!)
*
* The $crop* parameters determine the portion of the original image that
* will be incorporated into the final image.
*
* $cropw and $croph "sizes" are typically proportional. That is you can
* set them to values that reflect the ratio of width to height that you
* want for the final image. Typically you would set them to the final
* height and width. These values will always be adjusted so that they are
* not larger than the original image dimensions.
*
* The $cropx and $cropy values represent the offset of the crop from the
* top left corner of the image. If these values are provided, the $croph
* and $cropw parameters are treated as absolute pixels not proportions of
* the image. If cropx and cropy are not provided, the crop will be
* "centered" in the image.
*
* When $cropx and $cropy are not provided the crop is offset from the top
* left proportionally to the ratio of the final image size and the crop
* size.
*
* Some typical croppings:
*
* $size=200, $width=NULL, $height=NULL, $cropw=200, $croph=100,
* $cropx=NULL, $cropy=NULL produces an image cropped to a 2x1 ratio which
* will fit in a 200x200 pixel frame.
*
* $size=NULL, $width=200, $height=NULL, $cropw=200, $croph=100, $cropx=100,
* $cropy=10 will will take a 200x100 pixel slice from (10,100) of the
* picture and create a 200x100 image
*
* $size=NULL, $width=200, $height=100, $cropw=200, $croph=120, $cropx=NULL,
* $cropy=NULL will produce a (distorted) image 200x100 pixels from a 1x0.6
* crop of the image.
*
* $size=NULL, $width=200, $height=NULL, $cropw=180, $croph=120, $cropx=NULL, $cropy=NULL
* will produce an image that is 200x133 from a 1.5x1 crop that is 5% from the left
* and 15% from the top of the image.
*
* @param int $size the size of the image to have
* @param int $width width
* @param int $height height
* @param int $cropw crop width
* @param int $croph crop height
* @param int $cropx crop part x axis
* @param int $cropy crop part y axis
* @param bool $thumbStandin set true to inhibit watermarking
* @param bool $effects image effects (e.g. set gray to force to grayscale)
* @param obj $image optional image object, null means current image
*/
function getCustomImageURL($size, $width = NULL, $height = NULL, $cropw = NULL, $croph = NULL, $cropx = NULL, $cropy = NULL, $thumbStandin = false, $effects = NULL, $image = null) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (is_null($image)) {
return false;
}
return $image->getCustomImage($size, $width, $height, $cropw, $croph, $cropx, $cropy, $thumbStandin, $effects);
}
/**
* Print normal video or custom sized images.
* Note: a class of 'not_visible' or 'password_protected' will be added as appropriate
*
* Notes on cropping:
*
* The $crop* parameters determine the portion of the original image that will be incorporated
* into the final image. The w and h "sizes" are typically proportional. That is you can set them to
* values that reflect the ratio of width to height that you want for the final image. Typically
* you would set them to the fincal height and width.
*
* @param string $alt Alt text for the url
* @param int $size size
* @param int $width width
* @param int $height height
* @param int $cropw crop width
* @param int $croph crop height
* @param int $cropx crop x axis
* @param int $cropy crop y axis
* @param string $class Optional style class
* @param string $id Optional style id
* @param bool $thumbStandin set to true to treat as thumbnail
* @param bool $effects image effects (e.g. set gray to force grayscale)
* @param string $title Optional title attribute
* @param string $type "image" (sizedimage) (default), "thumb" (thumbnail) required for using option settings for uncropped images
* @param obj $image optional image object, null means current image
* @param bool $maxspace true for maxspace, false default
*/
function printCustomSizedImage($alt, $size, $width = NULL, $height = NULL, $cropw = NULL, $croph = NULL, $cropx = NULL, $cropy = NULL, $class = NULL, $id = NULL, $thumbStandin = false, $effects = NULL, $title = null, $type = 'image', $image = null, $maxspace = false) {
global $_zp_current_image;
if (is_null($image)) {
$image = $_zp_current_image;
}
if (is_null($image)) {
return false;
}
if ($maxspace) {
getMaxSpaceContainer($width, $height, $image);
}
if (empty($title)) {
$title = $alt;
}
$attr = array(
'alt' => html_encode($alt),
'class' => $class,
'title' => html_encode($title),
'id' => $id,
'loading' => 'lazy'
);
if (!$image->isPublished()) {
$attr['class'] .= " not_visible";
}
$album = $image->getAlbum();
$pwd = $album->getPassword();
if (!empty($pwd)) {
$attr['class'] .= " password_protected";
}
if ($size && !$maxspace) {
$type = 'image';
if ($thumbStandin) {
$type = 'thumb';
}
$dims = getSizeCustomImage($size, null, null, null, null, null, null, $image, $type);
$attr['width'] = $dims[0];
$attr['height'] = $dims[1];
} else {
$attr['width'] = $width;
$attr['height'] = $height;
}
if (isImagePhoto($image) || $thumbStandin) {
if ($maxspace) {
$attr['src'] = html_pathurlencode($image->getCustomImage(null, $width, $height, NULL, NULL, NULL, NULL, $thumbStandin, $effects));
} else {
$attr['src'] = html_pathurlencode($image->getCustomImage($size, $width, $height, $cropw, $croph, $cropx, $cropy, $thumbStandin, $effects));
}
$attr_filtered = zp_apply_filter('custom_image_attr', $attr, $image);
$attributes = generateAttributesFromArray($attr_filtered);
$html = '
';
$html = zp_apply_filter('custom_image_html', $html, $thumbStandin, $image);
echo $html;
} else { // better be a plugin
echo $image->getContent($width, $height);
}
}
/**
* Returns a link to a un-cropped custom sized version of the current image within the given height and width dimensions.
* Use for sized images.
*
* @param int $width width
* @param int $height height
* @return string
*/
function getCustomSizedImageMaxSpace($width, $height) {
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
getMaxSpaceContainer($width, $height, $_zp_current_image);
return getCustomImageURL(NULL, $width, $height);
}
/**
* Returns a link to a un-cropped custom sized version of the current image within the given height and width dimensions.
* Use for sized thumbnails.
*
* @param int $width width
* @param int $height height
* @return string
*/
function getCustomSizedImageThumbMaxSpace($width, $height) {
global $_zp_current_image;
if (is_null($_zp_current_image))
return false;
getMaxSpaceContainer($width, $height, $_zp_current_image, true);
return getCustomImageURL(NULL, $width, $height, NULL, NULL, NULL, NULL, true);
}
/**
* Creates image thumbnails which will fit un-cropped within the width & height parameters given
*
* @param string $alt Alt text for the url
* @param int $width width
* @param int $height height
* @param string $class Optional style class
* @param string $id Optional style id
* @param string $title optional title attribute
* @param obj $image optional image object, null means current image
*/
function printCustomSizedImageThumbMaxSpace($alt, $width, $height, $class = NULL, $id = NULL, $title = null, $image = null) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
printCustomSizedImage($alt, NULL, $width, $height, NULL, NULL, NULL, NULL, $class, $id, true, NULL, $title, 'thumb', $image, true);
}
/**
* Print normal video or un-cropped within the given height and width dimensions. Use for sized images or thumbnails in an album.
* Note: a class of 'not_visible' or 'password_protected' will be added as appropriate
*
* @param string $alt Alt text for the url
* @param int $width width
* @param int $height height
* @param string $class Optional style class
* @param string $id Optional style id
* @param string $title optional title attribute
* @param obj $image optional image object, null means current image
*/
function printCustomSizedImageMaxSpace($alt, $width, $height, $class = NULL, $id = NULL, $thumb = false, $title = null, $image = null) {
global $_zp_current_image;
if (is_null($image))
$image = $_zp_current_image;
if (is_null($image))
return false;
printCustomSizedImage($alt, NULL, $width, $height, NULL, NULL, NULL, NULL, $class, $id, $thumb, NULL, $title, 'image', $image, true);
}
/**
* Prints link to an image of specific size
* @param int $size how big
* @param string $text URL text
* @param string $title URL title
* @param string $class optional URL class
* @param string $id optional URL id
*/
function printSizedImageURL($size, $text, $title, $class = NULL, $id = NULL) {
printLinkHTML(getSizedImageURL($size), $text, $title, $class, $id);
}
/**
* Returns a list of tags for context of the page called where called
*
* @return string
* @since 1.1
*/
function getTags() {
if (in_context(ZP_IMAGE)) {
global $_zp_current_image;
return $_zp_current_image->getTags();
} else if (in_context(ZP_ALBUM)) {
global $_zp_current_album;
return $_zp_current_album->getTags();
} else if (in_context(ZP_ZENPAGE_PAGE)) {
global $_zp_current_zenpage_page;
return $_zp_current_zenpage_page->getTags();
} else if (in_context(ZP_ZENPAGE_NEWS_ARTICLE)) {
global $_zp_current_zenpage_news;
return $_zp_current_zenpage_news->getTags();
}
return array();
}
/**
* Prints a list of tags, editable by admin
*
* @param string $option links by default, if anything else the
* tags will not link to all other images with the same tag
* @param string $preText text to go before the printed tags
* @param string $class css class to apply to the div surrounding the UL list
* @param string $separator what charactor shall separate the tags
* @since 1.1
*/
function printTags($option = 'links', $preText = NULL, $class = NULL, $separator = ', ') {
global $_zp_current_search;
if (is_null($class)) {
$class = 'taglist';
}
$singletag = getTags();
$tagstring = implode(', ', $singletag);
if ($tagstring === '' or $tagstring === NULL) {
$preText = '';
}
if (in_context(ZP_IMAGE)) {
$object = "image";
} else if (in_context(ZP_ALBUM)) {
$object = "album";
} else if (in_context(ZP_ZENPAGE_PAGE)) {
$object = "pages";
} else if (in_context(ZP_ZENPAGE_NEWS_ARTICLE)) {
$object = "news";
}
if (count($singletag) > 0) {
if (!empty($preText)) {
echo "" . $preText . "";
}
echo "\n";
if (is_object($_zp_current_search)) {
$albumlist = $_zp_current_search->getAlbumList();
} else {
$albumlist = NULL;
}
$ct = count($singletag);
$x = 0;
foreach ($singletag as $atag) {
if (++$x == $ct) {
$separator = "";
}
if ($option === "links") {
$links1 = " $albumlist))) . "\" title=\"" . html_encode($atag) . "\">";
$links2 = "";
} else {
$links1 = $links2 = '';
}
echo "\t- " . $links1 . $atag . $links2 . $separator . "
\n";
}
echo "
";
} else {
echo "$tagstring";
}
}
/**
* Either prints all of the galleries tgs as a UL list or a cloud
*
* @param string $option "cloud" for tag cloud, "list" for simple list
* @param string $class CSS class
* @param string $sort "results" for relevance list, "random" for random ordering, otherwise the list is alphabetical
* @param bool $counter TRUE if you want the tag count within brackets behind the tag
* @param bool $links set to TRUE to have tag search links included with the tag.
* @param int $maxfontsize largest font size the cloud should display
* @param int $maxcount the floor count for setting the cloud font size to $maxfontsize
* @param int $mincount the minimum count for a tag to appear in the output
* @param int $limit set to limit the number of tags displayed to the top $numtags
* @param int $minfontsize minimum font size the cloud should display
* @param bool $exclude_unassigned True or false if you wish to exclude tags that are not assigne to any item (default: true)
* @param bool $checkaccess True or false (default: false) if you wish to exclude tags that are assigned to items (or are not assigned at all) the visitor is not allowed to see
* Beware that this may cause overhead on large sites. Usage of the static_html_cache is strongely recommended then.
* @since 1.1
*/
function printAllTagsAs($option, $class = '', $sort = NULL, $counter = FALSE, $links = TRUE, $maxfontsize = 2, $maxcount = 50, $mincount = 1, $limit = NULL, $minfontsize = 0.8, $exclude_unassigned = true, $checkaccess = false) {
global $_zp_current_search;
$option = strtolower($option);
if ($class != "") {
$class = ' class="' . $class . '"';
}
$tagcount = getAllTagsCount($exclude_unassigned, $checkaccess);
if (!is_array($tagcount)) {
return false;
}
switch ($sort) {
case 'results':
arsort($tagcount);
if (!is_null($limit)) {
$tagcount = array_slice($tagcount, 0, $limit);
}
break;
case 'random':
if (!is_null($limit)) {
$tagcount = array_slice($tagcount, 0, $limit);
}
shuffle_assoc($tagcount);
break;
default:
break;
}
?>
>
0) {
foreach ($tagcount as $key => $val) {
if (!$counter) {
$counter = "";
} else {
$counter = " (" . $val . ") ";
}
if ($option == "cloud") { // calculate font sizes, formula from wikipedia
if ($val <= $mincount) {
$size = $minfontsize;
} else {
$size = min(max(round(($maxfontsize * ($val - $mincount)) / ($maxcount - $mincount), 2), $minfontsize), $maxfontsize);
}
$size = str_replace(',', '.', $size);
$size = ' style="font-size:' . $size . 'em;"';
} else {
$size = '';
}
if ($val >= $mincount) {
if ($links) {
if (is_object($_zp_current_search)) {
$albumlist = $_zp_current_search->getAlbumList();
} else {
$albumlist = NULL;
}
$link = getSearchURL(search_quote($key), '', 'tags', 0, array('albums' => $albumlist));
?>
-
>
- >
\n";
$nr = 0;
foreach($datecount as $key => $val) {
$nr++;
if ($key == '0000-00-01') {
$year = "no date";
$month = "";
} else {
$dt = strftime('%Y-%B', strtotime($key));
$year = substr($dt, 0, 4);
$month = substr($dt, 5);
}
if ($lastyear != $year) {
$lastyear = $year;
if ($nr != 1) {
echo "\n\n";
}
echo "$year\n\n";
}
if (is_object($_zp_current_search)) {
$albumlist = $_zp_current_search->getAlbumList();
} else {
$albumlist = NULL;
}
$datekey = substr($key, 0, 7);
if ($activedate = $datekey) {
$cl = ' class="' . $classactive . '"';
} else {
$cl = '';
}
echo '- ' . $month . ' (' . $val . ')
' . "\n";
}
echo "
\n\n\n";
}
/**
* Produces the url to a custom page (e.g. one that is not album.php, image.php, or index.php)
*
* @param string $page page name to include in URL
* @param string $q query string to add to url
* @param bool $webpath host path to be prefixed. If "false" is passed you will get a localized "WEBPATH"
* @return string
*/
function getCustomPageURL($page, $q = '', $webpath = null) {
global $_zp_conf_vars;
if (array_key_exists($page, $_zp_conf_vars['special_pages'])) {
$rewrite = preg_replace('~^_PAGE_/~', _PAGE_ . '/', $_zp_conf_vars['special_pages'][$page]['rewrite']) . '/';
} else {
$rewrite = '/' . _PAGE_ . '/' . $page . '/';
}
$plain = "index.php?p=$page";
if (!empty($q)) {
$rewrite .= "?$q";
$plain .= "&$q";
}
return zp_apply_filter('getLink', rewrite_path($rewrite, $plain, $webpath), $page . '.php', null);
}
/**
* Prints the url to a custom page (e.g. one that is not album.php, image.php, or index.php)
*
* @param string $linktext Text for the URL
* @param string $page page name to include in URL
* @param string $q query string to add to url
* @param string $prev text to insert before the URL
* @param string $next text to follow the URL
* @param string $class optional class
*/
function printCustomPageURL($linktext, $page, $q = '', $prev = '', $next = '', $class = NULL) {
if (!is_null($class)) {
$class = 'class="' . $class . '"';
}
echo $prev . "" . html_encode($linktext) . "" . $next;
}
//*** Search functions *******************************************************
//****************************************************************************
/**
* tests if a search page is an "archive" page
*
* @return bool
*/
function isArchive() {
return isset($_REQUEST['date']);
}
/**
* Returns a search URL
*
* @param mixed $words the search words target
* @param mixed $dates the dates that limit the search
* @param mixed $fields the fields on which to search
* @param int $page the page number for the URL
* @param array $object_list the list of objects to search
* @return string
* @since 1.1.3
*/
function getSearchURL($words, $dates, $fields, $page, $object_list = NULL) {
$urls = '';
$rewrite = false;
if (MOD_REWRITE) {
$rewrite = true;
if (is_array($object_list)) {
foreach ($object_list as $obj) {
if ($obj) {
$rewrite = false;
break;
}
}
}
}
if ($rewrite) {
if (empty($dates)) {
$url = SEO_WEBPATH . '/' . _SEARCH_ . '/';
} else {
$url = SEO_WEBPATH . '/' . _ARCHIVE_ . '/';
}
} else {
$url = SEO_WEBPATH . "/index.php?p=search";
}
if (!empty($fields) && empty($dates)) {
if (!is_array($fields)) {
$fields = explode(',', $fields);
}
$temp = $fields;
if ($rewrite && count($fields) == 1 && array_shift($temp) == 'tags') {
$url = SEO_WEBPATH . '/' . _TAGS_ . '/';
} else {
$search = new SearchEngine();
$urls = $search->getSearchFieldsText($fields, 'searchfields=');
}
}
if (!empty($words)) {
if (is_array($words)) {
foreach ($words as $key => $word) {
$words[$key] = search_quote($word);
}
$words = implode(',', $words);
}
$words = strtr($words, array('%' => '__25__', '&' => '__26__', '#' => '__23__', '/' => '__2F__'));
if ($rewrite) {
$url .= urlencode($words) . '/';
} else {
$url .= "&words=" . urlencode($words);
}
}
if (!empty($dates)) {
if (is_array($dates)) {
$dates = implode(',', $dates);
}
if ($rewrite) {
$url .= $dates . '/';
} else {
$url .= "&date=$dates";
}
}
if ($page > 1) {
if ($rewrite) {
$url .= "$page/";
} else {
if ($urls) {
$urls .= '&';
}
$urls .= "page=$page";
}
}
if (!empty($urls)) {
if ($rewrite) {
$url .= '?' . $urls;
} else {
$url .= '&' . $urls;
}
}
if (is_array($object_list)) {
foreach ($object_list as $key => $list) {
if (!empty($list)) {
$url .= '&in' . $key . '=' . html_encode(implode(',', $list));
}
}
}
return $url;
}
/**
* Prints the search form
*
* Search works on a list of tokens entered into the search form.
*
* Tokens may be part of boolean expressions using &, |, !, and parens. (Comma is retained as a synonom of | for
* backwords compatibility.)
*
* Tokens may be enclosed in quotation marks to create exact pattern matches or to include the boolean operators and
* parens as part of the tag..
*
* @param string $prevtext text to go before the search form
* @param string $id css id for the search form, default is 'search'
* @param string $buttonSource optional path to the image for the button or if not a path to an image,
* this will be the button hint
* @param string $buttontext optional text for the button ("Search" will be the default text)
* @param string $iconsource optional theme based icon for the search fields toggle
* @param array $query_fields override selection for enabled fields with this list
* @param array $objects_list optional array of things to search eg. [albums]=>[list], etc.
* if the list is simply 0, the objects will be omitted from the search
* @param string $within set to true to search within current results, false to search fresh
* @since 1.1.3
*/
function printSearchForm($prevtext = NULL, $id = 'search', $buttonSource = NULL, $buttontext = '', $iconsource = NULL, $query_fields = NULL, $object_list = NULL, $within = NULL) {
global $_zp_adminJS_loaded, $_zp_current_search;
$engine = new SearchEngine();
if (!is_null($_zp_current_search) && !$_zp_current_search->getSearchWords()) {
$engine->clearSearchWords();
}
if (!is_null($object_list)) {
if (array_key_exists(0, $object_list)) { // handle old form albums list
trigger_error(gettext('printSearchForm $album_list parameter is deprecated. Pass array("albums"=>array(album, album, ...)) instead.'), E_USER_NOTICE);
$object_list = array('albums' => $object_list);
}
}
if (empty($buttontext)) {
$buttontext = gettext("Search");
}
$zf = WEBPATH . "/" . ZENFOLDER;
$searchwords = $engine->codifySearchString();
if (substr($searchwords, -1, 1) == ',') {
$searchwords = substr($searchwords, 0, -1);
}
$hint = $hintJS = '%s';
if (empty($searchwords)) {
$within = false;
} else {
$hintJS = gettext('%s within previous results');
}
if (is_null($within)) {
$within = getOption('search_within');
}
if ($within) {
$hint = gettext('%s within previous results');
}
if (preg_match('!\/(.*)[\.png|\.jpg|\.jpeg|\.gif]$!', $buttonSource)) {
$buttonSource = 'src="' . $buttonSource . '" alt="' . $buttontext . '"';
$button = 'title="' . sprintf($hint, $buttontext) . '"';
$type = 'image';
} else {
$type = 'submit';
if ($buttonSource) {
$button = 'value="' . $buttontext . '" title="' . sprintf($hint, $buttonSource) . '"';
$buttonSource = '';
} else {
$button = 'value="' . $buttontext . '" title="' . sprintf($hint, $buttontext) . '"';
}
}
if (empty($iconsource)) {
$iconsource = WEBPATH . '/' . ZENFOLDER . '/images/searchfields_icon.png';
}
if (MOD_REWRITE) {
$searchurl = SEO_WEBPATH . '/' . _SEARCH_ . '/';
} else {
$searchurl = WEBPATH . "/index.php?p=search";
}
if (!$within) {
$engine->clearSearchWords();
}
$fields = $engine->allowedSearchFields();
if (!$_zp_adminJS_loaded) {
$_zp_adminJS_loaded = true;
?>
codifySearchString());
}
/**
* Returns the date of the search
*
* @param string $format formatting of the date, default 'F Y'
* @return string
* @since 1.1
*/
function getSearchDate($format = '%B %Y') {
if (in_context(ZP_SEARCH)) {
global $_zp_current_search;
$date = $_zp_current_search->getSearchDate();
if (empty($date)) {
return "";
}
if ($date == '0000-00') {
return gettext("no date");
};
$dt = strtotime($date . "-01");
return zpFormattedDate($format, $dt);
}
return false;
}
/**
* controls the thumbnail layout of themes.
*
* Uses the theme options:
* albums_per_row
* albums_per_page
* images_per_row
* images_per_page
*
* Computes a normalized images/albums per page and computes the number of
* images that will fit on the "transitional" page between album thumbs and
* image thumbs. This function is "internal" and is called from the root
* index.php script before the theme script is loaded.
*/
function setThemeColumns() {
global $_zp_current_album, $_firstPageImages, $_oneImagePage;
$_firstPageImages = false;
if (($albumColumns = getOption('albums_per_row')) <= 1)
$albumColumns = false;
if (($imageColumns = getOption('images_per_row')) <= 1)
$imageColumns = false;
$albcount = max(1, getOption('albums_per_page'));
if (($albumColumns) && (($albcount % $albumColumns) != 0)) {
setOption('albums_per_page', $albcount = ((floor($albcount / $albumColumns) + 1) * $albumColumns), false);
}
$imgcount = max(1, getOption('images_per_page'));
if (($imageColumns) && (($imgcount % $imageColumns) != 0)) {
setOption('images_per_page', $imgcount = ((floor($imgcount / $imageColumns) + 1) * $imageColumns), false);
}
if ((getOption('thumb_transition') && !$_oneImagePage) && in_context(ZP_ALBUM | ZP_SEARCH) && $albumColumns && $imageColumns) {
$count = getNumAlbums();
if ($count == 0) {
$_firstPageImages = 0;
}
$rowssused = ceil(($count % $albcount) / $albumColumns); /* number of album rows unused */
$leftover = floor(max(1, getOption('images_per_page')) / $imageColumns) - $rowssused;
$_firstPageImages = max(0, $leftover * $imageColumns); /* number of images that fill the leftover rows */
if ($_firstPageImages == $imgcount) {
$_firstPageImages = 0;
}
}
}
//************************************************************************************************
// album password handling
//************************************************************************************************
/**
* returns the auth type of a guest login
*
* @param string $hint
* @param string $show
* @return string
*/
function checkForGuest(&$hint = NULL, &$show = NULL) {
global $_zp_gallery, $_zp_gallery_page, $_zp_current_zenpage_page, $_zp_current_category, $_zp_current_zenpage_news;
$authType = zp_apply_filter('checkForGuest', NULL);
if (!is_null($authType))
return $authType;
if (in_context(ZP_SEARCH)) { // search page
$hash = getOption('search_password');
if (getOption('search_user') != '')
$show = true;
$hint = get_language_string(getOption('search_hint'));
$authType = 'zpcms_auth_search';
if (empty($hash)) {
$hash = $_zp_gallery->getPassword();
if ($_zp_gallery->getUser() != '')
$show = true;
$hint = $_zp_gallery->getPasswordHint();
$authType = 'zpcms_auth_gallery';
}
if (!empty($hash) && zp_getCookie($authType) == $hash) {
return $authType;
}
} else if (!is_null($_zp_current_zenpage_news)) {
$authType = $_zp_current_zenpage_news->checkAccess($hint, $show);
return $authType;
} else if (isset($_GET['album'])) { // album page
list($album, $image) = rewrite_get_album_image('album', 'image');
if ($authType = checkAlbumPassword($album, $hint)) {
return $authType;
} else {
$alb = newAlbum($album);
if ($alb->getUser() != '')
$show = true;
return false;
}
} else { // other page
$hash = $_zp_gallery->getPassword();
if ($_zp_gallery->getUser() != '')
$show = true;
$hint = $_zp_gallery->getPasswordHint();
if (!empty($hash) && zp_getCookie('zpcms_auth_gallery') == $hash) {
return 'zpcms_auth_gallery';
}
}
if (empty($hash))
return 'zp_public_access';
return false;
}
/**
* Checks to see if a password is needed
*
* Returns true if access is allowed
*
* The password protection is hereditary. This normally only impacts direct url access to an object since if
* you are going down the tree you will be stopped at the first place a password is required.
*
*
* @param string $hint the password hint
* @param bool $show whether there is a user associated with the password.
* @return bool
* @since 1.1.3
*/
function checkAccess(&$hint = NULL, &$show = NULL) {
global $_zp_current_album, $_zp_current_search, $_zp_gallery, $_zp_gallery_page,
$_zp_current_zenpage_page, $_zp_current_zenpage_news;
if (GALLERY_SECURITY != 'public') // only registered users allowed
$show = true; // therefore they will need to supply their user id is something fails below
if ($_zp_gallery->isUnprotectedPage(stripSuffix($_zp_gallery_page)))
return true;
if (zp_loggedin()) {
$fail = zp_apply_filter('isMyItemToView', NULL);
if (!is_null($fail)) { // filter had something to say about access, honor it
return $fail;
}
switch ($_zp_gallery_page) {
case 'album.php':
case 'image.php':
if ($_zp_current_album->isMyItem(LIST_RIGHTS)) {
return true;
}
break;
case 'search.php':
if (zp_loggedin(VIEW_SEARCH_RIGHTS)) {
return true;
}
break;
default:
if (zp_loggedin(VIEW_GALLERY_RIGHTS)) {
return true;
}
break;
}
}
if (GALLERY_SECURITY == 'public' && ($access = checkForGuest($hint, $show))) {
return $access; // public page or a guest is logged in
}
return false;
}
/**
* Returns a redirection link for the password form
*
* @return string
*/
function getPageRedirect() {
global $_zp_login_error, $_zp_password_form_printed, $_zp_current_search, $_zp_gallery_page,
$_zp_current_album, $_zp_current_image, $_zp_current_zenpage_news;
if($_zp_login_error !== 2) {
return false;
}
switch ($_zp_gallery_page) {
case 'index.php':
$action = '/index.php';
break;
case 'album.php':
$action = '/index.php?userlog=1&album=' . pathurlencode($_zp_current_album->name);
break;
case 'image.php':
$action = '/index.php?userlog=1&album=' . pathurlencode($_zp_current_album->name) . '&image=' . urlencode($_zp_current_image->filename);
break;
case 'pages.php':
$action = '/index.php?userlog=1&p=pages&title=' . urlencode(getPageTitlelink());
break;
case 'news.php':
$action = '/index.php?userlog=1&p=news';
if (!is_null($_zp_current_zenpage_news)) {
$action .= '&title=' . urlencode($_zp_current_zenpage_news->getTitlelink());
}
break;
case 'password.php':
$action = str_replace(SEO_WEBPATH, '', getRequestURI());
if ($action == '/' . _PAGE_ . '/password' || $action == '/index.php?p=password') {
$action = '/index.php';
}
break;
default:
if (in_context(ZP_SEARCH)) {
$action = '/index.php?userlog=1&p=search' . $_zp_current_search->getSearchParams();
} else {
$action = '/index.php?userlog=1&p=' . substr($_zp_gallery_page, 0, -4);
}
}
return SEO_WEBPATH . $action;
}
/**
* Prints the album password form
*
* @param string $hint hint to the password
* @param bool $showProtected set false to supress the password protected message
* @param bool $showuser set true to force the user name filed to be present
* @param string $redirect optional URL to send the user to after successful login
*
* @since 1.1.3
*/
function printPasswordForm($_password_hint, $_password_showuser = NULL, $_password_showProtected = true, $_password_redirect = NULL) {
global $_zp_login_error, $_zp_password_form_printed, $_zp_current_search, $_zp_gallery, $_zp_gallery_page,
$_zp_current_album, $_zp_current_image, $theme, $_zp_current_zenpage_page, $_zp_authority;
if ($_zp_password_form_printed)
return;
$_zp_password_form_printed = true;
if (is_null($_password_redirect))
$_password_redirect = getPageRedirect();
if (is_null($_password_showuser))
$_password_showuser = $_zp_gallery->getUserLogonField();
?>
Zenphoto");
}
/**
* Expose some informations in a HTML comment
*
* @param string $obj the path to the page being loaded
* @param array $plugins list of activated plugins
* @param string $theme The theme being used
*/
function exposeZenPhotoInformations($obj = '', $plugins = '', $theme = '') {
global $_zp_filters;
$a = basename($obj);
if ($a != 'full-image.php') {
echo "\n";
}
}
/**
* Gets the content of a codeblock for an image, album or Zenpage newsarticle or page.
*
* The priority for codeblocks will be (based on context)
* 1: articles
* 2: pages
* 3: images
* 4: albums
* 5: gallery.
*
* This means, for instance, if we are in ZP_ZENPAGE_NEWS_ARTICLE context we will use the news article
* codeblock even if others are available.
*
* Note: Echoing this array's content does not execute it. Also no special chars will be escaped.
* Use printCodeblock() if you need to execute script code.
*
* @param int $number The codeblock you want to get
* @param mixed $what optonal object for which you want the codeblock
*
* @return string
*/
function getCodeblock($number = 1, $object = NULL) {
global $_zp_current_album, $_zp_current_image, $_zp_current_zenpage_news, $_zp_current_zenpage_page, $_zp_gallery, $_zp_gallery_page;
if (!$number) {
setOptionDefault('codeblock_first_tab', 0);
}
if (!is_object($object)) {
if ($_zp_gallery_page == 'index.php') {
$object = $_zp_gallery;
}
if (in_context(ZP_ALBUM)) {
$object = $_zp_current_album;
}
if (in_context(ZP_IMAGE)) {
$object = $_zp_current_image;
}
if (in_context(ZP_ZENPAGE_PAGE)) {
if ($_zp_current_zenpage_page->checkAccess()) {
$object = $_zp_current_zenpage_page;
}
}
if (in_context(ZP_ZENPAGE_NEWS_ARTICLE)) {
if ($_zp_current_zenpage_news->checkAccess()) {
$object = $_zp_current_zenpage_news;
}
}
}
if (!is_object($object)) {
return NULL;
}
$codeblock = getSerializedArray($object->getcodeblock());
$codeblock = zp_apply_filter('codeblock', @$codeblock[$number], $object, $number);
if ($codeblock) {
$codeblock = applyMacros($codeblock);
}
return $codeblock;
}
/**
* Prints the content of a codeblock for an image, album or Zenpage newsarticle or page.
*
* @param int $number The codeblock you want to get
* @param mixed $what optonal object for which you want the codeblock
*
* @return string
*/
function printCodeblock($number = 1, $what = NULL) {
$codeblock = getCodeblock($number, $what);
if ($codeblock) {
$context = get_context();
eval('?>' . $codeblock);
set_context($context);
}
}
/**
* Checks for URL page out-of-bounds for "standard" themes
* Note: This function assumes that an "index" page will display albums
* and the pagination be determined by them. Any other "index" page strategy needs to be
* handled by the theme itself.
*
* @param boolean $request
* @param string $gallery_page
* @param int $page
* @return boolean will be true if all is well, false if a 404 error should occur
*/
function checkPageValidity($request, $gallery_page, $page) {
global $_zp_gallery, $_firstPageImages, $_oneImagePage, $_zp_zenpage, $_zp_current_category;
$count = NULL;
switch ($gallery_page) {
case 'album.php':
case 'search.php':
$albums_per_page = max(1, getOption('albums_per_page'));
$pageCount = (int) ceil(getNumAlbums() / $albums_per_page);
$imageCount = getNumImages();
if ($_oneImagePage) {
if ($_oneImagePage === true) {
$imageCount = min(1, $imageCount);
} else {
$imageCount = 0;
}
}
$images_per_page = max(1, getOption('images_per_page'));
$count = ($pageCount + (int) ceil(($imageCount - $_firstPageImages) / $images_per_page));
break;
case 'index.php':
if (galleryAlbumsPerPage() != 0) {
$count = (int) ceil($_zp_gallery->getNumAlbums() / galleryAlbumsPerPage());
}
break;
case 'news.php':
if (in_context(ZP_ZENPAGE_NEWS_CATEGORY)) {
$count = count($_zp_current_category->getArticles());
} else {
$count = count($_zp_zenpage->getArticles());
}
$count = (int) ceil($count / ZP_ARTICLES_PER_PAGE);
break;
default:
$count = zp_apply_filter('checkPageValidity', NULL, $gallery_page, $page);
break;
}
if ($page > $count) {
$request = false; // page is out of range
}
return $request;
}
function print404status($album, $image, $obj) {
global $_zp_page;
echo "\n" . gettext("Zenphoto Error: the requested object was not found.");
if (isset($album)) {
echo '
' . sprintf(gettext('Album: %s'), html_encode($album));
if (isset($image)) {
echo '
' . sprintf(gettext('Image: %s'), html_encode($image));
}
} else {
echo '
' . sprintf(gettext('Page: %s'), html_encode(substr(basename($obj), 0, -4)));
}
if (isset($_zp_page) && $_zp_page > 1) {
echo '/' . $_zp_page;
}
}
/**
* Gets current item's owner (gallery images and albums) or author (Zenpage articles and pages)
*
* @since ZenphotoCMS 1.5.2
*
* @global obj $_zp_current_album
* @global obj $_zp_current_image
* @global obj $_zp_current_zenpage_page
* @global obj $_zp_current_zenpage_news
* @param boolean $fullname If the owner/author has a real user account and there is a full name set it is returned
* @return boolean
*/
function getOwnerAuthor($fullname = false) {
global $_zp_current_album, $_zp_current_image, $_zp_current_zenpage_page, $_zp_current_zenpage_news;
$ownerauthor = false;
if (in_context(ZP_IMAGE)) {
$ownerauthor = $_zp_current_image->getOwner($fullname);
} else if (in_context(ZP_ALBUM)) {
$ownerauthor = $_zp_current_album->getOwner($fullname);
}
if (extensionEnabled('zenpage')) {
if (is_Pages()) {
$ownerauthor = $_zp_current_zenpage_page->getAuthor($fullname);
} else if (is_NewsArticle()) {
$ownerauthor = $_zp_current_zenpage_news->getAuthor($fullname);
}
}
if ($ownerauthor) {
return $ownerauthor;
}
return false;
}
/**
* Prints current item's owner (gallery images and albums) or author (Zenpage articles and pages)
*
* @since ZenphotoCMS 1.5.2
*
* @param type $fullname
*/
function printOwnerAuthor($fullname = false) {
echo html_encode(getOwnerAuthor($fullname));
}
/**
* Returns the search url for items the current item's owner (gallery) or author (Zenpage) is assigned to
*
* This eventually may return the url to an actual user profile page in the future.
*
* @since ZenphotoCMS 1.5.2
*
* @return type
*/
function getOwnerAuthorURL() {
$ownerauthor = getOwnerAuthor(false);
if($ownerauthor) {
if (in_context(ZP_IMAGE) || in_context(ZP_ALBUM)) {
return getUserURL($ownerauthor, 'gallery');
}
if (extensionEnable('zenpagae') && (is_Pages() || is_NewsArticle())) {
return getUserURL($ownerauthor, 'zenpage');
}
}
}
/**
* Prints the link to the search engine for results of all items the current item's owner (gallery) or author (Zenpage) is assigned to
*
* This eventually may return the url to an actual user profile page in the future.
*
* @since ZenphotoCMS 1.5.2
*
* @param type $fullname
* @param type $resulttype
* @param type $class
* @param type $id
* @param type $title
*/
function printOwnerAuthorURL($fullname = false, $resulttype = 'all', $class = null, $id = null, $title = null) {
$author = $linktext = $title = getOwnerAuthor(false);
if ($author) {
if ($fullname) {
$linktext = getOwnerAuthor(true);
}
if(is_null($title)) {
$title = $linktext;
}
printUserURL($author, $resulttype, $linktext, $class, $id, $title);
}
}
/**
* Returns a an url for the search engine for results of all items the user with $username is assigned to either as owner (gallery) or author (Zenpage)
* Note there is no check if the user name is actually a vaild user account name, owner or author! Use the *OwerAuthor() function for that instead
*
* This eventually may return the url to an actual user profile page in the future.
*
* @since ZenphotoCMS 1.5.2
*
* @param string $username The user name of a user. Note there is no check if the user name is actually valid!
* @param string $resulttype 'all' for owner and author, 'gallery' for owner of images/albums only, 'zenpage' for author of news articles and pages
* @return string|null
*/
function getUserURL($username, $resulttype = 'all') {
if (empty($username)) {
return null;
}
switch ($resulttype) {
case 'all':
default:
$fields = array('owner', 'author');
break;
case 'gallery':
$fields = array('owner');
break;
case 'zenpage':
$fields = array('author');
break;
}
return getSearchURL(search_quote($username), '', $fields, 1, null);
}
/**
* Prints the link to the search engine for results of all items $username is assigned to either as owner (gallery) or author (Zenpage)
* Note there is no check if the user name is actually a vaild user account name, owner or author! Use the *OwerAuthor() function for that instead
*
* This eventually may point to an actual user profile page in the future.
*
* @since ZenphotoCMS 1.5.2
*
* @param string $username The user name of a user.
* @param string $resulttype 'all' for owner and author, 'gallery' for owner of images/albums only, 'zenpage' for author of news articles and pages
* @param string $linktext The link text. If null the user name will be used
* @param string $class The CSS class to attach, default null.
* @param type $id The CSS id to attach, default null.
* @param type $title The title attribute to attach, default null so the user name is used
*/
function printUserURL($username, $resulttype = 'all', $linktext = null, $class = null, $id = null, $title = null) {
if ($username) {
$url = getUserURL($username, $resulttype);
if (is_null($linktext)) {
$linktext = $username;
}
if (is_null($title)) {
$title = $username;
}
printLinkHTML($url, $linktext, $title, $class, $id);
}
}
/**
* Display the site copyright notice if defined and display is enabled
*
* @since ZenphotoCMS 1.5.8
*
* @global obj $_zp_gallery
* @param string $before Text to print before it
* @param string $after Text to print after it
*/
function printCopyrightNotice($before = '', $after = '') {
global $_zp_gallery;
$copyright_notice = $_zp_gallery->getCopyrightNotice();
if(!empty($copyright_notice) && getOption('display_copyright_notice')) {
echo $before . $copyright_notice . $after;
}
}
require_once(SERVERPATH . '/' . ZENFOLDER . '/template-filters.php');
?>