diff --git a/JSON_renderer.php b/JSON_renderer.php new file mode 100644 index 0000000..43b0ded --- /dev/null +++ b/JSON_renderer.php @@ -0,0 +1,207 @@ + + */ + +require_once ("base.php"); +require_once ("book.php"); + +class JSONRenderer +{ + public static function getBookContentArray ($book) { + global $config; + $i = 0; + $preferedData = array (); + foreach ($config['cops_prefered_format'] as $format) + { + if ($i == 2) { break; } + if ($data = $book->getDataFormat ($format)) { + $i++; + array_push ($preferedData, array ("url" => $data->getHtmlLink (), "name" => $format)); + } + } + + $publisher = $book->getPublisher(); + if (is_null ($publisher)) { + $pn = ""; + $pu = ""; + } else { + $pn = $publisher->name; + $link = new LinkNavigation ($publisher->getUri ()); + $pu = $link->hrefXhtml (); + } + + $serie = $book->getSerie (); + if (is_null ($serie)) { + $sn = ""; + $scn = ""; + $su = ""; + } else { + $sn = $serie->name; + $scn = str_format (localize ("content.series.data"), $book->seriesIndex, $serie->name); + $link = new LinkNavigation ($serie->getUri ()); + $su = $link->hrefXhtml (); + } + + return array ("id" => $book->id, + "hasCover" => $book->hasCover, + "preferedData" => $preferedData, + "rating" => $book->getRating (), + "publisherName" => $pn, + "publisherurl" => $pu, + "pubDate" => $book->getPubDate (), + "languagesName" => $book->getLanguages (), + "authorsName" => $book->getAuthorsName (), + "tagsName" => $book->getTagsName (), + "seriesName" => $sn, + "seriesIndex" => $book->seriesIndex, + "seriesCompleteName" => $scn, + "seriesurl" => $su); + } + + public static function getFullBookContentArray ($book) { + global $config; + $out = self::getBookContentArray ($book); + + $out ["coverurl"] = Data::getLink ($book, "jpg", "image/jpeg", Link::OPDS_IMAGE_TYPE, "cover.jpg", NULL)->hrefXhtml (); + $out ["thumbnailurl"] = Data::getLink ($book, "jpg", "image/jpeg", Link::OPDS_THUMBNAIL_TYPE, "cover.jpg", NULL, NULL, $config['cops_html_thumbnail_height'] * 2)->hrefXhtml (); + $out ["content"] = $book->getComment (false); + $out ["datas"] = array (); + $dataKindle = $book->GetMostInterestingDataToSendToKindle (); + foreach ($book->getDatas() as $data) { + $tab = array ("id" => $data->id, "format" => $data->format, "url" => $data->getHtmlLink (), "mail" => 0); + if (!empty ($config['cops_mail_configuration']) && !is_null ($dataKindle) && $data->id == $dataKindle->id) { + $tab ["mail"] = 1; + } + array_push ($out ["datas"], $tab); + } + $out ["authors"] = array (); + foreach ($book->getAuthors () as $author) { + $link = new LinkNavigation ($author->getUri ()); + array_push ($out ["authors"], array ("name" => $author->name, "url" => $link->hrefXhtml ())); + } + $out ["tags"] = array (); + foreach ($book->getTags () as $tag) { + $link = new LinkNavigation ($tag->getUri ()); + array_push ($out ["tags"], array ("name" => $tag->name, "url" => $link->hrefXhtml ())); + } + ; + return $out; + } + + public static function getContentArray ($entry) { + if ($entry instanceof EntryBook) { + $out = array ( "title" => $entry->title); + $out ["book"] = self::getBookContentArray ($entry->book); + return $out; + } + return array ( "title" => $entry->title, "content" => $entry->content, "navlink" => $entry->getNavLink () ); + } + + public static function getJson ($complete = false) { + global $config; + $page = getURLParam ("page", Base::PAGE_INDEX); + $query = getURLParam ("query"); + $search = getURLParam ("search"); + $qid = getURLParam ("id"); + $n = getURLParam ("n", "1"); + $database = GetUrlParam (DB); + + $currentPage = Page::getPage ($page, $qid, $query, $n); + $currentPage->InitializeContent (); + + if ($search) { + return $currentPage->getContentArrayTypeahead (); + } + + $out = array ( "title" => $currentPage->title); + $entries = array (); + foreach ($currentPage->entryArray as $entry) { + array_push ($entries, self::getContentArray ($entry)); + } + if (!is_null ($currentPage->book)) { + $out ["book"] = self::getFullBookContentArray ($currentPage->book); + } + $out ["databaseId"] = GetUrlParam (DB, ""); + $out ["databaseName"] = Base::getDbName (); + $out ["page"] = $page; + $out ["multipleDatabase"] = Base::isMultipleDatabaseEnabled () ? 1 : 0; + $out ["entries"] = $entries; + $out ["isPaginated"] = 0; + if ($currentPage->isPaginated ()) { + $prevLink = $currentPage->getPrevLink (); + $nextLink = $currentPage->getNextLink (); + $out ["isPaginated"] = 1; + $out ["prevLink"] = ""; + if (!is_null ($prevLink)) { + $out ["prevLink"] = $prevLink->hrefXhtml (); + } + $out ["nextLink"] = ""; + if (!is_null ($nextLink)) { + $out ["nextLink"] = $nextLink->hrefXhtml (); + } + $out ["maxPage"] = $currentPage->getMaxPage (); + $out ["currentPage"] = $currentPage->n; + } + if (!is_null (getURLParam ("complete")) || $complete) { + $out ["c"] = array ("version" => VERSION, "i18n" => array ( + "coverAlt" => localize("i18n.coversection"), + "authorsTitle" => localize("authors.title"), + "bookwordTitle" => localize("bookword.title"), + "tagsTitle" => localize("tags.title"), + "seriesTitle" => localize("series.title"), + "customizeTitle" => localize ("customize.title"), + "aboutTitle" => localize ("about.title"), + "previousAlt" => localize ("paging.previous.alternate"), + "nextAlt" => localize ("paging.next.alternate"), + "searchAlt" => localize ("search.alternate"), + "sortAlt" => localize ("sort.alternate"), + "homeAlt" => localize ("home.alternate"), + "cogAlt" => localize ("cog.alternate"), + "permalinkAlt" => localize ("permalink.alternate"), + "publisherName" => localize("publisher.name"), + "pubdateTitle" => localize("pubdate.title"), + "languagesTitle" => localize("language.title"), + "contentTitle" => localize("content.summary"), + "sortorderAsc" => localize("search.sortorder.asc"), + "sortorderDesc" => localize("search.sortorder.desc"), + "customizeEmail" => localize("customize.email")), + "url" => array ( + "detailUrl" => "index.php?page=13&id={0}&db={1}", + "coverUrl" => "fetch.php?id={0}&db={1}", + "thumbnailUrl" => "fetch.php?height=" . $config['cops_html_thumbnail_height'] . "&id={0}&db={1}"), + "config" => array ( + "use_fancyapps" => $config ["cops_use_fancyapps"], + "max_item_per_page" => $config['cops_max_item_per_page'], + "server_side_rendering" => useServerSideRendering (), + "html_tag_filter" => $config['cops_html_tag_filter'])); + if ($config['cops_thumbnail_handling'] == "1") { + $out ["c"]["url"]["thumbnailUrl"] = $out ["c"]["url"]["coverUrl"]; + } else if (!empty ($config['cops_thumbnail_handling'])) { + $out ["c"]["url"]["thumbnailUrl"] = $config['cops_thumbnail_handling']; + } + } + + $out ["containsBook"] = 0; + if ($currentPage->containsBook ()) { + $out ["containsBook"] = 1; + } + + $out["abouturl"] = "index.php" . addURLParameter ("?page=16", DB, $database); + + if ($page == Base::PAGE_ABOUT) { + $temp = preg_replace ("/\About COPS\<\/h1\>/", "

About COPS " . VERSION . "

", file_get_contents('about.html')); + $out ["fullhtml"] = $temp; + } + + $out ["homeurl"] = "index.php"; + if ($page != Base::PAGE_INDEX && !is_null ($database)) $out ["homeurl"] = $out ["homeurl"] . "?" . addURLParameter ("", DB, $database); + + return $out; +} + + +} \ No newline at end of file diff --git a/base.php b/base.php index c09c3b9..9f74588 100644 --- a/base.php +++ b/base.php @@ -337,10 +337,6 @@ class Entry return "#"; } - public function getContentArray () { - return array ( "title" => $this->title, "content" => $this->content, "navlink" => $this->getNavLink () ); - } - public function __construct($ptitle, $pid, $pcontent, $pcontentType, $plinkArray, $pclass = "") { global $config; $this->title = $ptitle; @@ -375,12 +371,6 @@ class EntryBook extends Entry $this->localUpdated = $pbook->timestamp; } - public function getContentArray () { - $entry = array ( "title" => $this->title); - $entry ["book"] = $this->book->getContentArray (); - return $entry; - } - public function getCoverThumbnail () { foreach ($this->linkArray as $link) { if ($link->rel == Link::OPDS_THUMBNAIL_TYPE) diff --git a/book.php b/book.php index a7496df..03b5905 100644 --- a/book.php +++ b/book.php @@ -125,92 +125,6 @@ class Book extends Base { return $this->title; } - /* Json export */ - - public function getContentArray () { - global $config; - $i = 0; - $preferedData = array (); - foreach ($config['cops_prefered_format'] as $format) - { - if ($i == 2) { break; } - if ($data = $this->getDataFormat ($format)) { - $i++; - array_push ($preferedData, array ("url" => $data->getHtmlLink (), "name" => $format)); - } - } - - $publisher = $this->getPublisher(); - if (is_null ($publisher)) { - $pn = ""; - $pu = ""; - } else { - $pn = $publisher->name; - $link = new LinkNavigation ($publisher->getUri ()); - $pu = $link->hrefXhtml (); - } - - $serie = $this->getSerie (); - if (is_null ($serie)) { - $sn = ""; - $scn = ""; - $su = ""; - } else { - $sn = $serie->name; - $scn = str_format (localize ("content.series.data"), $this->seriesIndex, $serie->name); - $link = new LinkNavigation ($serie->getUri ()); - $su = $link->hrefXhtml (); - } - - return array ("id" => $this->id, - "hasCover" => $this->hasCover, - "preferedData" => $preferedData, - "rating" => $this->getRating (), - "publisherName" => $pn, - "publisherurl" => $pu, - "pubDate" => $this->getPubDate (), - "languagesName" => $this->getLanguages (), - "authorsName" => $this->getAuthorsName (), - "tagsName" => $this->getTagsName (), - "seriesName" => $sn, - "seriesIndex" => $this->seriesIndex, - "seriesCompleteName" => $scn, - "seriesurl" => $su); - - } - - public function getFullContentArray () { - global $config; - $out = $this->getContentArray (); - - $out ["coverurl"] = Data::getLink ($this, "jpg", "image/jpeg", Link::OPDS_IMAGE_TYPE, "cover.jpg", NULL)->hrefXhtml (); - $out ["thumbnailurl"] = Data::getLink ($this, "jpg", "image/jpeg", Link::OPDS_THUMBNAIL_TYPE, "cover.jpg", NULL, NULL, $config['cops_html_thumbnail_height'] * 2)->hrefXhtml (); - $out ["content"] = $this->getComment (false); - $out ["datas"] = array (); - $dataKindle = $this->GetMostInterestingDataToSendToKindle (); - foreach ($this->getDatas() as $data) { - $tab = array ("id" => $data->id, "format" => $data->format, "url" => $data->getHtmlLink (), "mail" => 0); - if (!empty ($config['cops_mail_configuration']) && !is_null ($dataKindle) && $data->id == $dataKindle->id) { - $tab ["mail"] = 1; - } - array_push ($out ["datas"], $tab); - } - $out ["authors"] = array (); - foreach ($this->getAuthors () as $author) { - $link = new LinkNavigation ($author->getUri ()); - array_push ($out ["authors"], array ("name" => $author->name, "url" => $link->hrefXhtml ())); - } - $out ["tags"] = array (); - foreach ($this->getTags () as $tag) { - $link = new LinkNavigation ($tag->getUri ()); - array_push ($out ["tags"], array ("name" => $tag->name, "url" => $link->hrefXhtml ())); - } - ; - return $out; - } - - /* End of Json export */ - /* Other class (author, series, tag, ...) initialization and accessors */ public function getAuthors () { @@ -270,7 +184,7 @@ class Book extends Base { } return $this->tags; } - + public function getTagsName () { return implode (", ", array_map (function ($tag) { return $tag->name; }, $this->getTags ())); } @@ -337,7 +251,7 @@ class Book extends Base { } return NULL; } - + public function getRating () { if (is_null ($this->rating) || $this->rating == 0) { return ""; @@ -669,106 +583,3 @@ order by substr (upper (sort), 1, 1)"); } } - -function getJson ($complete = false) { - global $config; - $page = getURLParam ("page", Base::PAGE_INDEX); - $query = getURLParam ("query"); - $search = getURLParam ("search"); - $qid = getURLParam ("id"); - $n = getURLParam ("n", "1"); - $database = GetUrlParam (DB); - - $currentPage = Page::getPage ($page, $qid, $query, $n); - $currentPage->InitializeContent (); - - if ($search) { - return $currentPage->getContentArrayTypeahead (); - } - - $out = array ( "title" => $currentPage->title); - $entries = array (); - foreach ($currentPage->entryArray as $entry) { - array_push ($entries, $entry->getContentArray ()); - } - if (!is_null ($currentPage->book)) { - $out ["book"] = $currentPage->book->getFullContentArray (); - } - $out ["databaseId"] = GetUrlParam (DB, ""); - $out ["databaseName"] = Base::getDbName (); - $out ["page"] = $page; - $out ["multipleDatabase"] = Base::isMultipleDatabaseEnabled () ? 1 : 0; - $out ["entries"] = $entries; - $out ["isPaginated"] = 0; - if ($currentPage->isPaginated ()) { - $prevLink = $currentPage->getPrevLink (); - $nextLink = $currentPage->getNextLink (); - $out ["isPaginated"] = 1; - $out ["prevLink"] = ""; - if (!is_null ($prevLink)) { - $out ["prevLink"] = $prevLink->hrefXhtml (); - } - $out ["nextLink"] = ""; - if (!is_null ($nextLink)) { - $out ["nextLink"] = $nextLink->hrefXhtml (); - } - $out ["maxPage"] = $currentPage->getMaxPage (); - $out ["currentPage"] = $currentPage->n; - } - if (!is_null (getURLParam ("complete")) || $complete) { - $out ["c"] = array ("version" => VERSION, "i18n" => array ( - "coverAlt" => localize("i18n.coversection"), - "authorsTitle" => localize("authors.title"), - "bookwordTitle" => localize("bookword.title"), - "tagsTitle" => localize("tags.title"), - "seriesTitle" => localize("series.title"), - "customizeTitle" => localize ("customize.title"), - "aboutTitle" => localize ("about.title"), - "previousAlt" => localize ("paging.previous.alternate"), - "nextAlt" => localize ("paging.next.alternate"), - "searchAlt" => localize ("search.alternate"), - "sortAlt" => localize ("sort.alternate"), - "homeAlt" => localize ("home.alternate"), - "cogAlt" => localize ("cog.alternate"), - "permalinkAlt" => localize ("permalink.alternate"), - "publisherName" => localize("publisher.name"), - "pubdateTitle" => localize("pubdate.title"), - "languagesTitle" => localize("language.title"), - "contentTitle" => localize("content.summary"), - "sortorderAsc" => localize("search.sortorder.asc"), - "sortorderDesc" => localize("search.sortorder.desc"), - "customizeEmail" => localize("customize.email")), - "url" => array ( - "detailUrl" => "index.php?page=13&id={0}&db={1}", - "coverUrl" => "fetch.php?id={0}&db={1}", - "thumbnailUrl" => "fetch.php?height=" . $config['cops_html_thumbnail_height'] . "&id={0}&db={1}"), - "config" => array ( - "use_fancyapps" => $config ["cops_use_fancyapps"], - "max_item_per_page" => $config['cops_max_item_per_page'], - "server_side_rendering" => useServerSideRendering (), - "html_tag_filter" => $config['cops_html_tag_filter'])); - if ($config['cops_thumbnail_handling'] == "1") { - $out ["c"]["url"]["thumbnailUrl"] = $out ["c"]["url"]["coverUrl"]; - } else if (!empty ($config['cops_thumbnail_handling'])) { - $out ["c"]["url"]["thumbnailUrl"] = $config['cops_thumbnail_handling']; - } - } - - $out ["containsBook"] = 0; - if ($currentPage->containsBook ()) { - $out ["containsBook"] = 1; - } - - $out["abouturl"] = "index.php" . addURLParameter ("?page=16", DB, $database); - - if ($page == Base::PAGE_ABOUT) { - $temp = preg_replace ("/\About COPS\<\/h1\>/", "

About COPS " . VERSION . "

", file_get_contents('about.html')); - $out ["fullhtml"] = $temp; - } - - $out ["homeurl"] = "index.php"; - if ($page != Base::PAGE_INDEX && !is_null ($database)) $out ["homeurl"] = $out ["homeurl"] . "?" . addURLParameter ("", DB, $database); - - return $out; -} - diff --git a/getJSON.php b/getJSON.php index 4dfb269..2697d19 100644 --- a/getJSON.php +++ b/getJSON.php @@ -8,16 +8,10 @@ */ require_once ("config.php"); - require_once ("base.php"); - require_once ("author.php"); - require_once ("serie.php"); - require_once ("tag.php"); - require_once ("language.php"); - require_once ("customcolumn.php"); - require_once ("book.php"); + require_once ("JSON_renderer.php"); header ("Content-Type:application/json;charset=utf-8"); - echo json_encode (getJson ()); + echo json_encode (JSONRenderer::getJson ()); diff --git a/test/bookTest.php b/test/bookTest.php index 88e3b59..90c6df8 100644 --- a/test/bookTest.php +++ b/test/bookTest.php @@ -8,6 +8,7 @@ require_once (dirname(__FILE__) . "/config_test.php"); require_once (dirname(__FILE__) . "/../book.php"); +require_once (dirname(__FILE__) . "/../JSON_renderer.php"); /* Publishers: @@ -321,7 +322,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["query"] = "fic"; $_GET["search"] = "1"; - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (3, $array); $this->assertEquals ("2 tags", $array[0]["title"]); @@ -331,7 +332,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["query"] = "car"; $_GET["search"] = "1"; - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (4, $array); $this->assertEquals ("1 book", $array[0]["title"]); @@ -342,7 +343,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["query"] = "art"; $_GET["search"] = "1"; - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (4, $array); $this->assertEquals ("1 author", $array[0]["title"]); @@ -353,7 +354,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["query"] = "Macmillan"; $_GET["search"] = "1"; - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (3, $array); $this->assertEquals ("2 publishers", $array[0]["title"]); @@ -372,7 +373,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["search"] = "1"; $config ['cops_ignored_categories'] = array ("author"); - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (2, $array); $this->assertEquals ("1 book", $array[0]["title"]); @@ -383,7 +384,7 @@ class BookTest extends PHPUnit_Framework_TestCase $_GET["search"] = "1"; $config ['cops_ignored_categories'] = array ("series"); - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (2, $array); $this->assertEquals ("1 author", $array[0]["title"]); @@ -404,7 +405,7 @@ class BookTest extends PHPUnit_Framework_TestCase $config['calibre_directory'] = array ("Some books" => dirname(__FILE__) . "/BaseWithSomeBooks/", "One book" => dirname(__FILE__) . "/BaseWithOneBook/"); - $array = getJson (); + $array = JSONRenderer::getJson (); $this->assertCount (5, $array); $this->assertEquals ("Some books", $array[0]["title"]);