X-Git-Url: https://git.rvb.name/openlib.git/blobdiff_plain/a47401f5fac121db5eb44214530121ab14cba2f3..6b3a07a008979ee27733a2deae2ff4fc42f4a535:/www/serie.php diff --git a/www/serie.php b/www/serie.php new file mode 100644 index 0000000..7dcf9c8 --- /dev/null +++ b/www/serie.php @@ -0,0 +1,122 @@ + + */ + +require_once('base.php'); + +class Serie extends Base { + const ALL_SERIES_ID = "calibre:series"; + + public $id; + public $name; + + public function __construct($pid, $pname) { + $this->id = $pid; + $this->name = $pname; + } + + public function getUri () { + return "?page=".parent::PAGE_SERIE_DETAIL."&id=$this->id"; + } + + public function getEntryId () { + return self::ALL_SERIES_ID.":".$this->id; + } + + public function getEntryIdByLetters ($letters) { + return self::ALL_SERIES_ID.":letters:".$letters; + } + + public static function getCount() { + $nSeries = parent::getDb ()->query('select count(*) from series')->fetchColumn(0); + if ($nSeries == 0) return NULL; + $entry = new Entry (localize("series.title"), self::ALL_SERIES_ID, + str_format (localize("series.alphabetical", $nSeries), $nSeries), "text", + array ( new LinkNavigation ("?page=".parent::PAGE_ALL_SERIES))); + return $entry; + } + + public static function getSerieByBookId ($bookId) { + $result = parent::getDb ()->prepare('select series.id as id, name +from books_series_link, series +where series.id = series and book = ?'); + $result->execute (array ($bookId)); + if ($post = $result->fetchObject ()) { + return new Serie ($post->id, $post->name); + } + return NULL; + } + + public static function getSerieById ($serieId) { + $result = parent::getDb ()->prepare('select id, name from series where id = ?'); + $result->execute (array ($serieId)); + if ($post = $result->fetchObject ()) { + return new Serie ($post->id, $post->name); + } + return NULL; + } + + public static function getAllSeries($letters) { + if (!$letters) { $letters=''; } + $len = mb_strlen($letters,'UTF-8')+1; + $result = parent::getDb ()->query('select +substr(series.sort,1,'.$len.') as sort, +sum(count) as count, +count(distinct series.id) ser_count, +count(distinct series.sort) sort_cnt, +min(series.id) min_id, min(series.sort) min_sort +from series, +(select series,count(*) as count from books_series_link group by series) link +where series.id = link.series and series.sort like "'.$letters.'%" +group by substr(series.sort,1,'.$len.') +order by substr(series.sort,1,'.$len.')'); + $entryArray = array(); + while ($post = $result->fetchObject ()) + { + if ($post->ser_count==1) { + $serie = new Serie ($post->min_id, $post->min_sort); + $title = $serie->name; + $link = array ( new LinkNavigation ($serie->getUri ())); + } elseif ($post->ser_count > parent::maxItemsPerPage() && $post->sort_cnt>1) { + $page = parent::PAGE_ALL_SERIES; + $title = $post->sort.'...'; + $link = array ( new LinkNavigation ("?page=".$page."&id=". rawurlencode ($post->sort))); + } else { + $page = parent::PAGE_SERIES_STARTING_LETTERS; + $title = $post->sort.'...'; + $link = array ( new LinkNavigation ("?page=".$page."&id=". rawurlencode ($post->sort))); + } + array_push ($entryArray, new Entry ($title, Serie::getEntryIdByLetters($post->sort), + str_format (localize("bookword", $post->count), $post->count), "text", + $link )); + + } + return $entryArray; + } + + + public static function getAllSeriesStartingLetters($letters) { + $result = parent::getDb ()->query(' +select +series.id as id, series.name as name, series.sort as sort, +sum(count) as count +from series, +(select series,count(*) as count from books_series_link group by series) link +where series.id = link.series and series.sort like "'.$letters.'%" +group by series.id, series.name, series.sort +order by series.sort'); + $entryArray = array(); + while ($post = $result->fetchObject ()) + { + $serie = new Serie ($post->id, $post->sort); + array_push ($entryArray, new Entry ($serie->name, $serie->getEntryId (), + str_format (localize("bookword", $post->count), $post->count), "text", + array ( new LinkNavigation ($serie->getUri ())))); + } + return $entryArray; + } +}