diff options
Diffstat (limited to 'library/epub-meta/index.php')
-rw-r--r-- | library/epub-meta/index.php | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/library/epub-meta/index.php b/library/epub-meta/index.php new file mode 100644 index 000000000..57bb31b5c --- /dev/null +++ b/library/epub-meta/index.php @@ -0,0 +1,214 @@ +<?php + // modify this to point to your book directory + $bookdir = '/home/andi/Dropbox/ebooks/'; + + + error_reporting(E_ALL ^ E_NOTICE); + + // proxy google requests + if(isset($_GET['api'])){ + header('application/json; charset=UTF-8'); + echo file_get_contents('https://www.googleapis.com/books/v1/volumes?q='.rawurlencode($_GET['api']).'&maxResults=25&printType=books&projection=full'); + exit; + } + + require('util.php'); + + // load epub data + require('epub.php'); + if(isset($_REQUEST['book'])){ + try{ + $book = $_REQUEST['book']; + $book = str_replace('..','',$book); // no upper dirs, lowers might be supported later + $epub = new EPub($bookdir.$book.'.epub'); + }catch (Exception $e){ + $error = $e->getMessage(); + } + } + + // return image data + if(isset($_REQUEST['img']) && isset($epub)){ + $img = $epub->Cover(); + header('Content-Type: '.$img['mime']); + echo $img['data']; + exit; + } + + // save epub data + if($_REQUEST['save'] && isset($epub)){ + $epub->Title($_POST['title']); + $epub->Description($_POST['description']); + $epub->Language($_POST['language']); + $epub->Publisher($_POST['publisher']); + $epub->Copyright($_POST['copyright']); + $epub->ISBN($_POST['isbn']); + $epub->Subjects($_POST['subjects']); + + $authors = array(); + foreach((array) $_POST['authorname'] as $num => $name){ + if($name){ + $as = $_POST['authoras'][$num]; + if(!$as) $as = $name; + $authors[$as] = $name; + } + } + $epub->Authors($authors); + + // handle image + $cover = ''; + if(preg_match('/^https?:\/\//i',$_POST['coverurl'])){ + $data = @file_get_contents($_POST['coverurl']); + if($data){ + $cover = tempnam(sys_get_temp_dir(), 'epubcover'); + file_put_contents($cover,$data); + unset($data); + } + }elseif(is_uploaded_file($_FILES['coverfile']['tmp_name'])){ + $cover = $_FILES['coverfile']['tmp_name']; + } + if($cover){ + $info = @getimagesize($cover); + if(preg_match('/^image\/(gif|jpe?g|png)$/',$info['mime'])){ + $epub->Cover($cover,$info['meta']); + }else{ + $error = "Not a valid image file".$cover; + } + } + + // save the ebook + try{ + $epub->save(); + }catch(Exception $e){ + $error = $e->getMessage(); + } + + // clean up temporary cover file + if($cover) @unlink($cover); + + // rename + $author = array_shift(array_keys($epub->Authors())); + $title = $epub->Title(); + $new = to_file($author.'-'.$title); + $new = $bookdir.$new.'.epub'; + $old = $epub->file(); + if(realpath($new) != realpath($old)){ + if(!@rename($old,$new)) $new = $old; //rename failed, stay here + } + $go = basename($new,'.epub'); + header('Location: ?book='.rawurlencode($go)); + exit; + } + + header('Content-Type: text/html; charset=utf-8'); +?> +<html> +<head> + <title>EPub Manager</title> + + <link rel="stylesheet" type="text/css" href="assets/css/smoothness/jquery-ui-1.8.18.custom.css" /> + <link rel="stylesheet" type="text/css" href="assets/css/cleditor/jquery.cleditor.css" /> + <link rel="stylesheet" type="text/css" href="assets/css/style.css" /> + + <script type="text/javascript"> + <?php if($error) echo "alert('".htmlspecialchars($error)."');";?> + </script> +</head> +<body> + +<div id="wrapper"> + <ul id="booklist"> + <?php + $list = glob($bookdir.'/*.epub'); + foreach($list as $book){ + $base = basename($book,'.epub'); + $name = book_output($base); + echo '<li '.($base == $_REQUEST['book'] ? 'class="active"' : '' ).'>'; + echo '<a href="?book='.htmlspecialchars($base).'">'.$name.'</a>'; + echo '</li>'; + } + ?> + </ul> + + <?php if($epub): ?> + <form action="" method="post" id="bookpanel" enctype="multipart/form-data"> + <input type="hidden" name="book" value="<?php echo htmlspecialchars($_REQUEST['book'])?>" /> + + <table> + <tr> + <th>Title</th> + <td><input type="text" name="title" value="<?php echo htmlspecialchars($epub->Title())?>" /></td> + </tr> + <tr> + <th>Authors</th> + <td id="authors"> + <?php + $count = 0; + foreach($epub->Authors() as $as => $name){ + ?> + <p> + <input type="text" name="authorname[<?php echo $count?>]" value="<?php echo htmlspecialchars($name)?>" /> + (<input type="text" name="authoras[<?php echo $count?>]" value="<?php echo htmlspecialchars($as)?>" />) + </p> + <?php + $count++; + } + ?> + </td> + </tr> + <tr> + <th>Description<br /> + <img src="?book=<?php echo htmlspecialchars($_REQUEST['book'])?>&img=1" id="cover" width="90" + class="<?php $c = $epub->Cover(); echo ($c['found']?'hasimg':'noimg')?>" /> + </th> + <td><textarea name="description"><?php echo htmlspecialchars($epub->Description())?></textarea></td> + </tr> + <tr> + <th>Subjects</th> + <td><input type="text" name="subjects" value="<?php echo htmlspecialchars(join(', ',$epub->Subjects()))?>" /></td> + </tr> + <tr> + <th>Publisher</th> + <td><input type="text" name="publisher" value="<?php echo htmlspecialchars($epub->Publisher())?>" /></td> + </tr> + <tr> + <th>Copyright</th> + <td><input type="text" name="copyright" value="<?php echo htmlspecialchars($epub->Copyright())?>" /></td> + </tr> + <tr> + <th>Language</th> + <td><p><input type="text" name="language" value="<?php echo htmlspecialchars($epub->Language())?>" /></p></td> + </tr> + <tr> + <th>ISBN</th> + <td><p><input type="text" name="isbn" value="<?php echo htmlspecialchars($epub->ISBN())?>" /></p></td> + </tr> + <tr> + <th>Cover Image</th> + <td><p> + <input type="file" name="coverfile" /> + URL: <input type="text" name="coverurl" value="" /> + </p></td> + </table> + <div class="center"> + <input name="save" type="submit" /> + </div> + </form> + <?php else: ?> + <h1>EPub Manager</h1> + + <p>View and edit epub books stored in <code><?php echo htmlspecialchars($bookdir)?></code>.</p> + <div class="license"> + <p><?php echo str_replace("\n\n",'</p><p>',htmlspecialchars(file_get_contents('LICENSE'))) ?></p> + </div> + + <?php endif; ?> + + <!-- load at the end, for faster site load --> + <script type="text/javascript" src="assets/js/jquery-1.7.1.min.js"></script> + <script type="text/javascript" src="assets/js/jquery-ui-1.8.18.custom.min.js"></script> + <script type="text/javascript" src="assets/js/jquery.cleditor.min.js"></script> + <script type="text/javascript" src="assets/js/script.js"></script> + +</div> +</body> +</html> |