function serveLookupRequest($requestEnv) { $brm = new BookReaderMeta(); try { $metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['subPrefix'], $_REQUEST['server']); } catch (Exception $e) { $this->BRfatal($e->getMessage()); } $page = $_REQUEST['page']; // Index of image to return $imageIndex = null; // deal with subPrefix if (array_key_exists($_REQUEST, 'subPrefix') && $_REQUEST['subPrefix']) { $parts = explode('/', $_REQUEST['subPrefix']); $bookId = $parts[count($parts) - 1]; } else { $bookId = $_REQUEST['id']; } $pageInfo = $this->parsePageRequest($page, $bookId); $basePage = $pageInfo['type']; $leaf = null; $region = null; switch ($basePage) { case 'title': if (!array_key_exists('titleIndex', $metadata)) { $this->BRfatal("No title page asserted in book"); } $imageIndex = $metadata['titleIndex']; break; /* Old 'cover' behaviour where it would show cover 0 if it exists or return 404. */ /* Old 'cover' behaviour where it would show cover 0 if it exists or return 404. */ case 'cover0': if (!array_key_exists('coverIndices', $metadata)) { $this->BRfatal("No cover asserted in book"); } $imageIndex = $metadata['coverIndices'][0]; // $$$ TODO add support for other covers break; case 'preview': case 'cover': // Show our best guess if cover is requested // Preference is: // Cover page if book was published >= 1923 // Title page // Cover page // Page 0 if (array_key_exists('date', $metadata) && array_key_exists('coverIndices', $metadata)) { if ($brm->parseYear($metadata['date']) >= 1923) { $imageIndex = $metadata['coverIndices'][0]; break; } } if (array_key_exists('titleIndex', $metadata)) { $imageIndex = $metadata['titleIndex']; break; } if (array_key_exists('coverIndices', $metadata)) { $imageIndex = $metadata['coverIndices'][0]; break; } // First page $imageIndex = 0; break; case 'n': // Accessible index page $imageIndex = intval($pageInfo['value']); break; case 'page': // Named page $index = array_search($pageInfo['value'], $metadata['pageNums']); if ($index === FALSE) { // Not found $this->BRfatal("Page not found"); break; } $imageIndex = $index; break; case 'leaf': // Leaf explicitly specified $leaf = $pageInfo['value']; break; default: // Shouldn't be possible $this->BRfatal("Unrecognized page type requested"); break; } if (is_null($leaf)) { // Leaf was not explicitly set -- look it up $leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']); } $requestEnv = array('zip' => $metadata['zip'], 'file' => $brm->imageFilePath($leaf, $metadata['subPrefix'], $metadata['imageFormat']), 'ext' => 'jpg'); // remove non-passthrough keys from pageInfo unset($pageInfo['type']); unset($pageInfo['value']); // add pageinfo to request $requestEnv = array_merge($pageInfo, $requestEnv); // Return image data - will check privs $this->serveRequest($requestEnv); }