Merge branch 'newui' of git@github.com:openlibrary/bookreader into newui
[bookreader.git] / BookReaderIA / datanode / BookReaderPreview.php
index 5fb4a7f..dacf075 100644 (file)
@@ -1,7 +1,8 @@
 <?
 /*
 
-Provides access to preview images of book.
+Provides access to preview images of book.  It is run with privileges and provides a reduced
+access wrapper around BookReaderImages.
 
 Michael Ang <http://github.com/mangtronix>
 
@@ -23,73 +24,38 @@ This file is part of BookReader.
     along with BookReader.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-require_once('BookReaderMeta.inc.php');
 require_once('BookReaderImages.inc.php');
 
 function BRfatal($message) {
     header("HTTP/1.0 404 Not Found");
+    header("Content-type: text/plain");
     print $message;
-    exit();
+    die(-1);
 }
 
-$brm = new BookReaderMeta();
-$metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['bookId'], $_REQUEST['server']);
+$allowedPages = array('title','cover','preview');
+$allowedPattern = '#^(' . join('|', $allowedPages) . ')#';
 
-$knownPages = array('title','cover','preview');
 $page = $_REQUEST['page'];
-if (! in_array($page, $knownPages) ) {
-    BRfatal("Bad or no page specified");
-}
 
-// Index of image to return
-$imageIndex = null;
-
-switch ($page) {
-    case 'title':
-        if (! array_key_exists('titleIndex', $metadata)) {
-            BRfatal("No title page asserted in book");
-        }
-        $imageIndex = $metadata['titleIndex'];
-        break;
-        
-    case 'cover':
-        if (! array_key_exists('coverIndices', $metadata)) {
-            BRfatal("No cover asserted in book");
-        }
-        $imageIndex = $metadata['coverIndices'][0]; // $$$ TODO add support for other covers
-        break;
+if (preg_match($allowedPattern, $page)) { 
+    // Return image data
+    $bri = new BookReaderImages();
+    
+    try {
+        $bri->serveLookupRequest($_REQUEST);
+    } catch (Exception $e) {
+        header("HTTP/1.0 404 Not Found");
+        header("Content-type: text/plain");
         
-    case 'preview':
-        // Preference is:
-        //   Title page
-        //   Cover page
-        //   Page 0
-        if (array_key_exists('titleIndex', $metadata)) {
-            $imageIndex = $metadata['titleIndex'];
-        } else if (array_key_exists('coverIndices', $metadata)) {
-            $imageIndex = $metadata['coverIndices'][0];
-        } else {
-            $imageIndex = 0;
-        }
-        break;
-        
-    default:
-        // Shouldn't be possible
-        BRfatal("Couldn't find page");
-        break;
+        print "Error serving request:\n";
+        print "  " . $e->getMessage() . "\n\n";
+        print "Debugging information:\n";
+        echo $e->getTraceAsString();
+    }
+} else {
+    BRfatal("Bad or no page specified");
 }
 
-$leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']);
-
-$requestEnv = array(
-    'zip' => $metadata['zip'],
-    'file' => $brm->imageFilePath($leaf, $metadata['bookId'], $metadata['imageFormat']),
-    'ext' => 'jpg',
-    'reduce' => 2, // XXX
-);
-
-// Return image data - will check privs
-$bri = new BookReaderImages();
-$bri->serveRequest($requestEnv);
 
 ?>
\ No newline at end of file