1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419:
<?php
$plugin_description = gettext("Adds a theme function to print an album menu either as a nested list or as a dropdown menu.");
$plugin_author = "Malte Müller (acrylian), Stephen Billard (sbillard)";
$plugin_category = gettext('Media');
$option_interface = 'print_album_menu';
define('ALBUM_MENU_COUNT', getOption('print_album_menu_count'));
define('ALBUM_MENU_SHOWSUBS', getOption('print_album_menu_showsubs'));
$_recursion_limiter = array();
class print_album_menu {
function __construct() {
setOptionDefault('print_album_menu_showsubs', 0);
setOptionDefault('print_album_menu_count', 1);
}
function getOptionsSupported() {
global $_common_truncate_handler;
$options = array(gettext('"List" subalbum level') => array('key' => 'print_album_menu_showsubs', 'type' => OPTION_TYPE_TEXTBOX,
'order' => 0,
'desc' => gettext('The depth of subalbum levels shown with the <code>printAlbumMenu</code> and <code>printAlbumMenuList</code> “List” option. Note: themes may override this default.')),
gettext('Show counts') => array('key' => 'print_album_menu_count', 'type' => OPTION_TYPE_CHECKBOX,
'order' => 1,
'desc' => gettext('If checked, image and album counts will be included in the list. Note: Themes may override this option.')),
gettext('Truncate titles*') => array('key' => 'menu_truncate_string', 'type' => OPTION_TYPE_TEXTBOX,
'disabled' => $_common_truncate_handler,
'order' => 6,
'desc' => gettext('Limit titles to this many characters. Zero means no limit.')),
gettext('Truncate indicator*') => array('key' => 'menu_truncate_indicator', 'type' => OPTION_TYPE_TEXTBOX,
'disabled' => $_common_truncate_handler,
'order' => 7,
'desc' => gettext('Append this string to truncated titles.'))
);
if ($_common_truncate_handler) {
$options['note'] = array('key' => 'menu_truncate_note', 'type' => OPTION_TYPE_NOTE,
'order' => 8,
'desc' => '<p class="notebox">' . $_common_truncate_handler . '</p>');
} else {
$_common_truncate_handler = gettext('* These options may be set via the <a href="javascript:gotoName(\'print_album_menu\');"><em>print_album_menu</em></a> plugin options.');
$options['note'] = array('key' => 'menu_truncate_note',
'type' => OPTION_TYPE_NOTE,
'order' => 8,
'desc' => gettext('<p class="notebox">*<strong>Note:</strong> The setting of these options may be shared with other plugins.</p>'));
}
return $options;
}
function handleOption($option, $currentValue) {
}
}
function printAlbumMenu($option, $showcount = NULL, $css_id = '', $css_class_topactive = '', $css_class = '', $css_class_active = '', $indexname = "Gallery Index", $showsubs = NULL, $firstimagelink = false, $keeptopactive = false) {
if ($option == "jump") {
printAlbumMenuJump($showcount, $indexname, $firstimagelink,$showsubs);
} else {
printAlbumMenuList($option, $showcount, $css_id, $css_class_topactive, $css_class, $css_class_active, $indexname, $showsubs, $firstimagelink, $keeptopactive);
}
}
function printAlbumMenuList($option, $showcount = NULL, $css_id = '', $css_class_topactive = '', $css_class = '', $css_class_active = '', $indexname = "Gallery Index", $showsubs = NULL, $firstimagelink = false, $keeptopactive = false, $startlist = true, $limit = NULL) {
global $_zp_gallery, $_zp_current_album, $_zp_gallery_page;
if (in_context(ZP_SEARCH_LINKED)) {
$option = "list-top";
}
$albumpath = rewrite_path("/", "/index.php?album=");
if (empty($_zp_current_album) || ($_zp_gallery_page != 'album.php' && $_zp_gallery_page != 'image.php')) {
$currentfolder = "";
} else {
$currentfolder = $_zp_current_album->name;
}
if (is_null($css_id)) {
$css_id = 'menu_albums';
}
if (is_null($css_class_topactive)) {
$css_class_topactive = 'menu_topactive';
}
if (is_null($css_class)) {
$css_class = 'submenu';
}
if (is_null($css_class_active)) {
$css_class_active = 'menu-active';
}
$startlist = $startlist && !($option == 'omit-top' || $option == 'list-sub');
if ($startlist)
echo '<ul id="'. $css_id . '">'."\n";
if ($option === "list" OR $option === "list-top") {
if (!empty($indexname)) {
echo "<li><a href='" . html_encode(getGalleryIndexURL()) . "' title='" . html_encode($indexname) . "'>" . $indexname . "</a></li>";
}
}
if ($option == 'list-sub' && in_context(ZP_ALBUM)) {
$albums = $_zp_current_album->getAlbums();
} else {
$albums = $_zp_gallery->getAlbums();
}
printAlbumMenuListAlbum($albums, $currentfolder, $option, $showcount, $showsubs, $css_class, $css_class_topactive, $css_class_active, $firstimagelink, $keeptopactive, $limit);
if ($startlist)
echo "</ul>\n";
}
function printAlbumMenuListAlbum($albums, $folder, $option, $showcount, $showsubs, $css_class, $css_class_topactive, $css_class_active, $firstimagelink, $keeptopactive, $limit = NULL) {
global $_zp_gallery, $_zp_current_album, $_zp_current_search, $_recursion_limiter;
if (is_null($limit)) {
$limit = MENU_TRUNCATE_STRING;
}
if (is_null($showcount)) {
$showcount = ALBUM_MENU_COUNT;
}
if (is_null($showsubs)) {
$showsubs = ALBUM_MENU_SHOWSUBS;
}
if ($showsubs && !is_numeric($showsubs)) {
$showsubs = 9999999999;
}
$pagelevel = count(explode('/', $folder));
$currenturalbumname = "";
foreach ($albums as $album) {
$level = count(explode('/', $album));
$process = (($level < $showsubs && $option == "list")
|| ($option != 'list-top'
&& strpos($folder, $album) === 0
&& $level <= $pagelevel)
);
if ($process && hasDynamicAlbumSuffix($album) && !is_dir(ALBUM_FOLDER_SERVERPATH . $album)) {
if (in_array($album, $_recursion_limiter))
$process = false;
}
$topalbum = '';
$albumobj = newAlbum($album, true);
$has_password = '';
if($albumobj->isProtected()) {
$has_password = ' has_password';
}
if ($level > 1 || ($option != 'omit-top')) {
if ($level == 1) {
$css_class_t = $css_class_topactive . $has_password;
} else {
$css_class_t = $css_class_active . $has_password;
}
if ($keeptopactive) {
if (isset($_zp_current_album) && is_object($_zp_current_album)) {
$currenturalbum = getUrAlbum($_zp_current_album);
$currenturalbumname = $currenturalbum->name;
}
}
$count = "";
if ($showcount) {
$toplevelsubalbums = $albumobj->getAlbums();
$toplevelsubalbums = count($toplevelsubalbums);
$topalbumnumimages = $albumobj->getNumImages();
if ($topalbumnumimages + $toplevelsubalbums > 0) {
$count = ' <span style="white-space:nowrap;"><small>(';
if ($toplevelsubalbums > 0) {
$count .= sprintf(ngettext('%u album', '%u albums', $toplevelsubalbums), $toplevelsubalbums);
}
if ($topalbumnumimages > 0) {
if ($toplevelsubalbums) {
$count .= ' ';
}
$count .= sprintf(ngettext('%u image', '%u images', $topalbumnumimages), $topalbumnumimages);
}
$count .= ')</small></span>';
}
}
if ((in_context(ZP_ALBUM) && !in_context(ZP_SEARCH_LINKED) && (@$_zp_current_album->getID() == $albumobj->getID() ||
$albumobj->name == $currenturalbumname)) ||
(in_context(ZP_SEARCH_LINKED)) && ($a = $_zp_current_search->getDynamicAlbum()) && $a->name == $albumobj->name) {
$current = $css_class_t;
} else {
$current = "";
}
$title = $albumobj->getTitle();
if ($limit) {
$display = shortenContent($title, $limit, MENU_TRUNCATE_INDICATOR);
} else {
$display = $title;
}
if ($firstimagelink && $albumobj->getNumImages() != 0) {
$link = '<li class="' . $current . '"><a href="' . html_encode($albumobj->getImage(0)->getLink()) . '" title="' . html_encode($title) . '">' . html_encode($display) . '</a>' . $count;
} else {
$link = '<li class="' . $current . '"><a href="' . html_encode($albumobj->getLink(1)) . '" title="' . html_encode($title) . '">' . html_encode($display) . '</a>' . $count;
}
echo $link;
}
if ($process) {
$subalbums = $albumobj->getAlbums();
if (!empty($subalbums)) {
echo "\n".'<ul class="' . $css_class . '">'."\n";
array_push($_recursion_limiter, $album);
printAlbumMenuListAlbum($subalbums, $folder, $option, $showcount, $showsubs, $css_class, $css_class_topactive, $css_class_active, $firstimagelink, false, $limit);
array_pop($_recursion_limiter);
echo "\n</ul>\n";
}
}
if ($option == 'list' || $option == 'list-top' || $level > 1) {
echo "\n</li>\n";
}
}
}
function printAlbumMenuJump($option = "count", $indexname = "Gallery Index", $firstimagelink = false, $showsubs = NULL, $skipform = false) {
global $_zp_gallery, $_zp_current_album, $_zp_gallery_page;
if (!is_null($_zp_current_album) || $_zp_gallery_page == 'album.php') {
$currentfolder = $_zp_current_album->name;
}
if (is_null($showsubs)) {
$showsubs = ALBUM_MENU_SHOWSUBS;
}
if ($showsubs && !is_numeric($showsubs)) {
$showsubs = 9999999999;
}
if(!$skipform) {
?>
<script type="text/javaScript">
function gotoLink(form) {
var OptionIndex=form.ListBoxURL.selectedIndex;
parent.location = form.ListBoxURL.options[OptionIndex].value;
}
</script>
<form name="AutoListBox" action="#">
<p>
<select name="ListBoxURL" size="1" onchange="gotoLink(this.form);">
<?php
if (!empty($indexname)) {
$selected = checkSelectedAlbum("", "index");
?>
<option <?php echo $selected; ?> value="<?php echo html_encode(getGalleryIndexURL()); ?>"><?php echo $indexname; ?></option>
<?php
}
}
$albums = getNestedAlbumList(null, $showsubs, false);
foreach($albums as $album) {
$albumobj = newAlbum($album['name'], true);
$count = '';
if ($option == "count") {
$numimages = $albumobj->getNumImages();
if($numimages != 0) {
$count = " (" . $numimages . ")";
}
}
$sortorder = count($album['sort_order']);
$arrow = '';
if($sortorder > 1) {
for($c = 1; $c != $sortorder; $c++) {
$arrow .= '» ';
}
}
$selected = checkSelectedAlbum($albumobj->name, "album");
if ($firstimagelink && $numimages != 0) {
$link = "<option $selected value='" . html_encode($albumobj->getImage(0)->getLink()) . "'>" . $arrow . getBare($albumobj->getTitle()) . $count . "</option>";
} else {
$link = "<option $selected value='" . html_encode($albumobj->getLink(1)) . "'>" . $arrow . getBare($albumobj->getTitle()) . $count . "</option>";
}
echo $link;
}
if(!$skipform) { ?>
</select>
</p>
</form>
<?php
}
}
function checkSelectedAlbum($checkalbum, $option) {
global $_zp_current_album, $_zp_gallery_page;
if (is_object($_zp_current_album)) {
$currentalbumname = $_zp_current_album->name;
} else {
$currentalbumname = "";
}
$selected = "";
switch ($option) {
case "index":
if ($_zp_gallery_page === "index.php") {
$selected = "selected";
}
break;
case "album":
if ($currentalbumname === $checkalbum) {
$selected = "selected";
}
break;
}
return $selected;
}
?>