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: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: 649: 650: 651: 652: 653: 654: 655: 656: 657: 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: 675: 676: 677: 678: 679: 680: 681: 682: 683: 684: 685: 686: 687: 688: 689: 690: 691: 692: 693: 694: 695: 696: 697: 698: 699: 700: 701: 702: 703:
<?php
$plugin_is_filter = 800 | ADMIN_PLUGIN | THEME_PLUGIN;
$plugin_description = gettext("Plugin to generate file download lists.");
$plugin_author = "Malte MĆ¼ller (acrylian), Stephen Billard (sbillard)";
$plugin_category = gettext('Misc');
$option_interface = "downloadList";
zp_register_filter('admin_utilities_buttons', 'DownloadList::button');
class DownloadList {
function __construct() {
setOptionDefault('downloadList_directory', UPLOAD_FOLDER);
setOptionDefault('downloadList_showfilesize', 1);
setOptionDefault('downloadList_showdownloadcounter', 1);
setOptionDefault('downloadList_user', NULL);
setOptionDefault('downloadList_password', getOption('downloadList_pass'));
setOptionDefault('downloadList_hint', NULL);
setOptionDefault('downloadList_rights', NULL);
setOptionDefault('downloadList_zipFromCache', 0);
}
function getOptionsSupported() {
$options = array(gettext('Download directory') => array(
'key' => 'downloadList_directory',
'type' => OPTION_TYPE_TEXTBOX,
'order' => 2,
'desc' => gettext("This download folder can be relative to your Zenphoto installation (<em>foldername</em>) or external to it (<em>../foldername</em>)! You can override this setting by using the parameter of the printdownloadList() directly on calling.")),
gettext('Show filesize of download items') => array(
'key' => 'downloadList_showfilesize',
'type' => OPTION_TYPE_CHECKBOX,
'order' => 3,
'desc' => ''),
gettext('Show download counter of download items') => array(
'key' => 'downloadList_showdownloadcounter',
'type' => OPTION_TYPE_CHECKBOX,
'order' => 4,
'desc' => ''),
gettext('Files to exclude from the download list') => array(
'key' => 'downloadList_excludesuffixes',
'type' => OPTION_TYPE_TEXTBOX,
'order' => 5,
'desc' => gettext('A list of file suffixes to exclude. Separate with comma and omit the dot (e.g "jpg").')),
gettext('Zip source') => array(
'key' => 'downloadList_zipFromCache',
'type' => OPTION_TYPE_RADIO,
'order' => 6,
'buttons' => array(gettext('From album') => 0, gettext('From Cache') => 1),
'desc' => gettext('Make the album zip from the album folder or from the sized images in the cache.')),
gettext('User rights') => array('key' => 'downloadList_rights', 'type' => OPTION_TYPE_CHECKBOX,
'order' => 1,
'desc' => gettext('Check if users are required to have <em>file</em> rights to download.'))
);
if (GALLERY_SECURITY == 'public') {
$options[gettext('credentials')] = array('key' => 'downloadList_credentials', 'type' => OPTION_TYPE_CUSTOM,
'order' => 0,
'desc' => gettext('Provide credentials to password protect downloads'));
}
return $options;
}
function handleOption($option, $currentValue) {
$user = getOption('downloadList_user');
$x = getOption('downloadList_password');
$hint = getOption('downloadList_hint');
?>
<input type="hidden" name="password_enabled_downloadList" id="password_enabled_downloadList" value="0" />
<p class="password_downloadListextrashow">
<a href="javascript:toggle_passwords('_downloadList',true);">
<?php echo gettext("Password:"); ?>
</a>
<?php
if (empty($x)) {
?>
<img src="<?php echo WEBPATH . '/' . ZENFOLDER; ?>/images/lock_open.png" alt="" class="icon-postiion-top8" />
<?php
} else {
$x = ' ';
?>
<a onclick="resetPass('_downloadList');" title="<?php echo gettext('clear password'); ?>"><img src="<?php echo WEBPATH . '/' . ZENFOLDER; ?>/images/lock.png" alt="" class="icon-postiion-top8" /></a>
<?php
}
?>
</p>
<div class="password_downloadListextrahide" style="display:none">
<a href="javascript:toggle_passwords('_downloadList',false);">
<?php echo gettext("Guest user:"); ?>
</a>
<br />
<input type="text" size="27" id="user_name_downloadList" name="user_downloadList"
onkeydown="passwordClear('_downloadList');"
value="<?php echo html_encode($user); ?>" />
<br />
<span id="strength_downloadList"><?php echo gettext("Password:"); ?></span>
<br />
<input type="password" size="27"
id="pass_downloadList" name="pass_downloadList"
onkeydown="passwordClear('_downloadList');"
onkeyup="passwordStrength('_downloadList');"
value="<?php echo $x; ?>" />
<label><input type="checkbox" name="disclose_password_downloadList" id="disclose_password_downloadList" onclick="passwordClear('_downloadList');
togglePassword('_downloadList');"><?php echo gettext('Show password'); ?></label>
<br />
<span class="password_field__downloadList">
<span id="match_downloadList"><?php echo gettext("(repeat)"); ?></span>
<br />
<input type="password" size="27"
id="pass_r_downloadList" name="pass_r_downloadList" disabled="disabled"
onkeydown="passwordClear('_downloadList');"
onkeyup="passwordMatch('_downloadList');"
value="<?php echo $x; ?>" />
<br />
</span>
<?php echo gettext("Password hint:"); ?>
<br />
<?php print_language_string_list($hint, 'hint_downloadList', false, NULL, 'hint_downloadList', 27); ?>
</div>
<?php
}
function handleOptionSave($themename, $themealbum) {
$notify = processCredentials('downloadList', '_downloadList');
if ($notify == '?mismatch=user') {
return '&custom=' . gettext('You must supply a password for the DownloadList user');
} else if ($notify) {
return '&custom=' . gettext('Your DownloadList passwords were empty or did not match');
}
return false;
}
static function updateListItemCount($path) {
$checkitem = query_single_row("SELECT `data` FROM " . prefix('plugin_storage') . " WHERE `aux` = " . db_quote($path) . " AND `type` = 'downloadList'");
if ($checkitem) {
$downloadcount = $checkitem['data'] + 1;
query("UPDATE " . prefix('plugin_storage') . " SET `data` = " . $downloadcount . ", `type` = 'downloadList' WHERE `aux` = " . db_quote($path) . " AND `type` = 'downloadList'");
}
}
static function addListItem($path) {
$checkitem = query_single_row("SELECT `data` FROM " . prefix('plugin_storage') . " WHERE `aux` = " . db_quote($path) . " AND `type` = 'downloadList'");
if (!$checkitem) {
query("INSERT INTO " . prefix('plugin_storage') . " (`type`,`aux`,`data`) VALUES ('downloadList'," . db_quote($path) . ",'0')");
}
zp_apply_filter('downloadlist_processdownload', $path);
}
static function getListItemsFromDB() {
$downloaditems = query_full_array("SELECT id, `aux`, `data` FROM " . prefix('plugin_storage') . " WHERE `type` = 'downloadList'");
return $downloaditems;
}
static function getListItemFromDB($file) {
$downloaditem = query_single_row($sql = "SELECT id, `aux`, `data` FROM " . prefix('plugin_storage') . " WHERE `type` = 'downloadList' AND `aux` = " . db_quote($file));
return $downloaditem;
}
static function getItemID($path) {
$downloaditem = query_single_row("SELECT id, `aux`, `data` FROM " . prefix('plugin_storage') . " WHERE `type` = 'downloadList' AND `aux` = " . db_quote($path));
if ($downloaditem) {
return $downloaditem['id'];
} else {
return false;
}
}
static function printListArray($array, $listtype = 'ol') {
if ($listtype != 'ol' && $listtype != 'ul') {
$listtype = 'ol';
}
$filesize = '';
foreach ($array as $key => $file) {
?>
<li>
<?php
if (is_array($file)) {
echo $key;
echo '<' . $listtype . '>';
self::printListArray($file, $listtype);
echo '</' . $listtype . '>';
} else {
printDownloadURL($file);
}
?>
</li>
<?php
}
}
static function button($buttons) {
$buttons[] = array(
'category' => gettext('Info'),
'enable' => true,
'button_text' => gettext('Download statistics'),
'formname' => 'downloadstatistics_button',
'action' => FULLWEBPATH . '/' . ZENFOLDER . '/' . PLUGIN_FOLDER . '/downloadList/download_statistics.php',
'icon' => FULLWEBPATH . '/' . ZENFOLDER . '/images/bar_graph.png',
'title' => gettext('Counts of downloads'),
'alt' => '',
'hidden' => '',
'rights' => ADMIN_RIGHTS,
);
return $buttons;
}
static function noFile() {
global $_downloadFile;
if (TEST_RELEASE) {
$file = $_downloadFile;
} else {
$file = basename($_downloadFile);
}
?>
<script type="text/javascript">
window.onload = function () {
alert('<?php printf(gettext('File ā%sā was not found.'), $file); ?>');
}
</script>
<?php
}
}
class AlbumZip {
static function AddAlbum($album, $base, $filebase) {
global $_zp_zip_list;
$albumbase = substr($album->name, $base) . '/';
$album_sidecars = $album->sidecars;
foreach ($album->sidecars as $album_sidecar) {
$album_sidecars[] = strtoupper($album_sidecar);
}
foreach ($album_sidecars as $suffix) {
$f = $albumbase . $album->name . '.' . $suffix;
if (file_exists($album->localpath . internalToFilesystem($f))) {
$_zp_zip_list[$filebase . $f] = $f;
}
}
$images = $album->getImages();
foreach ($images as $imagename) {
$image = newImage($album, $imagename);
$f = $albumbase . $image->filename;
$_zp_zip_list[$filebase . internalToFilesystem($f)] = $f;
$imagebase = stripSuffix($image->filename);
$image_sidecars = $image->sidecars;
foreach ($image->sidecars as $image_sidecar) {
$image_sidecars[] = strtoupper($image_sidecar);
}
foreach ($image_sidecars as $suffix) {
$f = $imagebase . '.' . $suffix;
if (file_exists($album->localpath . $f)) {
$_zp_zip_list[$album->localpath . internalToFilesystem($f)] = $f;
}
}
}
$albums = $album->getAlbums();
foreach ($albums as $albumname) {
$subalbum = newAlbum($albumname);
if ($subalbum->exists && !$album->isDynamic()) {
self::AddAlbum($subalbum, $base, $filebase);
}
}
}
static function AddAlbumCache($album, $base, $filebase) {
global $_zp_zip_list, $defaultSize;
$albumbase = substr($album->name, $base) . '/';
$images = $album->getImages();
foreach ($images as $imagename) {
$image = newImage($album, $imagename);
$uri = $image->getSizedImage($defaultSize);
if (strpos($uri, 'i.php?') === false) {
$f = $albumbase . $image->filename;
$parseurl = parse_url($albumbase . basename($uri));
$c = $parseurl['path'];
$_zp_zip_list[$filebase . $c] = $c;
}
}
$albums = $album->getAlbums();
foreach ($albums as $albumname) {
$subalbum = newAlbum($albumname);
if ($subalbum->exists && !$album->isDynamic()) {
self::AddAlbumCache($subalbum, $base, $filebase);
}
}
}
static function pageError($err, $text) {
header("HTTP/1.0 " . $err . ' ' . $text);
header("Status: " . $err . ' ' . $text);
echo '<html lang="' . getLangAttributeLocale() . '">';
echo '<head>';
echo '<title>' . $err . ' - ' . $text . '</title>';
echo '<meta name="ROBOTS" content="NOINDEX, FOLLOW">';
echo '</head>';
echo '<body style="background-color: #ffffff; color: #000000">';
echo '<p><strong>' . sprintf(gettext('Page error: %2$s (%1$s)'), $err, $text) . '</strong></p>';
echo '</body>';
echo '</html>';
exitZP();
}
static function create($albumname, $fromcache) {
global $_zp_zip_list, $_zp_gallery, $defaultSize;
$album = newAlbum($albumname);
if (!$album->isMyItem(LIST_RIGHTS) && !checkAlbumPassword($albumname)) {
self::pageError(403, gettext("Forbidden"));
}
if (!$album->exists) {
self::pageError(404, gettext('Album not found'));
}
$_zp_zip_list = array();
if ($fromcache) {
$opt = array('large_file_size' => 5 * 1024 * 1024, 'comment' => sprintf(gettext('Created from cached images of %1$s on %2$s.'), $album->name, zpFormattedDate(DATE_FORMAT, time())));
loadLocalOptions(false, $_zp_gallery->getCurrentTheme());
$defaultSize = getOption('image_size');
self::AddAlbumCache($album, strlen($albumname), SERVERPATH . '/' . CACHEFOLDER . '/' . $albumname);
} else {
$opt = array('large_file_size' => 5 * 1024 * 1024, 'comment' => sprintf(gettext('Created from images in %1$s on %2$s.'), $album->name, zpFormattedDate(DATE_FORMAT, time())));
self::AddAlbum($album, strlen($albumname), $album->localpath);
}
if(!empty($_zp_zip_list)) {
$zip = new ZipStream($albumname . '.zip', $opt);
foreach ($_zp_zip_list as $path => $file) {
@set_time_limit(6000);
$zip->add_file_from_path(internalToFilesystem($file), internalToFilesystem($path));
}
$zip->finish();
return true;
}
return false;
}
}
function printdownloadList($dir = '', $listtype = 'ol', $filters = array(), $excludesuffixes = '', $sort = 'desc') {
if ($listtype != 'ol' && $listtype != 'ul') {
$listtype = 'ol';
}
$files = getdownloadList($dir, $filters, $excludesuffixes, $sort);
echo '<' . $listtype . ' class="downloadList">';
DownloadList::printListArray($files, $listtype);
echo '</' . $listtype . '>';
}
function getdownloadList($dir8, $filters8, $excludesuffixes, $sort) {
$filters = Array('Thumbs.db');
foreach ($filters8 as $key => $file) {
$filters[$key] = internalToFilesystem($file);
}
if (empty($dir8)) {
$dir = SERVERPATH . '/' . getOption('downloadList_directory');
} else {
if (substr($dir8, 0, 1) == '/' || strpos($dir8, ':') !== false) {
$dir = internalToFilesystem($dir8);
} else {
$dir = SERVERPATH . '/' . internalToFilesystem($dir8);
}
}
if (empty($excludesuffixes)) {
$excludesuffixes = getOption('downloadList_excludesuffixes');
}
if (empty($excludesuffixes)) {
$excludesuffixes = array();
} elseif (!is_array($excludesuffixes)) {
$excludesuffixes = explode(',', $excludesuffixes);
}
if ($sort == 'asc') {
$direction = 0;
} else {
$direction = 1;
}
$dirs = array_diff(scandir($dir, $direction), $filters);
$dir_array = Array();
if ($sort == 'asc') {
sortArray($dirs, false, true, true);
}
foreach ($dirs as $file) {
if (@$file[0] != '.') {
if (is_dir(internalToFilesystem($dir) . '/' . $file)) {
$dirN = filesystemToInternal($dir) . "/" . filesystemToInternal($file);
$dir_array[$file] = getdownloadList($dirN, $filters8, $excludesuffixes, $sort);
} else {
if (!in_array(getSuffix($file), $excludesuffixes)) {
$dir_array[$file] = $dir . '/' . filesystemToInternal($file);
}
}
}
}
return $dir_array;
}
function getDownloadURL($file) {
if (substr($file, 0, 1) != '/' && strpos($file, ':') === false) {
$file = SERVERPATH . '/' . getOption('downloadList_directory') . '/' . $file;
}
$request = parse_url(getRequestURI());
if (isset($request['query'])) {
$query = parse_query($request['query']);
} else {
$query = array();
}
DownloadList::addListItem($file);
$link = '';
if ($id = DownloadList::getItemID($file)) {
$query['download'] = $id;
$link = FULLWEBPATH . '/' . preg_replace('~^' . WEBPATH . '/~', '', $request['path']) . '?' . http_build_query($query);
}
return $link;
}
function printDownloadURL($file, $linktext = NULL) {
if (substr($file, 0, 1) != '/' && strpos($file, ':') === false) {
$file = SERVERPATH . '/' . getOption('downloadList_directory') . '/' . $file;
}
$filesize = '';
if (getOption('downloadList_showfilesize')) {
$filesize = @filesize(internalToFilesystem($file));
$filesize = ' (' . byteConvert($filesize) . ')';
}
if (getOption('downloadList_showdownloadcounter')) {
$downloaditem = DownloadList::getListItemFromDB($file);
if ($downloaditem) {
$downloadcount = ' - ' . sprintf(ngettext('%u download', '%u downloads', $downloaditem['data']), $downloaditem['data']);
} else {
$downloadcount = ' - ' . gettext('0 downloads');
}
$filesize .= $downloadcount;
}
if (empty($linktext)) {
$filename = basename($file);
} else {
$filename = $linktext;
}
echo '<a href="' . html_encode(getDownloadURL($file)) . '" rel="nofollow" class="downloadlist_link" data-track-content data-content-piece data-content-name="' . html_encode($filename) . '">' . html_encode($filename) . '</a><small>' . $filesize . '</small>';
}
function printFullImageDownloadURL($linktext = null, $imageobj = null) {
global $_zp_current_image;
if (is_null($imageobj)) {
$imageobj = $_zp_current_image;
}
if (!is_null($imageobj)) {
printDownloadURL($imageobj->getFullImageURL(SERVERPATH), $linktext);
}
}
function printDownloadAlbumZipURL($linktext = NULL, $albumobj = NULL, $fromcache = NULL) {
global $_zp_current_album;
$request = parse_url(getRequestURI());
if (isset($request['query'])) {
$query = parse_query($request['query']);
} else {
$query = array();
}
if (is_null($albumobj)) {
$albumobj = $_zp_current_album;
}
if (!is_null($albumobj) && !$albumobj->isDynamic()) {
$file = $albumobj->name . '.zip';
DownloadList::addListItem($file);
if (getOption('downloadList_showdownloadcounter')) {
$downloaditem = DownloadList::getListItemFromDB($file);
if ($downloaditem) {
$downloadcount = ' - ' . sprintf(ngettext('%u download', '%u downloads', $downloaditem['data']), $downloaditem['data']);
} else {
$downloadcount = ' - ' . gettext('0 downloads');
}
$filesize = '<small>' . $downloadcount . '</small>';
} else {
$filesize = '';
}
if (!empty($linktext)) {
$file = $linktext;
}
$query['download'] = $albumobj->name;
$query['albumzip'] = 'true';
if ($fromcache) {
$query['fromcache'] = 'true';
}
$link = FULLWEBPATH . '/' . preg_replace('~^' . WEBPATH . '/~', '', $request['path']) . '?' . http_build_query($query);
echo '<a href="' . html_encode($link) . '" rel="nofollow" class="downloadlist_link" data-track-content data-content-piece data-content-name="' . html_encode($file) . '">' . html_encode($file) . '</a>' . $filesize;
}
}
if (isset($_GET['download'])) {
$item = sanitize($_GET['download']);
if (empty($item) || !extensionEnabled('downloadList')) {
if (TEST_RELEASE) {
zp_error(gettext('Forbidden'));
} else {
header("HTTP/1.0 403 " . gettext("Forbidden"));
header("Status: 403 " . gettext("Forbidden"));
exitZP();
}
}
$hash = getOption('downloadList_password');
if (GALLERY_SECURITY != 'public' || $hash) {
if (!zp_loggedin((getOption('downloadList_rights')) ? FILES_RIGHTS : ALL_RIGHTS)) {
$user = getOption('downloadList_user');
zp_handle_password('zpcms_auth_download', $hash, $user);
if ((!empty($hash) && zp_getCookie('zpcms_auth_download') != $hash)) {
$show = ($user) ? true : NULL;
$hint = '';
if (!empty($hash)) {
$hint = get_language_string(getOption('downloadList_hint'));
}
if (isset($_GET['albumzip'])) {
$item .= '&albumzip';
}
printPasswordForm($hint, true, $show, '?download=' . $item);
exitZP();
}
}
}
if (isset($_GET['albumzip'])) {
DownloadList::updateListItemCount($item . '.zip');
require_once(SERVERPATH . '/' . ZENFOLDER . '/lib-zipStream.php');
if (isset($_GET['fromcache'])) {
$fromcache = sanitize(isset($_GET['fromcache']));
} else {
$fromcache = getOption('downloadList_zipFromCache');
}
$success = AlbumZip::create($item, $fromcache);
if($success) {
exitZP();
}
} else {
require_once(SERVERPATH . '/' . ZENFOLDER . '/lib-MimeTypes.php');
$item = (int) $item;
$path = query_single_row("SELECT `aux` FROM " . prefix('plugin_storage') . " WHERE id=" . $item);
$_downloadFile = internalToFilesystem($path['aux']);
if (file_exists($_downloadFile)) {
DownloadList::updateListItemCount($_downloadFile);
$ext = getSuffix($_downloadFile);
$mimetype = getMimeString($ext);
header('Content-Description: File Transfer');
header('Content-Type: ' . $mimetype);
header('Content-Disposition: attachment; filename=' . basename(urldecode($_downloadFile)));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($_downloadFile));
flush();
readfile($_downloadFile);
exitZP();
} else {
zp_register_filter('theme_body_open', 'DownloadList::noFile');
}
}
}
?>