Hello, I'm getting the following error both on my gallery pages and my image pages:
Warning: Invalid argument supplied for foreach() in /home/content/b/j/a/bjancewicz/html/ZenPhoto/zp-core/template-functions.php on line 177
I've tried to go through the entire template-functions.php doc to see if any brackets were missing or anything like that, but I don't see anything missing... does anything stick out to anyone else?
Here is line 177: foreach ($_zp_plugin_scripts as $script) {'
Here is the whole template-functions.php
'
<?php
/**
* Functions used to display content in themes.
*/
/**
* Load the classes
*/
require_once('classes.php');
/**
* Invoke the controller to handle requests
*/
require_once('controller.php');
//******************************************************************************
//*** Template Functions *******************************************************
//******************************************************************************
/*** Generic Helper Functions *************/
/******************************************/
/**
* General link printing function
* @param string $url The link URL
* @param string $text The text to go with the link
* @param string $title Text for the title tag
* @param string $class optional class
* @param string $id optional id
*/
function printLink($url, $text, $title=NULL, $class=NULL, $id=NULL) {
echo "<a href="" . htmlspecialchars($url) . """ .
(($title) ? " title="" . htmlspecialchars($title, ENT_QUOTES) . """ : "") .
(($class) ? " class="$class"" : "") .
(($id) ? " id="$id"" : "") . ">" .
$text . "";
}
/**
* Prints the zenphoto version string
*/
function printVersion() {
echo ZENPHOTO_VERSION. ' ['.ZENPHOTO_RELEASE. ']';
}
/**
* Prints the admin edit link for albums if the current user is logged-in
* Returns true if the user is logged in
* @param string $text text for the link
* @param string $before text do display before the link
* @param string $after text do display after the link
* @param string $title Text for the HTML title item
* @param string $class The HTML class for the link
* @param string $id The HTML id for the link
* @return bool
* @since 1.1
*/
function printAdminLink($text, $before='', $after='', $title=NULL, $class=NULL, $id=NULL) {
if (zp_loggedin()) {
echo $before;
printLink(WEBPATH.'/' . ZENFOLDER . '/admin.php', $text, $title, $class, $id);
echo $after;
return true;
}
return false;
}
/**
* Prints the admin edit link for subalbums if the current user is logged-in
* @param string $text text for the link
* @param string $before text do display before the link
* @param string $after text do display after the link
* @since 1.1
*/
function printSubalbumAdmin($text, $before='', $after='') {
global $_zp_current_album, $_zp_themeroot;
if (zp_loggedin()) {
echo $before;
printLink(WEBPATH.'/' . ZENFOLDER . '/admin.php?page=edit&album=' . urlencode($_zp_current_album->name), $text, NULL, NULL, NULL);
echo $after;
}
}
/**
* Prints the clickable drop down toolbox on any theme page with generic admin helpers
* @param string $context index, album, image or search
* @param string $id the html/css theming id
* @since 1.1
*/
function printAdminToolbox($context=null, $id='admin') {
global $_zp_current_album, $_zp_current_image, $_zp_current_search, $_zp_loggedin;
if (zp_loggedin()) {
$zf = WEBPATH."/".ZENFOLDER;
$dataid = $id . '_data';
$page = getCurrentPage();
$redirect = '';
echo "n<script type="text/javascript" src="".$zf."/js/admin.js"></script>n";
if (is_null($context)) { $context = get_context(); }
echo '<div id="' .$id. '">'."n".'<h3><a href="">'.gettext('Admin Toolbox').'</a></h3>'."n"."n</div>";
echo '<div id="' .$dataid. '" style="display: none;">'."n";
printAdminLink(gettext('Admin'), '', "n");
$albumname = $_zp_current_album->name;
if ($context === ZP_INDEX) {
if (isMyAlbum($albumname, EDIT_RIGHTS)) {
printSortableGalleryLink(gettext('Sort gallery'), gettext('Manual sorting'));
echo "n";
}
if (isMyAlbum($albumname, UPLOAD_RIGHTS)) {
printLink($zf . '/admin.php?page=upload' . urlencode($_zp_current_album->name), gettext("New album"), NULL, NULL, NULL);
echo "n";
}
if (isset($_GET['p'])) {
$redirect = "&p=" . $_GET['p'];
}
$redirect .= "&page=$page";
} else if (!in_context(ZP_IMAGE) && (!is_null($_zp_current_album))) { // then it must be an album page
if (isMyAlbum($albumname, EDIT_RIGHTS)) {
printSubalbumAdmin(gettext('Edit album'), '', "n");
if (!$_zp_current_album->isDynamic()) {
printSortableAlbumLink(gettext('Sort album'), gettext('Manual sorting'));
echo "n";
}
echo "<a href="javascript: confirmDeleteAlbum('".$zf."/admin.php?page=edit&action=deletealbum&album=" .
urlencode($albumname) . "');" title="".gettext("Delete the album")."">".gettext("Delete album")."n";
}
if (isMyAlbum($albumname, UPLOAD_RIGHTS) && !$_zp_current_album->isDynamic()) {
printLink($zf . '/admin.php?page=upload&album=' . urlencode($albumname), gettext("Upload Here"), NULL, NULL, NULL);
echo "n";
printLink($zf . '/admin.php?page=upload&new&album=' . urlencode($albumname), gettext("New Album Here"), NULL, NULL, NULL);
echo "n";
}
$redirect = "&album=".urlencode($albumname)."&page=$page";
} else if (in_context(ZP_IMAGE)) {
$imagename = urlencode($_zp_current_image->filename);
if (isMyAlbum($albumname, EDIT_RIGHTS)) {
echo "<a href="javascript: confirmDeleteImage('".$zf."/admin.php?page=edit&action=deleteimage&album=" .
urlencode($albumname) . "&image=". $imagename . "');" title="".gettext("Delete the image")."">".gettext("Delete image")."";
echo "n";
}
$redirect = "&album=".urlencode($albumname)."&image=$imagename";
} else if (in_context(ZP_SEARCH)&& !empty($_zp_current_search->words)) {
if ($_zp_loggedin & UPLOAD_RIGHTS) {
echo "<a href=""".$zf."/dynamic.php"" title=""".gettext("Create">".gettext("Create Album")."</a><br/>";
}
$redirect = "&p=search" . $_zp_current_search->getSearchParams() . "&page=$page";
}
echo "<a href=""".$zf."/admin.php?logout$redirect"">".gettext("Logout")."</a>n";
echo "</div>n";
}
}
/**
* Print any Javascript required by zenphoto. Every theme should include this somewhere in its <head>.
*/
function zenJavascript() {
global $_zp_phoogle, $_zp_current_album, $_zp_plugin_scripts;
if (!is_null($_zp_phoogle)) {$_zp_phoogle->printGoogleJS();}
if (($rights = zp_loggedin()) & EDIT_RIGHTS) {
if (in_context(ZP_ALBUM)) {
$grant = isMyAlbum($_zp_current_album->name, EDIT_RIGHTS);
} else {
$grant = $rights & ADMIN_RIGHTS;
}
if ($grant) {
echo " <script type="text/javascript" src="" . WEBPATH . "/" . ZENFOLDER . "/js/ajax.js"></script>n";
echo " <script type="text/javascript">n";
sajax_show_javascript();
echo " </script>n";
}
}
echo " <script type="text/javascript" src="" . WEBPATH . "/" . ZENFOLDER . "/js/scripts-common.js"></script>n";
echo " <script type="text/javascript" src="" . WEBPATH . "/" . ZENFOLDER . "/js/jquery.js"></script>n";
foreach ($_zp_plugin_scripts as $script) {
echo $script."n";
}
}
//*** Gallery Index (album list) Context ***
//******************************************
/**
* Returns the title of the ZenPhoto Gallery without printing it.
*
* @return string
*/
function getGalleryTitle() {
return getOption('gallery_title');
}
/**
* Prints the title of the gallery.
*/
function printGalleryTitle() {
echo getGalleryTitle();
}
/**
* Returns the name of the main website if zenphoto is part of a website without printing it
* and if added this in zp-config.php..
*
* @return string
*/
function getMainSiteName() {
return getOption('website_title');
}
/**
* Returns the URL of the main website (from the admin options)
*
* @return string
*/
function getMainSiteURL() {
return getOption('website_url');
}
/**
* Returns the URL of the main gallery page containing the current album
*
* @return string
*/
function getGalleryIndexURL() {
global $_zp_current_album;
if (in_context(ZP_ALBUM)) {
$album = getUrAlbum($_zp_current_album);
$page = $album->getGalleryPage();
}
if ($page > 1) {
return rewrite_path("/page/" . $page, "/index.php?page=" . $page);
} else {
return WEBPATH . "/";
}
}
/**
* Returns the number of albums.
*
* @return int
*/
function getNumAlbums() {
global $_zp_gallery, $_zp_current_search;
if (in_context(ZP_SEARCH)) {
return $_zp_current_search->getNumAlbums();
} else {
return $_zp_gallery->getNumAlbums();
}
}
/*** 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 string $sorttype what you want to sort the albums by
* @return bool
* @since 0.6
*/
function next_album($all=false, $sorttype=null) {
global $_zp_albums, $_zp_gallery, $_zp_current_album, $_zp_page, $_zp_current_album_restore, $_zp_current_search;
if (checkforPassword()) { return false; }
if (is_null($_zp_albums)) {
if (in_context(ZP_SEARCH)) {
$_zp_albums = $_zp_current_search->getAlbums($all ? 0 : $_zp_page);
} else if (in_context(ZP_ALBUM)) {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
$_zp_albums = $search->getAlbums($all ? 0 : $_zp_page);
} else {
$_zp_albums = $_zp_current_album->getSubAlbums($all ? 0 : $_zp_page, $sorttype);
}
} else {
$_zp_albums = $_zp_gallery->getAlbums($all ? 0 : $_zp_page, $sorttype);
}
if (empty($_zp_albums)) { return false; }
$_zp_current_album_restore = $_zp_current_album;
$_zp_current_album = new Album($_zp_gallery, array_shift($_zp_albums));
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 = new Album($_zp_gallery, array_shift($_zp_albums));
return true;
}
}
/**
* Returns the number of albums without printing it.
*
* @return int
*/
function getCurrentPage() {
global $_zp_page;
return $_zp_page;
}
/**
* Returns the count of subalbums in the album
*
* @return int
*/
function getNumSubalbums() {
global $_zp_current_album, $_zp_current_search;
if (in_context(ZP_SEARCH)) {
return $_zp_current_search->getNumAlbums();
} else {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
return $search->getNumAlbums();
} else {
return count($_zp_current_album->getSubalbums());
}
}
}
/**
* 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_gallery_albums_per_page, $_zp_current_album;
if (in_context(ZP_ALBUM | ZP_SEARCH)) {
$albums_per_page = max(1, getOption('albums_per_page'));
if (in_context(ZP_SEARCH)) {
$pageCount = ceil(getNumAlbums() / $albums_per_page);
} else {
$pageCount = ceil(getNumSubalbums() / $albums_per_page);
}
$imageCount = getNumImages();
if ($oneImagePage) {
$imageCount = min(1, $imageCount);
}
$images_per_page = max(1, getOption('images_per_page'));
$pageCount = ($pageCount + ceil(($imageCount - getOption('images_first_page')) / $images_per_page));
return $pageCount;
} else if (in_context(ZP_INDEX)) {
if($_zp_gallery_albums_per_page != 0) {
return ceil($_zp_gallery->getNumAlbums() / $_zp_gallery_albums_per_page);
} else {
return NULL;
}
} else {
return null;
}
}
/**
* Returns the URL of a page. Use alway with a variable like getPageURL(1)
* for the first page for example. Use this function when you know the total pages
*
* @param int $page
* @param int $total
* @return int
*/
function getPageURL_($page, $total) {
global $_zp_current_album, $_zp_gallery, $_zp_current_search;
if (in_context(ZP_SEARCH)) {
$searchwords = $_zp_current_search->words;
$searchdate = $_zp_current_search->dates;
$searchfields = $_zp_current_search->fields;
$searchpagepath = getSearchURL($searchwords, $searchdate, $searchfields, $page);
return $searchpagepath;
} else {
if ($page <= $total && $page > 0) {
if (in_context(ZP_ALBUM)) {
return rewrite_path( pathurlencode($_zp_current_album->name) . (($page > 1) ? "/page/" . $page . "/" : ""),
"/index.php?album=" . pathurlencode($_zp_current_album->name) . (($page > 1) ? "&page=" . $page : "") );
} else if (in_context(ZP_INDEX)) {
return rewrite_path((($page > 1) ? "/page/" . $page . "/" : "/"), "/index.php" . (($page > 1) ? "?page=" . $page : ""));
}
}
return null;
}
}
/**
* Returns the URL of a page. Use alway with a variable like getPageURL(1)
* for the first page for example.
*
* @param int $page
* @return string
*/
function getPageURL($page) {
$total = getTotalPages();
return(getPageURL_($page, $total));
}
/**
* 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 getPageURL(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 printNextPageLink($text, $title=NULL, $class=NULL, $id=NULL) {
if (hasNextPage()) {
printLink(getNextPageURL(), $text, $title, $class, $id);
} else {
echo "<span class="disabledlink">$text</span>";
}
}
/**
* 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 getPageURL(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 printPrevPageLink($text, $title=NULL, $class=NULL, $id=NULL) {
if (hasPrevPage()) {
printLink(getPrevPageURL(), $text, $title, $class, $id);
} else {
echo "<span class="disabledlink">$text</span>";
}
}
/**
* 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 "<div" . (($id) ? " id="$id"" : "") . " class="$class">";
printPrevPageLink($prevtext, gettext("Previous Page"));
echo " $separator ";
printNextPageLink($nexttext, gettext("Next Page"));
echo "</div>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
*/
function printPageList($class='pagelist', $id=NULL) {
printPageListWithNav(null, null, false, false, $class, $id);
}
/**
* 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
*/
function printPageListWithNav($prevtext, $nexttext, $oneImagePage=false, $nextprev=true, $class='pagelist', $id=NULL) {
$total = getTotalPages($oneImagePage);
if ($total < 2) {
$class .= ' disabled_nav';
}
echo "<div" . (($id) ? " id="$id"" : "") . " class="$class">";
$current = getCurrentPage();
echo "n<ul class="$class">";
if ($nextprev) {
echo "n <li class="prev">";
printPrevPageLink($prevtext, gettext("Previous Page"));
echo "";
}
for ($i=($j=max(1, min($current-2, $total-6))); $i <= min($total, $j+6); $i++) {
echo "n <li" . (($i == $current) ? " class="current"" : "") . ">";
printLink(getPageURL_($i, $total), $i, "Page $i" . (($i == $current) ? gettext(" (Current Page)") : ""));
echo "";
}
if ($i <= $total) {echo "n
<li><a>" . ". . ." . "</a></li>
"; }
if ($nextprev) {
echo "n <li class="next">";
printNextPageLink($nexttext, gettext("Next Page"));
echo "";
}
echo "n";
echo "n</div>n";
}
//*** Album Context ************************
//******************************************
/**
* Returns the title of the current album.
*
* @return string
*/
function getAlbumTitle() {
if(!in_context(ZP_ALBUM)) return false;
global $_zp_current_album;
return $_zp_current_album->getTitle();
}
/**
* Prints the title of the current album. If you are logged in you can click on this to modify the name on the fly.
*
* @param bool $editable set to true to allow editing (for the admin)
*/
function printAlbumTitle($editable=false) {
global $_zp_current_album;
if ($editable && zp_loggedin()) {
echo "<span id="albumTitleEditable" style="display: inline;">" . htmlspecialchars(getAlbumTitle()) . "</span>n";
echo "<script type="text/javascript">initEditableTitle('albumTitleEditable');</script>";
} else {
echo htmlspecialchars(getAlbumTitle());
}
}
/**
* Gets the 'n' for n of m albums
*
* @return int
*/
function albumNumber() {
global $_zp_current_album, $_zp_current_image, $_zp_current_search, $_zp_gallery, $_zp_dynamic_album;
$name = $_zp_current_album->getFolder();
if (in_context(ZP_SEARCH)) {
$albums = $_zp_current_search->getAlbums();
} else if (in_context(ZP_ALBUM)) {
if (is_null($_zp_dynamic_album)) {
$parent = $_zp_current_album->getParent();
if (is_null($parent)) {
$albums = $_zp_gallery->getAlbums();
} else {
$albums = $parent->getSubalbums();
}
} else {
$search = $_zp_dynamic_album->getSearchEngine();
$albums = $search->getAlbums();
}
}
$ct = count($albums);
for ($c = 0; $c < $ct; $c++) {
if ($name == $albums[$c]) {
return $c+1;
}
}
return false;
}
/**
* Returns an array of the names of the parents of the current album.
*
* @return array
*/
function getParentAlbums($album=null) {
if(!in_context(ZP_ALBUM)) return false;
global $_zp_current_album, $_zp_current_search, $_zp_gallery;
$parents = array();
if (is_null($album)) {
if (in_context(ZP_SEARCH_LINKED)) {
$name = $_zp_current_search->dynalbumname;
if (empty($name)) return $parents;
$album = new Album($_zp_gallery, $name);
} else {
$album = $_zp_current_album;
}
}
while (!is_null($album = $album->getParent())) {
array_unshift($parents, $album);
}
return $parents;
}
/**
* 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 tag
*/
function printAlbumBreadcrumb($before='', $after='', $title='Album Thumbnails') {
global $_zp_current_search, $_zp_current_gallery;
echo $before;
if (in_context(ZP_SEARCH_LINKED)) {
$page = $_zp_current_search->page;
$searchwords = $_zp_current_search->words;
$searchdate = $_zp_current_search->dates;
$searchfields = $_zp_current_search->fields;
$searchpagepath = getSearchURL($searchwords, $searchdate, $searchfields, $page);
$dynamic_album = $_zp_current_search->dynalbumname;
if (empty($dynamic_album)) {
echo "<a href="""">";
echo "<em>".gettext("Search")."</em></a>";
} else {
$album = new Album($_zp_current_gallery, $dynamic_album);
echo "<a href="""">";
echo $album->getTitle();
}
} else {
echo "</a><a href="""" title=""$title"">" . getAlbumTitle() . "</a>";
}
echo $after;
}
/**
* 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
*/
function printParentBreadcrumb($before = '', $between=' | ', $after = ' | ') {
echo $before;
if (in_context(ZP_SEARCH)) {
$parents = array();
} else {
$parents = getParentAlbums();
}
$n = count($parents);
if ($n == 0) return;
$i = 0;
foreach($parents as $parent) {
if ($i > 0) echo $between;
$url = rewrite_path("/" . pathurlencode($parent->name) . "/", "/index.php?album=" . urlencode($parent->name));
printLink($url, $parent->getTitle(), $parent->getDesc());
$i++;
}
echo $after;
}
/**
* Prints a link to the 'main website'
* Only prints the link if the url is not empty and does not point back the 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) {
$site = getOption('website_url');
if (!empty($site)) {
if (substr($site,-1) == "/") { $site = substr($site, 0, -1); }
if (empty($name)) { $name = getOption('website_title'); }
if (empty($name)) { $name = 'Home'; }
if ($site != FULLWEBPATH) {
echo $before;
printLink($site, $name, $title, $class, $id);
echo $after;
}
}
}
/**
* Returns the formatted date field of the album
*
* @param string $format
* @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 strftime($format, strtotime($d));
}
/**
* Returns the date of the current album
*
* @param string $before Insert here the text to be printed before the date.
* @param string $nonemessage Insert here the text to be printed if there is no date.
* @param string $format Format string for the date formatting
*/
function printAlbumDate($before='Date: ', $nonemessage='', $format=null) {
if (is_null($format)) {
$format = getOption('date_format');
}
$date = getAlbumDate($format);
if ($date) {
echo $before . $date;
} else {
echo $nonemessage;
}
}
/**
* Returns the place of the album.
*
* @return string
*/
function getAlbumPlace() {
global $_zp_current_album;
return $_zp_current_album->getPlace();
}
/**
* Prints the place of the album.
*
*/
function printAlbumPlace() {
echo getAlbumPlace();
}
/**
* Returns the album 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();
}
/**
* Prints the album description of the current album.
*
* @param bool $editable
*/
function printAlbumDesc($editable=false) {
global $_zp_current_album;
$desc = htmlspecialchars(getAlbumDesc());
$desc = str_replace("rn", "n", $_zp_current_album->getDesc());
$desc = str_replace("n", '', $desc);
if ($editable && zp_loggedin()) {
echo "<div id="albumDescEditable" style="display: block;">" . $desc . "</div>n";
echo "<script type="text/javascript">initEditableDesc('albumDescEditable');</script>";
} else {
echo $desc;
}
}
/**
* Returns the custom_data field of the current album
*
* @return string
*/
function getAlbumCustomData() {
global $_zp_current_album;
return $_zp_current_album->getCustomData();
}
/**
* Sets the album custom_data field
*
* @param string $val
*/
function setAlbumCustomData($val) {
global $_zp_current_album;
$_zp_current_album->setCustomData($val);
$_zp_current_album->save();
}
/**
* 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 $_zp_album_image->get($field);
}
/**
* Returns the album link url of the current album.
*
* @return string
*/
function getAlbumLinkURL($album=NULL) {
global $_zp_current_album, $_zp_current_image, $_zp_current_search, $firstPageImages;
if (is_null($album)) $album = $_zp_current_album;
$page = 0;
if (in_context(ZP_IMAGE) && !in_context(ZP_SEARCH)) {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
$imageindex = $search->getImageIndex($_zp_current_album->name, $_zp_current_image->filename);
$numalbums = count($search->getAlbums(0));
} else {
$imageindex = $_zp_current_image->getIndex();
$numalbums = count($album->getSubalbums());
}
$imagepage = floor(($imageindex - $firstPageImages) / max(1, getOption('images_per_page'))) + 1;
$albumpages = ceil($numalbums / max(1, getOption('albums_per_page')));
$page = $albumpages + $imagepage;
}
if (in_context(ZP_IMAGE) && $page > 1) {
// Link to the page the current image belongs to.
$link = rewrite_path("/" . pathurlencode($album->name) . "/page/" . $page,
"/index.php?album=" . urlencode($album->name) . "&page=" . $page);
} else {
$link = rewrite_path("/" . pathurlencode($album->name) . "/",
"/index.php?album=" . urlencode($album->name));
}
return $link;
}
/**
* 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 printAlbumLink($text, $title, $class=NULL, $id=NULL) {
printLink(getAlbumLinkURL(), $text, $title, $class, $id);
}
/**
* Print a link that allows the user to sort the current album if they are logged in.
* If they are already sorting, the Save button is displayed.
*
* @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 printSortableAlbumLink($text, $title, $class=NULL, $id=NULL) {
global $_zp_sortable_list, $_zp_current_album;
if (zp_loggedin()) {
if (!isset($_GET['sortable'])) {
printLink(WEBPATH . "/" . ZENFOLDER . "/albumsort.php?page=edit&album=" . urlencode($_zp_current_album->getFolder()),
$text, $title, $class, $id);
} else {
// TODO: this doesn't really work yet
$_zp_sortable_list->printForm(getAlbumLinkURL(), 'POST', gettext('Save'), 'button');
}
}
}
/**
* Print a link that allows the user to sort the Gallery if they are logged in.
* If they are already sorting, the Save button is displayed.
*
* @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 printSortableGalleryLink($text, $title, $class=NULL, $id=NULL) {
global $_zp_sortable_list, $_zp_current_album;
if (zp_loggedin()) {
if (!isset($_GET['sortable'])) {
printLink(WEBPATH . "/" . ZENFOLDER . "/admin.php?page=edit", $text, $title, $class, $id);
} else {
// TODO: this doesn't really work yet
$_zp_sortable_list->printForm(WEBPATH . "/" . ZENFOLDER . "/admin.php?page=edit", 'POST', gettext('Save'), 'button');
}
}
}
/**
* Returns the name of the defined album thumbnail image.
*
* @return string
*/
function getAlbumThumb() {
global $_zp_current_album;
return $_zp_current_album->getAlbumThumb();
}
/**
* 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.
* */
function printAlbumThumbImage($alt, $class=NULL, $id=NULL) {
global $_zp_current_album;
if (!$_zp_current_album->getShow()) {
$class .= " not_visible";
} else {
$pwd = $_zp_current_album->getPassword();
if (zp_loggedin() && !empty($pwd)) {
$class .= " password_protected";
}
}
$class = trim($class);
if (checkAlbumPassword($_zp_current_album->name, $hint)) {
echo "<img src="" . htmlspecialchars(getAlbumThumb()) . "" alt="" . htmlspecialchars($alt, ENT_QUOTES) . """ .
(($class) ? " class="$class"" : "") . (($id) ? " id="$id"" : "") . " />";
} else {
echo "<img src="". WEBPATH . '/' . ZENFOLDER."/images/err-passwordprotected.gif" height="".getOption('thumb_crop_height').
"" width="".getOption('thumb_crop_width')."" />";
}
}
/**
* 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 cropwidth
* @param int $croph crop height
* @param int $cropx crop part x axis
* @param int $cropy crop part y axis
*
* @return string
*/
function getCustomAlbumThumb($size, $width=NULL, $height=NULL, $cropw=NULL, $croph=NULL, $cropx=NULL, $cropy=null) {
global $_zp_current_album;
$thumb = $_zp_current_album->getAlbumThumbImage();
return $thumb->getCustomImage($size, $width, $height, $cropw, $croph, $cropx, $cropy, true);
}
/**
* Prints a link to a custom sized thumbnail of the current album
*
* @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
*
* @return string
*/
function printCustomAlbumThumbImage($alt, $size, $width=NULL, $height=NULL, $cropw=NULL, $croph=NULL, $cropx=NULL, $cropy=null, $class=NULL, $id=NULL) {
global $_zp_current_album;
if (!$_zp_current_album->getShow()) {
$class .= " not_visible";
} else {
$pwd = $_zp_current_album->getPassword();
if (zp_loggedin() && !empty($pwd)) {
$class .= " password_protected";
}
}
$class = trim($class);
/* set the HTML image width and height parameters in case this image was "zen-logo.gif" substituted for no thumbnail then the thumb layout is preserved */
if ($sizeW = max(is_null($width) ? 0: $sizeW, is_null($cropw) ? 0 : $cropw)) {
$sizing = ' width="' . $sizeW . '"';
} else {
$sizing = null;
}
if ($sizeH = max(is_null($height) ? 0 : $height, is_null($croph) ? 0 : $croph)) {
$sizing = $sizing . ' height="' . $sizeH . '"';
}
if (checkAlbumPassword($_zp_current_album->name, $hint)){
echo "<img src="" . htmlspecialchars(getCustomAlbumThumb($size, $width, $height, $cropw, $croph, $cropx, $cropy)). """ . $sizing . " alt="" . htmlspecialchars($alt, ENT_QUOTES) . """ .
(($class) ? " class="$class"" : "") . (($id) ? " id="$id"" : "") . " />";
} else {
echo "<img src="" . WEBPATH . '/' . ZENFOLDER."/images/err-passwordprotected.gif"".$sizing." />";
}
}
/**
* 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)) {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
$nextalbum = $search->getNextAlbum($_zp_current_album->name);
} else {
$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 rewrite_path("/" . pathurlencode($nextalbum->name),
"/index.php?album=" . urlencode($nextalbum->name));
}
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)) {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
$prevalbum = $search->getPrevAlbum($_zp_current_album->name);
} else {
$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 rewrite_path("/" . pathurlencode($prevalbum->name),
"/index.php?album=" . urlencode($prevalbum->name));
}
return false;
}
/**
* Returns true if this page has image thumbs on it
*
* @return bool
*/
function isImagePage() {
global $_zp_page;
return ($_zp_page - getTotalPages(true)) >= 0;
}
/**
* Returns true if this page has album thumbs on it
*
* @return bool
*/
function isAlbumPage() {
if (in_context(ZP_SEARCH)) {
$pageCount = Ceil(getNumAlbums() / getOption('albums_per_page'));
} else {
$pageCount = Ceil(getNumSubalbums() / 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)) {
return $_zp_current_search->getNumImages();
} else {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
return $search->getNumImages();
} else {
return $_zp_current_album->getNumImages();
}
}
}
/**
* Returns the count of all the images in the album and any subalbums
*
* @param object $album The album whose image count you want
* @return int
* @since 1.1.4
*/
function getTotalImagesIn($album) {
global $_zp_gallery;
$sum = $album->getNumImages();
$subalbums = $album->getSubalbums(0);
while (count($subalbums) > 0) {
$albumname = array_pop($subalbums);
$album = new Album($_zp_gallery, $albumname);
$sum = $sum + getTotalImagesIn($album);
}
return $sum;
}
/**
* 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
*@param string $sorttype overrides the default sort type
*@param bool $overridePassword the password chedk
*@return bool
*
* @return bool
*/
function next_image($all=false, $firstPageCount=0, $sorttype=null, $overridePassword=false) {
global $_zp_images, $_zp_current_image, $_zp_current_album, $_zp_page, $_zp_current_image_restore,
$_zp_conf_vars, $_zp_current_search, $_zp_gallery;
if (!$overridePassword) { if (checkforPassword()) { return false; } }
$imagePageOffset = getTotalPages(true) - 1; /* gives us the count of pages for album thumbs */
if ($all) {
$imagePage = 1;
} else {
$_zp_conf_vars['images_first_page'] = $firstPageCount; /* save this so pagination can see it */
$imagePage = $_zp_page - $imagePageOffset;
}
if ($firstPageCount > 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)) {
$searchtype = true;
$_zp_images = $_zp_current_search->getImages($all ? 0 : ($imagePage), $firstPageCount);
} else {
if ($_zp_current_album->isDynamic()) {
$searchtype = true;
$search = $_zp_current_album->getSearchEngine();
$_zp_images = $search->getImages($all ? 0 : ($imagePage), $firstPageCount);
} else {
$_zp_images = $_zp_current_album->getImages($all ? 0 : ($imagePage), $firstPageCount, $sorttype);
}
}
if (empty($_zp_images)) { return false; }
$_zp_current_image_restore = $_zp_current_image;
$img = array_shift($_zp_images);
if (is_array($img)) {
$_zp_current_image = new Image(new Album($_zp_gallery, $img['folder']), $img['filename']);
} else {
$_zp_current_image = new Image($_zp_current_album, $img);
}
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);
if (is_array($img)) {
$_zp_current_image = new Image(new Album($_zp_gallery, $img['folder']), $img['filename']);
} else {
$_zp_current_image = new Image($_zp_current_album, $img);
}
return true;
}
}
//*** Image Context ************************
//******************************************
/**
* Returns the 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 the title of the current image.
*
* @param bool $editable if set to true and the admin is logged in allows editing of the title
*/
function printImageTitle($editable=false) {
global $_zp_current_image;
if ($editable && zp_loggedin()) {
echo "<span id="imageTitle" style="display: inline;">" . htmlspecialchars(getImageTitle()) . "</span>n";
echo "<script type="text/javascript">initEditableTitle('imageTitle');</script>";
} else {
echo "<span id="imageTitle" style="display: inline;">" . htmlspecialchars(getImageTitle()) . "</span>n";
}
}
/**
* 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)) {
$images = $_zp_current_search->getImages();
$ct = count($images);
for ($c = 0; $c < $ct; $c++) {
if ($name == $images[$c] ['filename']) {
return $c+1;
}
}
} else {
if ($_zp_current_album->isDynamic()) {
$search = $_zp_current_album->getSearchEngine();
$images = $search->getImages();
$ct = count($images);
for ($c = 0; $c < $ct; $c++) {
if ($name == $images[$c] ['filename']) {
return $c+1;
}
}
} 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 strftime($format, strtotime($d));
}
/**
* Prints the data from the current image
*
* @param string $before Text to put out before the date (if there is a date)
* @param string $nonemessage Text to put out if there is no date
* @param string $format format string for the date
*/
function printImageDate($before='Date: ', $nonemessage='', $format=null) {
if (is_null($format)) {
$format = getOption('date_format');
}
$date = getImageDate($format);
if ($date) {
echo $before . $date;
} else {
echo $nonemessage;
}
}
// 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 video argument of the current Image.
*
* @return bool
*/
function getImageVideo() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
return $_zp_current_image->getVideo();
}
/**
* Returns video Thumbnail of the current Image.
*
* @return string
*/
function getImageVideoThumb() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
return $_zp_current_image->getVideoThumb();
}
/**
* Returns the description field of the current image
* new lines are replaced with <br/> tags
*
* @return string
*/
function getImageDesc() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
$desc = str_replace("rn", "n", $_zp_current_image->getDesc());
return str_replace("n", "<br/>", $desc);
}
/**
* Prints the description field of the current image
*
* @param bool $editable set true to allow editing by the admin
*/
function printImageDesc($editable=false) {
global $_zp_current_image;
$desc = htmlspecialchars(getImageDesc());
$desc = str_replace("rn", "n", $_zp_current_image->getDesc());
$desc = str_replace("n", "<br/>", $desc);
if ($editable && zp_loggedin()) {
echo "<div id="imageDesc" style="display: block;">" . $desc . "</div>n";
echo "<script type="text/javascript">initEditableDesc('imageDesc');</script>";
} else {
echo "<div id="imageDesc" style="display: block;">" . $desc . "</div>n";
}
}
/**
* 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 $_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();
}
/**
* Sets the image custom_data field
*
* @param string $val
*/
function setImageCustomData($val) {
Global $_zp_current_image;
$_zp_current_image->setCustomData($val);
$_zp_current_image->save();
}
/**
* A composit for printing image data
*
* @param string $field which data you want
* @param string $label the html label for the paragraph
*/
function printImageData($field, $label) {
global $_zp_current_image;
if($data = getImageData($field)) { // only print it if there's something there
echo "<p class="metadata"><strong>" . $label . "</strong> " . htmlspecialchars(getImageData($field)) . "n";
}
}
/**
* Get the unique ID of the current image.
*
* @return int
*/
function getImageID() {
if (!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
return $_zp_current_image->id;
}
/**
* Print the unique ID of the current image.
*/
function printImageID() {
if (!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
echo "image_".getImageID();
}
/**
* Get the sort order of this image.
*
* @return string
*/
function getImageSortOrder() {
if (!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
return $_zp_current_image->getSortOrder();
}
/**
* Print the sort order of this image.
*/
function printImageSortOrder() {
if (!in_context(ZP_IMAGE)) return false;
echo getImageSortOrder();
}
/**
* True if there is a next image
*
* @return bool
*/
function hasNextImage() { global $_zp_current_image; return $_zp_current_image->getNextImage(); }
/**
* True if there is a previous image
*
* @return bool
*/
function hasPrevImage() { global $_zp_current_image; 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;
$nextimg = $_zp_current_image->getNextImage();
return rewrite_path("/" . pathurlencode($nextimg->album->name) . "/" . urlencode($nextimg->filename) . im_suffix(),
"/index.php?album=" . urlencode($nextimg->album->name) . "&image=" . urlencode($nextimg->filename));
}
/**
* 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;
$previmg = $_zp_current_image->getPrevImage();
return rewrite_path("/" . pathurlencode($previmg->album->name) . "/" . urlencode($previmg->filename) . im_suffix(),
"/index.php?album=" . urlencode($previmg->album->name) . "&image=" . urlencode($previmg->filename));
}
/**
* Returns the url of the first image in current album.
*
* @return string
* @author gerben
*/
function getFirstImageURL() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_album, $_zp_current_image;
$firstimg = $_zp_current_album->getImage(0);
return rewrite_path("/" . pathurlencode($firstimg->album->name) . "/" . urlencode($firstimg->filename) . im_suffix(),
"/index.php?album=" . urlencode($firstimg->album->name) . "&image=" . urlencode($firstimg->filename));
}
/**
* Returns the url of the last image in current album.
*
* @return string
* @author gerben
*/
function getLastImageURL() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_album, $_zp_current_image;
$lastimg = $_zp_current_album->getImage($_zp_current_album->getNumImages() - 1);
return rewrite_path("/" . pathurlencode($lastimg->album->name) . "/" . urlencode($lastimg->filename) . im_suffix(),
"/index.php?album=" . urlencode($lastimg->album->name) . "&image=" . urlencode($lastimg->filename));
}
/**
* Prints out the javascript to preload the next and previous images
*
*/
function printPreloadScript() {
global $_zp_current_image;
$size = getOption('image_size');
if (hasNextImage() || hasPrevImage()) {
echo "<script type="text/javascript">n";
if (hasNextImage()) {
$nextimg = $_zp_current_image->getNextImage();
echo " nextimg = new Image();n nextimg.src = "" . $nextimg->getSizedImage($size) . "";n";
}
if (hasPrevImage()) {
$previmg = $_zp_current_image->getPrevImage();
echo " previmg = new Image();n previmg.src = "" . $previmg->getSizedImage($size) . "";n";
}
echo "</script>nn";
}
}
/**
* Returns the thumbnail of the previous image.
*
* @return string
*/
function getPrevImageThumb() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
$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;
$img = $_zp_current_image->getNextImage();
return $img->getThumb();
}
/**
* Returns the url of the current image.
*
* @return string
*/
function getImageLinkURL() {
if(!in_context(ZP_IMAGE)) return false;
global $_zp_current_image;
return $_zp_current_image->getImageLink();
}
/**
* 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 printImageLink($text, $title, $class=NULL, $id=NULL) {
printLink(getImageLinkURL(), $text, $title, $class, $id);
}
/**
* Print the entire <div> for a thumbnail. If we are in sorting mode, then only
* the image is inserted, if not, then the hyperlink to the image is also added.
*
* @author Todd Papaioannou (lucky@luckyspin.org)
* @since 1.0.0
*/
function printImageDiv() {
if (!isset($_GET['sortable'])) {
echo '<a href=""'.htmlspecialchars(getImageLinkURL()).'"" title=""'.htmlspecialchars(getImageTitle(),">';
}
printImageThumb(getImageTitle());
if (!isset($_GET['sortable'])) {
echo '</a>';
}
}
/**
* Returns the EXIF infromation from the current image
*
* @return array
*/
function getImageEXIFData() {
global $_zp_current_image;
return $_zp_current_image->getExifData();
}
/**
* Prints image data. Deprecated, use printImageMetadata
*
*/
function printImageEXIFData() { if (getImageVideo()) { } else { printImageMetadata(); } }
/**
* Prints the EXIF data of the current image
*
* @param string $title title tag for the class
* @param bool $toggle set to true to get a java toggle on the display of the data
* @param string $id style class id
* @param string $class style class
*/
function printImageMetadata($title='Image Info', $toggle=true, $id='imagemetadata', $class=null) {
global $_zp_exifvars;
if (false === ($exif = getImageEXIFData())) { return; }
$dataid = $id . &#