getOptions(); list($action) = checkKeys(array("action")); if ($action === "httpcodes") { list($hrefs) = checkKeys(array("hrefs")); function getHttpCodes($h5ai, $hrefs) { $codes = array(); foreach ($hrefs as $href) { $href = trim($href); if (strlen($href) > 0) { $codes[$href] = $h5ai->getHttpCode($href); } } return $codes; } $hrefs = preg_split("/;/", $hrefs); $codes = getHttpCodes($h5ai, $hrefs); echo count($codes) === 0 ? "{}" : json_encode($codes); } else if ($action === "thumb") { fail(0, "thumbs are disabled", !$options["showThumbs"]); list($srcAbsHref, $width, $height, $mode) = checkKeys(array("href", "width", "height", "mode")); require_h5ai("/php/inc/Thumbnail.php"); require_h5ai("/php/inc/Image.php"); $srcAbsPath = $h5ai->getRootAbsPath() . rawurldecode($srcAbsHref); if (!Thumbnail::isUsable()) { Image::showImage($srcAbsPath); exit; } $thumbnail = new Thumbnail($h5ai, $srcAbsHref, $mode, $width, $height); $thumbnail->create(1); if (file_exists($thumbnail->getPath())) { Image::showImage($thumbnail->getPath()); } else { $image = new Image(); $image->setSource($srcAbsPath); $image->thumb($mode, $width, $height); $image->showDest(); } } else if ($action === "tree") { list($href) = checkKeys(array("href")); require_h5ai("/php/inc/Tree.php"); $absHref = trim($href); $absPath = $h5ai->getAbsPath($absHref); $tree = new TreeEntry($h5ai, $absPath, $absHref); $tree->loadContent(); echo $tree->contentToHtml(); } else if ($action === "zip") { fail(0, "zipped download is disabled", !$options["zippedDownload"]); list($hrefs) = checkKeys(array("hrefs")); require_h5ai("/php/inc/ZipIt.php"); $zipit = new ZipIt($h5ai); $hrefs = explode(":", trim($hrefs)); $zipFile = $zipit->zip($hrefs); if (is_string($zipFile)) { $response = array('status' => 'ok', 'id' => basename($zipFile), 'size' => filesize($zipFile)); } else { $response = array('status' => 'failed', 'code' => $zipFile); } echo json_encode($response); } else if ($action === "getzip") { list($id) = checkKeys(array("id")); fail(1, "zipped file not found: " . $id, !preg_match("/^h5ai-zip-/", $id)); $zipFile = str_replace("\\", "/", sys_get_temp_dir()) . "/" . $id; fail(2, "zipped file not found: " . $id, !file_exists($zipFile)); header("Content-Disposition: attachment; filename=\"h5ai-selection.zip\""); header("Content-Type: application/octet-stream"); header("Content-Length: " . filesize($zipFile)); header("Connection: close"); readfile($zipFile); } else if ($action === "checks") { function checkZipSupport () { if (!class_exists("ZipArchive")) { return 1; } try { $zipFile = tempnam(sys_get_temp_dir(), "h5ai-zip-"); $zip = new ZipArchive(); if (!$zip->open($zipFile, ZIPARCHIVE::CREATE)) { return 2; } $zip->addEmptyDir("/"); $zip->close(); if (filesize($zipFile) === 0) { return 3; } } catch (Exception $e) { return 4; }; return 0; } function checkGdSupport () { if (GD_VERSION == "GD_VERSION") { return 1; } return 0; } $response = array('zips' => checkZipSupport(), 'thumbs' => checkGdSupport()); echo json_encode($response); } else { fail(1, "unsupported 'action' specified"); } ?>