Refactor BookReaderPreview.php for cleaner use of BookReaderImages.
authorMichael Ang <mang@archive.org>
Mon, 2 Aug 2010 23:03:50 +0000 (23:03 +0000)
committerMichael Ang <mang@archive.org>
Mon, 2 Aug 2010 23:03:50 +0000 (23:03 +0000)
BookReaderIA/datanode/BookReaderImages.inc.php
BookReaderIA/datanode/BookReaderPreview.php
BookReaderIA/inc/BookReader.inc

index c60351f..424cb73 100644 (file)
@@ -109,6 +109,7 @@ class BookReaderImages
         
         $leaf = null;
         switch ($basePage) {
+        
             case 'title':
                 if (! array_key_exists('titleIndex', $metadata)) {
                     $this->BRfatal("No title page asserted in book");
@@ -722,6 +723,9 @@ class BookReaderImages
     }
     
     function checkPrivs($filename) {
+        // $$$ we assume here that requests for the title, cover or preview
+        //     come in via BookReaderPreview.php which will be re-run with
+        //     privileges after we return the 403
         if (!is_readable($filename)) {
             header('HTTP/1.1 403 Forbidden');
             exit(0);
index 4192fb8..eb4d2c2 100644 (file)
@@ -24,7 +24,6 @@ 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) {
@@ -34,97 +33,18 @@ function BRfatal($message) {
     die(-1);
 }
 
-$brm = new BookReaderMeta();
-try {
-    $metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['subPrefix'], $_REQUEST['server']);
-} catch (Exception $e) {
-    BRfatal($e->getMessage);
-}
+$allowedPages = array('title','cover','preview');
+$allowedPattern = '#^(' . join('|', $allowedPages) . ')#';
 
-// $$$ allow size information
-$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;
-        
-    case 'preview':
-        // Preference is:
-        //   Cover page if book was published >= 1950
-        //   Title page
-        //   Cover page
-        //   Page 0
-        
-        /*
-        header('Content-type: text/plain');
-        print 'Date ' . $metadata['date'];
-        print 'Year ' . $brm->parseYear($metadata['date']);
-        */
-        if ( array_key_exists('date', $metadata) && array_key_exists('coverIndices', $metadata) ) {
-            if ($brm->parseYear($metadata['date']) >= 1950) {
-                $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;
-        
-    default:
-        // Shouldn't be possible
-        BRfatal("Couldn't find page");
-        break;
-        
+if (preg_match($allowedPattern, $page)) { 
+    // Return image data
+    $bri = new BookReaderImages();
+    $bri->serveLookupRequest($_REQUEST);
 }
 
-$leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']);
-
-$requestEnv = array(
-    'zip' => $metadata['zip'],
-    'file' => $brm->imageFilePath($leaf, $metadata['subPrefix'], $metadata['imageFormat']),
-    'ext' => 'jpg',
-);
+BRfatal("Bad or no page specified");
 
-// Return image data - will check privs
-$bri = new BookReaderImages();
-try {
-    $bri->serveRequest($requestEnv);
-} catch (Exception $e) {
-    header("HTTP/1.0 404 Not Found");
-    header("Content-type: text/plain");
-    print "Error serving request:";
-    print "  " . $e->getMessage();
-    print "Debugging information:";
-    echo $e->getTraceAsString();
-    die(-1);
-}
 
 ?>
\ No newline at end of file
index 0007586..b2210c0 100644 (file)
@@ -1,5 +1,15 @@
 <?
 
+/*
+ * 
+
+/*
+ * Note: Edits to this file must pass through github.  To submit a patch to this
+ *       file please contact mang at archive dot org or http://github.com/mangtronix
+ *       Direct changes to this file may get clobbered when the code is synchronized
+ *       from github.
+ */
+
 class BookReader
 {
 
@@ -265,15 +275,20 @@ class BookReader
     switch ($operator) {
         case 'page':
             
-            // Look for old-style preview request
-            // $$$ currently ignoring file extension
-            if (preg_match('/^(.*)_(cover|title|preview)/', $filename, $matches) === 1) {
+            // Look for old-style preview request - e.g. {identifier}_cover.jpg
+            if (preg_match('/^(.*)_((cover|title|preview).*)/', $filename, $matches) === 1) {
                 // Serve preview image
                 $page = $matches[2];
                 $query['page'] = $page;
                 return 'http://' . $serverBaseURL . '/BookReader/BookReaderPreview.php?' . http_build_query($query, '', '&');
             }
             
+            // New-style preview request - e.g. cover_thumb.jpg
+            if (preg_match('/^(cover|title|preview)/', $filename, $matches) === 1) {
+                $query['page'] = $filename;
+                return 'http://' . $serverBaseURL . '/BookReader/BookReaderPreview.php?' . http_build_query($query, '', '&');
+            }
+            
             // Asking for a non-preview page
             $query['page'] = $filename;
             return 'http://' . $serverBaseURL . '/BookReader/BookReaderImages.php?' . http_build_query($query, '', '&');