215 lines
7.6 KiB
PHP
215 lines
7.6 KiB
PHP
<?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>
|