cops/index.php

313 lines
13 KiB
PHP
Raw Normal View History

2012-06-02 09:48:07 +03:00
<?php
/**
* COPS (Calibre OPDS PHP Server) HTML main script
2012-06-02 09:48:07 +03:00
*
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author S<EFBFBD>bastien Lucas <sebastien@slucas.fr>
2012-06-02 09:48:07 +03:00
*
*/
require_once ("config.php");
require_once ("base.php");
require_once ("author.php");
require_once ("serie.php");
require_once ("tag.php");
require_once ("customcolumn.php");
2012-06-02 09:48:07 +03:00
require_once ("book.php");
// If we detect that an OPDS reader try to connect try to redirect to feed.php
if (preg_match("/(MantanoReader|FBReader|Stanza|Aldiko|Moon+ Reader)/", $_SERVER['HTTP_USER_AGENT'])) {
header("location: feed.php");
2013-03-01 18:48:25 +02:00
exit ();
}
2013-03-03 09:10:30 +02:00
$withToolbar = false;
if (!isset($_COOKIE['toolbar'])) $withToolbar = true;
header ("Content-Type:application/xhtml+xml;charset=utf-8");
2012-06-02 09:48:07 +03:00
$page = getURLParam ("page", Base::PAGE_INDEX);
$query = getURLParam ("query");
$qid = getURLParam ("id");
$n = getURLParam ("n", "1");
$database = GetUrlParam (DB);
2012-06-02 09:48:07 +03:00
$currentPage = Page::getPage ($page, $qid, $query, $n);
2012-06-02 09:48:07 +03:00
$currentPage->InitializeContent ();
/* Test to see if pages are opened on an Eink screen
2013-02-28 17:31:59 +02:00
* test Kindle, Kobo Touch and Sony PRS-T1 Ereader.
* HTTP_USER_AGENT = "Mozilla/5.0 (Linux; U; en-us; EBRD1101; EXT) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"
*/
2013-05-15 22:19:31 +03:00
if (preg_match("/(Kobo|Kindle\/3.0|EBRD1101)/", $_SERVER['HTTP_USER_AGENT'])) {
$isEink = 1;
} else {
$isEink = 0;
}
2012-06-02 09:48:07 +03:00
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
2012-06-02 09:48:07 +03:00
<head>
2013-05-16 18:12:19 +03:00
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><?php echo htmlspecialchars ($currentPage->title) ?></title>
<script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery-1.9.1.min.js") ?>"></script>
2013-03-03 09:10:30 +02:00
<script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery.cookies.js") ?>"></script>
<?php if ($config['cops_use_fancyapps'] == 1) { ?>
<script type="text/javascript" src="<?php echo getUrlWithVersion("resources/fancybox/jquery.fancybox.pack.js") ?>"></script>
<link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("resources/fancybox/jquery.fancybox.css") ?>" media="screen" />
<?php } ?>
2012-06-20 23:01:19 +03:00
<script type="text/javascript" src="<?php echo getUrlWithVersion("js/jquery.sortElements.js") ?>"></script>
2013-03-08 10:43:37 +02:00
<link rel="related" href="<?php echo $config['cops_full_url'] ?>feed.php" type="application/atom+xml;profile=opds-catalog" title="<?php echo $config['cops_title_default']; ?>" />
<link rel="icon" type="image/vnd.microsoft.icon" href="<?php echo $currentPage->favicon ?>" />
<link rel="stylesheet" type="text/css" href="<?php echo getUrlWithVersion("style.css") ?>" media="screen" />
2013-05-15 22:19:31 +03:00
<link rel="stylesheet" href="//normalize-css.googlecode.com/svn/trunk/normalize.css" />
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300italic,800,300,400italic,600,600italic,700,700italic,800italic' rel='stylesheet' type='text/css' />
2012-06-02 09:48:07 +03:00
<script type="text/javascript">
$(document).ready(function() {
// Handler for .ready() called.
$(".entry").click(function(){
window.location=$(this).find("a").attr("href");
return false;
});
2012-06-20 23:01:19 +03:00
$("#sort").click(function(){
2013-05-16 18:51:09 +03:00
$('.books').sortElements(function(a, b){
2012-06-20 23:33:57 +03:00
var test = 1;
if ($("#sortorder").val() == "desc")
{
test = -1;
}
return $(a).find ("." + $("#sortchoice").val()).text() > $(b).find ("." + $("#sortchoice").val()).text() ? test : -test;
2012-06-20 23:01:19 +03:00
});
});
<?php if ($config['cops_use_fancyapps'] == 1) { ?>
2012-06-02 09:48:07 +03:00
$(".fancycover").fancybox({
'type' : 'image',
2013-05-15 22:19:31 +03:00
prevEffect : 'none',
nextEffect : 'none'
<?php if ($isEink) echo ", openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
2012-06-02 09:48:07 +03:00
});
2012-06-13 18:28:54 +03:00
$(".fancyabout").fancybox({
'type' : 'ajax',
title : 'COPS <?php echo VERSION ?>',
2013-05-15 22:19:31 +03:00
prevEffect : 'none',
nextEffect : 'none'
<?php if ($isEink) echo ", openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
});
<?php } ?>
2013-03-06 09:02:03 +02:00
$(".headright").click(function(){
if ($("#tool").is(":hidden")) {
$("#tool").slideDown("slow");
2013-03-03 09:10:30 +02:00
$.cookie('toolbar', '1');
2012-06-13 18:28:54 +03:00
} else {
$("#tool").slideUp();
2013-03-03 09:10:30 +02:00
$.removeCookie('toolbar');
2012-06-13 18:28:54 +03:00
}
});
<?php if ($page != Base::PAGE_BOOK_DETAIL) { ?>
2012-06-02 09:48:07 +03:00
$(".bookdetail").click(function(){
var url = $(this).find("a").attr("href");
<?php if ($config['cops_use_fancyapps'] == 0) { ?>
window.location = url;
<?php } else { ?>
2012-06-02 09:48:07 +03:00
$('#content').load(url, function(data, stat, req){
$.fancybox( {
content: data,
autoSize: true
<?php if ($isEink) echo ", margin : [15, 35, 10, 10], openEffect : 'none', closeEffect : 'none', helpers : {overlay : null}"; ?>
} );
2012-06-02 09:48:07 +03:00
});
<?php } ?>
2012-06-02 09:48:07 +03:00
return false;
});
<?php } ?>
2012-06-02 09:48:07 +03:00
});
<?php
if ($currentPage->isPaginated ()) {
$prevLink = $currentPage->getPrevLink ();
$nextLink = $currentPage->getNextLink ();
?>
$(document).keydown(function(e){
<?php
if (!is_null ($prevLink)) {
echo "if (e.keyCode == 37) {\$(location).attr('href','" . $prevLink->hrefXhtml () . "');}";
}
if (!is_null ($nextLink)) {
echo "if (e.keyCode == 39) {\$(location).attr('href','" . $nextLink->hrefXhtml () . "');}";
}
?>
});
<?php
}
?>
2012-06-02 09:48:07 +03:00
</script>
</head>
<body>
<div class="container">
<header>
<a class="headleft" href="<?php echo $_SERVER["SCRIPT_NAME"]; if ($page != Base::PAGE_INDEX && !is_null ($database)) echo "?" . addURLParameter ("", DB, $database); ?>">
2013-04-21 17:22:26 +03:00
<img src="<?php echo getUrlWithVersion("images/home.png") ?>" alt="<?php echo localize ("home.alternate") ?>" />
</a>
<img class="headright" id="searchImage" src="<?php echo getUrlWithVersion("images/setting64.png") ?>" alt="Settings and menu" />
<div class="headcenter">
<h1><?php echo htmlspecialchars ($currentPage->title) ?></h1>
</div>
2013-05-16 08:00:21 +03:00
<div id="tool" <?php if ($withToolbar) echo 'style="display: none"' ?>>
<div style="float: left; width: 60%">
<form action="index.php" method="get">
<div style="float: right">
<input type="image" src="images/search32.png" alt="<?php echo localize ("search.alternate") ?>" />
</div>
<div class="stop">
<input type="hidden" name="current" value="<?php echo $page ?>" />
<input type="hidden" name="page" value="9" />
<?php if (!is_null ($database)) { ?>
<input type="hidden" name="<?php echo DB ?>" value="<?php echo $database ?>" />
<?php } ?>
<input type="text" name="query" />
</div>
</form>
</div>
<?php if ($currentPage->containsBook ()) { ?>
<div style="float: right; width: 35%">
<div style="float: right">
2013-05-16 08:00:21 +03:00
<img id="sort" src="images/sort32.png" alt="<?php echo localize ("sort.alternate") ?>" />
</div>
<div class="stop">
2013-05-16 08:00:21 +03:00
<select id="sortchoice">
<option value="st"><?php echo localize("bookword.title") ?></option>
<option value="sa"><?php echo localize("authors.title") ?></option>
<option value="ss"><?php echo localize("series.title") ?></option>
<option value="sp"><?php echo localize("content.published") ?></option>
</select>
<select id="sortorder">
<option value="asc"><?php echo localize("search.sortorder.asc") ?></option>
<option value="desc"><?php echo localize("search.sortorder.desc") ?></option>
</select>
</div>
</div>
2013-05-16 08:00:21 +03:00
<?php } ?>
</div>
2013-05-16 07:59:34 +03:00
</header>
2012-06-02 09:48:07 +03:00
<div id="content" style="display: none;"></div>
<section>
<?php
if ($page == Base::PAGE_BOOK_DETAIL) {
include ("bookdetail.php");
} else if ($page == Base::PAGE_ABOUT) {
readfile ("about.xml");
}
2012-06-02 09:48:07 +03:00
foreach ($currentPage->entryArray as $entry) {
if (get_class ($entry) != "EntryBook") {
?>
<article>
2013-05-15 22:19:31 +03:00
<div class="frontpage">
<?php foreach ($entry->linkArray as $link) { if ($link->type != Link::OPDS_NAVIGATION_TYPE) { continue; } ?> <a href="<?php echo $link->hrefXhtml () ?>">
<h2><?php echo htmlspecialchars ($entry->title) ?></h2>
<?php } ?>
<h4><?php echo htmlspecialchars ($entry->content) ?></h4>
</a>
</div>
</article>
2012-06-02 09:48:07 +03:00
<?php
}
else
{
?>
<article class="books">
2013-05-16 14:35:24 +03:00
<span class="cover">
2013-05-15 22:19:31 +03:00
<?php
2012-06-24 09:51:49 +03:00
if ($entry->book->hasCover) {
?>
2013-05-16 14:35:24 +03:00
<a data-fancybox-group="group" class="fancycover" href="<?php echo $entry->getCover () ?>"><img src="<?php echo $entry->getCoverThumbnail () ?>" alt="<?php echo localize("i18n.coversection") ?>" /></a>
2012-06-24 09:51:49 +03:00
<?php
}
?>
2013-05-16 14:35:24 +03:00
</span>
2013-05-15 22:19:31 +03:00
<h2 class="download">
2012-06-02 09:48:07 +03:00
<?php
$i = 0;
foreach ($config['cops_prefered_format'] as $format)
{
if ($i == 2) { break; }
2012-06-26 15:45:09 +03:00
if ($data = $entry->book->getDataFormat ($format)) {
$i++;
2012-06-02 09:48:07 +03:00
?>
2013-03-01 20:21:32 +02:00
<a href="<?php echo $data->getHtmlLink () ?>"><?php echo $format ?></a><br />
2013-05-15 22:19:31 +03:00
<?php
}
2013-05-15 22:19:31 +03:00
2012-06-02 09:48:07 +03:00
}
?>
2013-03-01 20:21:32 +02:00
</h2>
2013-05-15 22:19:31 +03:00
<a class="fancyabout" href="<?php echo $entry->book->getDetailUrl () ?>">
<div class="fullclickpopup">
2013-05-16 18:51:09 +03:00
<h2><span class="st"><?php echo htmlspecialchars ($entry->title) ?></span>
<?php
if ($entry->book->getPubDate() != "")
{
?>
2013-05-16 18:51:09 +03:00
<span class="sp">(<?php echo $entry->book->getPubDate() ?>)</span>
<?php
}
?>
2013-05-16 18:51:09 +03:00
<span class="sr"><?php echo $entry->book->getRating () ?></span></h2>
<h4><?php echo localize("authors.title") . " : " ?></h4><span class="sa"><?php echo htmlspecialchars ($entry->book->getAuthorsName ()) ?></span><br />
<h4><?php echo localize("tags.title") . " : </h4>" . htmlspecialchars ($entry->book->getTagsName ()) ?><br />
2012-06-02 09:48:07 +03:00
<?php
$serie = $entry->book->getSerie ();
if (!is_null ($serie)) {
?>
2013-05-16 18:51:09 +03:00
<h4><?php echo localize("series.title") . " : " ?></h4><span class="ss"><?php echo htmlspecialchars ($serie->name) . " (" . $entry->book->seriesIndex . ")" ?></span><br />
2012-06-02 09:48:07 +03:00
<?php
}
?></div></a>
</article>
2012-06-02 09:48:07 +03:00
<?php
}
?>
<?php
}
?>
</section>
<footer>
2013-05-16 13:41:22 +03:00
<div class="footright">
2013-05-15 22:58:27 +03:00
<a class="fancyabout" href="<?php if ($config['cops_use_fancyapps'] == 1) { echo "about.xml"; } else { echo $_SERVER["SCRIPT_NAME"] . str_replace ("&", "&amp;", addURLParameter ("?page=16", DB, $database)); } ?>"><img src="<?php echo getUrlWithVersion("images/info.png") ?>" alt="<?php echo localize ("about.title") ?>" /></a>
2013-05-16 13:41:22 +03:00
</div>
<?php
2012-09-21 15:19:11 +03:00
if ($currentPage->isPaginated ()) {
?>
2012-10-11 22:14:06 +03:00
<div class="footcenter">
<?php
if (!is_null ($prevLink)) {
?>
2013-04-21 17:22:26 +03:00
<a href="<?php echo $prevLink->hrefXhtml () ?>" ><img src="<?php echo getUrlWithVersion("images/previous.png") ?>" alt="<?php echo localize ("paging.previous.alternate") ?>" /></a>
<?php
}
?>
2013-05-16 13:30:43 +03:00
<p><?php echo " " . $currentPage->n . " / " . $currentPage->getMaxPage () . " " ?></p>
<?php
if (!is_null ($nextLink)) {
?>
2013-04-21 17:22:26 +03:00
<a href="<?php echo $nextLink->hrefXhtml () ?>" ><img src="<?php echo getUrlWithVersion("images/next.png") ?>" alt="<?php echo localize ("paging.next.alternate") ?>" /></a>
<?php
}
?>
2012-10-11 22:14:06 +03:00
</div>
<?php
}
?>
</footer>
2012-06-02 09:48:07 +03:00
</div>
</body>
</html>