From e6de4593be6e385ed0c4a53554793506b6efab07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Didier=20Corbi=C3=A8re?= Date: Tue, 17 Sep 2013 01:08:23 +0100 Subject: [PATCH] Add series --- resources/epub-loader/BookExport.class.php | 4 ++ resources/epub-loader/BookInfos.class.php | 29 +++++---- .../epub-loader/CalibreDbLoader.class.php | 62 ++++++++++++++++--- 3 files changed, 75 insertions(+), 20 deletions(-) diff --git a/resources/epub-loader/BookExport.class.php b/resources/epub-loader/BookExport.class.php index b53e553..2fee410 100644 --- a/resources/epub-loader/BookExport.class.php +++ b/resources/epub-loader/BookExport.class.php @@ -81,6 +81,8 @@ class BookExport $this->mExport->SetProperty($i++, 'Isbn'); $this->mExport->SetProperty($i++, 'Rights'); $this->mExport->SetProperty($i++, 'Publisher'); + $this->mExport->SetProperty($i++, 'Serie'); + $this->mExport->SetProperty($i++, 'SerieIndex'); $this->mExport->AddContent(); } @@ -101,6 +103,8 @@ class BookExport $this->mExport->SetProperty($i++, $inBookInfo->mIsbn); $this->mExport->SetProperty($i++, $inBookInfo->mRights); $this->mExport->SetProperty($i++, $inBookInfo->mPublisher); + $this->mExport->SetProperty($i++, $inBookInfo->mSerie); + $this->mExport->SetProperty($i++, $inBookInfo->mSerieIndex); $this->mExport->AddContent(); } diff --git a/resources/epub-loader/BookInfos.class.php b/resources/epub-loader/BookInfos.class.php index bda5003..fcfd75d 100644 --- a/resources/epub-loader/BookInfos.class.php +++ b/resources/epub-loader/BookInfos.class.php @@ -29,6 +29,8 @@ class BookInfos public $mIsbn = ''; public $mRights = ''; public $mPublisher = ''; + public $mSerie = ''; + public $mSerieIndex = ''; /** * Loads book infos from an epub file @@ -41,23 +43,26 @@ class BookInfos public function LoadFromEpub($inFileName) { // Load the epub file - $epub = new EPub($inFileName, 'ZipFile'); + $ePub = new EPub($inFileName, 'ZipFile'); // Get the epub infos $this->mFormat = 'epub'; $this->mPath = pathinfo($inFileName, PATHINFO_DIRNAME); $this->mName = pathinfo($inFileName, PATHINFO_FILENAME); - $this->mUuid = $epub->Uuid(); - $this->mUri = $epub->Uri(); - $this->mTitle = $epub->Title(); - $this->mAuthors = $epub->Authors(); - $this->mLanguage = $epub->Language(); - $this->mDescription = $epub->Description(); - $this->mSubjects = $epub->Subjects(); - $this->mCover = $epub->getCoverItem(); - $this->mIsbn = $epub->ISBN(); - $this->mRights = $epub->Copyright(); - $this->mPublisher = $epub->Publisher(); + $this->mUuid = $ePub->Uuid(); + $this->mUri = $ePub->Uri(); + $this->mTitle = $ePub->Title(); + $this->mAuthors = $ePub->Authors(); + $this->mLanguage = $ePub->Language(); + $this->mDescription = $ePub->Description(); + $this->mSubjects = $ePub->Subjects(); + $cover = $ePub->Cover(); + $this->mCover = ($cover['found'] !== false) ? $cover['found'] : ''; + $this->mIsbn = $ePub->ISBN(); + $this->mRights = $ePub->Copyright(); + $this->mPublisher = $ePub->Publisher(); + $this->mSerie = $ePub->Serie(); + $this->mSerieIndex = $ePub->SerieIndex(); } } diff --git a/resources/epub-loader/CalibreDbLoader.class.php b/resources/epub-loader/CalibreDbLoader.class.php index 1630f5d..c4bc2cb 100644 --- a/resources/epub-loader/CalibreDbLoader.class.php +++ b/resources/epub-loader/CalibreDbLoader.class.php @@ -141,10 +141,11 @@ class CalibreDbLoader */ private function AddBook($inBookInfo) { - $sql = 'insert into books(title, sort, uuid, path) values(:title, :sort, :uuid, :path)'; + $sql = 'insert into books(title, sort, series_index, uuid, path) values(:title, :sort, :serieindex, :uuid, :path)'; $stmt = $this->mDb->prepare($sql); $stmt->bindParam(':title', $inBookInfo->mTitle); $stmt->bindParam(':sort', $inBookInfo->mTitle); + $stmt->bindParam(':serieindex', $inBookInfo->mSerieIndex); $stmt->bindParam(':uuid', $inBookInfo->mUuid); $stmt->bindParam(':path', $inBookInfo->mPath); $stmt->execute(); @@ -184,7 +185,52 @@ class CalibreDbLoader $stmt->bindParam(':value', $inBookInfo->mUri); $stmt->execute(); } - // Add the authors in the db + // Add the book serie + if (!empty($inBookInfo->mSerie)) { + // Get the serie id + $sql = 'select id from series where name=:serie'; + $stmt = $this->mDb->prepare($sql); + $stmt->bindParam(':serie', $inBookInfo->mSerie); + $stmt->execute(); + $post = $stmt->fetchObject(); + if ($post) { + $idSerie = $post->id; + } + else { + // Add a new serie + $sql = 'insert into series(name, sort) values(:serie, :sort)'; + $stmt = $this->mDb->prepare($sql); + $stmt->bindParam(':serie', $inBookInfo->mSerie); + $stmt->bindParam(':sort', $inBookInfo->mSerie); + $stmt->execute(); + // Get the serie id + $sql = 'select id from series where name=:serie'; + $stmt = $this->mDb->prepare($sql); + $stmt->bindParam(':serie', $inBookInfo->mSerie); + $stmt->execute(); + $idSerie = null; + while ($post = $stmt->fetchObject()) { + if (!isset($idSerie)) { + $idSerie = $post->id; + } + else { + $error = sprintf('Multiple series for name: %s', $inBookInfo->mSerie); + throw new Exception($error); + } + } + if (!isset($idSerie)) { + $error = sprintf('Cannot find serie id for name: %s', $inBookInfo->mSerie); + throw new Exception($error); + } + } + // Add the book serie link + $sql = 'insert into books_series_link(book, series) values(:idBook, :idSerie)'; + $stmt = $this->mDb->prepare($sql); + $stmt->bindParam(':idBook', $idBook, PDO::PARAM_INT); + $stmt->bindParam(':idSerie', $idSerie, PDO::PARAM_INT); + $stmt->execute(); + } + // Add the book authors foreach ($inBookInfo->mAuthors as $authorSort => $author) { // Get the author id $sql = 'select id from authors where name=:author'; @@ -221,13 +267,13 @@ class CalibreDbLoader $error = sprintf('Cannot find author id for name: %s', $author); throw new Exception($error); } - // Add the book author link - $sql = 'insert into books_authors_link(book, author) values(:idBook, :idAuthor)'; - $stmt = $this->mDb->prepare($sql); - $stmt->bindParam(':idBook', $idBook, PDO::PARAM_INT); - $stmt->bindParam(':idAuthor', $idAuthor, PDO::PARAM_INT); - $stmt->execute(); } + // Add the book author link + $sql = 'insert into books_authors_link(book, author) values(:idBook, :idAuthor)'; + $stmt = $this->mDb->prepare($sql); + $stmt->bindParam(':idBook', $idBook, PDO::PARAM_INT); + $stmt->bindParam(':idAuthor', $idAuthor, PDO::PARAM_INT); + $stmt->execute(); } }