]> git.immae.eu Git - github/wallabag/wallabag.git/blobdiff - inc/poche/WallabagEBooks.class.php
[1203] fixing tag export
[github/wallabag/wallabag.git] / inc / poche / WallabagEBooks.class.php
index 80aa7e43c4a40db95dbfab8d22007c4107edf0cb..ec1e4b2719d6b3e6abb8e423b27e3f626602805b 100644 (file)
@@ -33,7 +33,7 @@ class WallabagEBooks
                 $entry = $this->wallabag->store->retrieveOneById($entryID, $this->wallabag->user->getId());
                 $this->entries = array($entry);
                 $this->bookTitle = $entry['title'];
-                $this->bookFileName = substr($this->bookTitle, 0, 200);
+                $this->bookFileName = str_replace('/', '_', substr($this->bookTitle, 0, 200));
                 $this->author = preg_replace('#^w{3}.#', '', Tools::getdomain($entry["url"])); # if only one article, set author to domain name (we strip the eventual www part)
                 Tools::logm('Producing ebook from article ' . $this->bookTitle);
                 break;
@@ -81,6 +81,9 @@ class WallabagEpub extends WallabagEBooks
     public function produceEpub()
     {
         Tools::logm('Starting to produce ePub 3 file');
+
+        try {
+
         $content_start =
             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
             . "<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\">\n"
@@ -93,7 +96,6 @@ class WallabagEpub extends WallabagEBooks
         $bookEnd = "</body>\n</html>\n";
 
         $log = new Logger("wallabag", TRUE);
-        $fileDir = CACHE;
 
         $book = new EPub(EPub::BOOK_VERSION_EPUB3, DEBUG_POCHE);
         $log->logLine("new EPub()");
@@ -118,13 +120,17 @@ class WallabagEpub extends WallabagEBooks
         $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "PHP");
         $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "wallabag");
 
-        $cssData = "body {\n margin-left: .5em;\n margin-right: .5em;\n text-align: justify;\n}\n\np {\n font-family: serif;\n font-size: 10pt;\n text-align: justify;\n text-indent: 1em;\n margin-top: 0px;\n margin-bottom: 1ex;\n}\n\nh1, h2 {\n font-family: sans-serif;\n font-style: italic;\n text-align: center;\n background-color: #6b879c;\n color: white;\n width: 100%;\n}\n\nh1 {\n margin-bottom: 2px;\n}\n\nh2 {\n margin-top: -2px;\n margin-bottom: 2px;\n}\n";
-
+        /* 
+        * Line not used but planned to be used
+       *        
+        *$cssData = "body {\n margin-left: .5em;\n margin-right: .5em;\n text-align: justify;\n}\n\np {\n font-family: serif;\n font-size: 10pt;\n text-align: justify;\n text-indent: 1em;\n margin-top: 0px;\n margin-bottom: 1ex;\n}\n\nh1, h2 {\n font-family: sans-serif;\n font-style: italic;\n text-align: center;\n background-color: #6b879c;\n color: white;\n width: 100%;\n}\n\nh1 {\n margin-bottom: 2px;\n}\n\nh2 {\n margin-top: -2px;\n margin-bottom: 2px;\n}\n";
+       */
+       
         $log->logLine("Add Cover");
 
         $fullTitle = "<h1> " . $this->bookTitle . "</h1>\n";
 
-        $book->setCoverImage("Cover.png", file_get_contents("themes/baggy/img/apple-touch-icon-152.png"), "image/png", $fullTitle);
+        $book->setCoverImage("Cover.png", file_get_contents("themes/_global/img/appicon/apple-touch-icon-152.png"), "image/png", $fullTitle);
 
         $cover = $content_start . '<div style="text-align:center;"><p>' . _('Produced by wallabag with PHPePub') . '</p><p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p></div>' . $bookEnd;
 
@@ -155,6 +161,11 @@ class WallabagEpub extends WallabagEBooks
         $book->finalize();
         $zipData = $book->sendBook($this->bookFileName);
         Tools::logm('Ebook produced');
+       }
+        catch (Exception $e) {
+            Tools::logm('PHPePub has encountered an error : '.$e->getMessage());
+            $this->wallabag->messages->add('e', $e->getMessage());
+        }
     }
 } 
 
@@ -165,15 +176,13 @@ class WallabagMobi extends WallabagEBooks
        * @author Sander Kromwijk
        */
 
-       public function produceMobi($sendByMail = FALSE)
+       public function produceMobi()
        {
-
+               try {
         Tools::logm('Starting to produce Mobi file');
         $mobi = new MOBI();
         $content = new MOBIFile();
 
-        $messages = new Messages(); // for later
-        
         Tools::logm('Filling metadata for Mobi...');
 
         $content->set("title", $this->bookTitle);
@@ -182,7 +191,7 @@ class WallabagMobi extends WallabagEBooks
 
         # introduction
         $content->appendParagraph('<div style="text-align:center;" ><p>' . _('Produced by wallabag with PHPMobi') . '</p><p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p></div>');
-        $content->appendImage(imagecreatefrompng("themes/baggy/img/apple-touch-icon-152.png"));
+        $content->appendImage(imagecreatefrompng("themes/_global/img/appicon/apple-touch-icon-152.png"));
         $content->appendPageBreak();
 
         Tools::logm('Adding actual content...');
@@ -194,66 +203,16 @@ class WallabagMobi extends WallabagEBooks
         }
         $mobi->setContentProvider($content);
 
-        if (!$sendByMail) {
-            // we offer file to download
-            $mobi->download($this->bookFileName.'.mobi');
-            Tools::logm('Mobi file produced');
-        }
-        else {
-            // we send file to kindle
-
-            Tools::logm('Preparing to send file by email');
-
-            $error = FALSE;
-            # testing Mail function
-            if (!function_exists('mail')) {
-                $error = _("Mail function is disabled. You can't send emails from your server");
-            }
+        // the browser inside Kindle Devices doesn't likes special caracters either, we limit to A-z/0-9
+        $this->bookFileName = preg_replace('/[^A-Za-z0-9\-]/', '', $this->bookFileName);
 
-            $char_in = array('/', '.', ',', ':', '|'); # we sanitize filename to avoid conflicts with special characters (for instance, / goes for a directory)
-            $mobiExportName = preg_replace('/\s+/', '-', str_replace($char_in, '-', $this->bookFileName)) . '.mobi';
-            
-            $file = 'cache/' . $mobiExportName;
-            $mobi->save($file);
-
-            $file_size = filesize($file);
-            $filename = basename($file);
-            $handle = fopen($file, "r");
-            $content = fread($handle, $file_size);
-            fclose($handle);
-            $content = chunk_split(base64_encode($content));
-
-            $uid = md5(uniqid(time())); 
-
-            //generate header for mail
-            $header  = "From: wallabag <". $this->wallabag->user->email .">\r\n";        
-            $header .= "MIME-Version: 1.0\r\n";
-            $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
-            $header .= "This is a multi-part message in MIME format.\r\n";
-            $header .= "--".$uid."\r\n";
-            $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
-            $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
-            $header .= "send via wallabag\r\n\r\n";
-            $header .= "--".$uid."\r\n";
-            $header .= "Content-Type: application/x-mobipocket-ebook; name=\"".$filename."\"\r\n";
-            $header .= "Content-Transfer-Encoding: base64\r\n";
-            $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
-            $header .= $content."\r\n\r\n";
-            $header .= "--".$uid."--";
-
-            # trying to get the kindle email adress
-            if (!$this->wallabag->user->getConfigValue('kindleemail')) 
-            {
-                $error = _("You didn't set your kindle's email adress !");
-            }
-            if (!$error) {
-                mail($this->wallabag->user->getConfigValue('kindleemail'), '[wallabag] ' . $this->bookTitle, "", $header );
-                $messages->add('s', _('The email has been sent to your kindle !'));
-                Tools::logm('Email sent');
-            } else {
-                $messages->add('e', $error);
-                Tools::logm($error);
-            }
+        // we offer file to download
+        $mobi->download($this->bookFileName.'.mobi');
+        Tools::logm('Mobi file produced');
+       }
+        catch (Exception $e) {
+            Tools::logm('PHPMobi has encountered an error : '.$e->getMessage());
+            $this->wallabag->messages->add('e', $e->getMessage());
         }
     }
 }
@@ -262,53 +221,51 @@ class WallabagPDF extends WallabagEbooks
 {
        public function producePDF()
        {
-               $mpdf = new mPDF('c'); 
 
         Tools::logm('Starting to produce PDF file');
+        @define ('K_TCPDF_THROW_EXCEPTION_ERROR', TRUE);
+        try {
+        $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 
         Tools::logm('Filling metadata for PDF...');
+        $pdf->SetCreator(PDF_CREATOR);
+        $pdf->SetAuthor('wallabag');
+        $pdf->SetTitle($this->bookTitle);
+        $pdf->SetSubject('Articles via wallabag');
+        $pdf->SetKeywords('wallabag');
+               
+        Tools::logm('Adding introduction...');
+        $pdf->AddPage();
+        $intro = '<h1>' . $this->bookTitle . '</h1><div style="text-align:center;" >
+        <p>' . _('Produced by wallabag with tcpdf') . '</p>
+        <p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p>
+        <img src="themes/_global/img/appicon/apple-touch-icon-152.png" /></div>';
 
-        # headers
-        $mpdf->SetHeader('{DATE j-m-Y}|{PAGENO}/{nb}|Produced with wallabag');
-        $mpdf->SetFooter('{PAGENO}');
 
-        # intro
-        $html = '<h1>' . $this->bookTitle . '<bookmark content="Cover" /></h1><div style="text-align:center;" >
-        <p>' . _('Produced by wallabag with mPDF') . '</p>
-        <p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p>
-        <img src="themes/baggy/img/apple-touch-icon-152.png" /></div>';
-        $html .= '<pagebreak type="next-odd" />';
-        $i = 1;
+        $pdf->writeHTMLCell(0, 0, '', '', $intro, 0, 1, 0, true, '', true);
 
         Tools::logm('Adding actual content...');
         foreach ($this->entries as $item) {
-            $html .= '<h1>' . $item['title'] . '<bookmark content="' . $item['title'] . '" /></h1>';
-            $html .= '<indexentry content="'. $item['title'] .'" />';
+               $tags = $this->wallabag->store->retrieveTagsByEntry($item['id']);
+               foreach ($tags as $tag) {
+                $pdf->SetKeywords($tag['value']);
+            }
+            $pdf->AddPage();
+            $html = '<h1>' . $item['title'] . '</h1>';
             $html .= $item['content'];
-            $html .= '<pagebreak type="next-odd" />';
-            $i = $i+1;
+            $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
         }
-               
-        $mpdf->WriteHTML($html);
 
-        # remove characters that make mpdf bug
-        $char_in = array('/', '.', ',', ':', '|');
-        $pdfExportName = preg_replace('/\s+/', '-', str_replace($char_in, '-', $this->bookFileName . '.pdf')); # maybe someone can make a proper regex of this ?
-
-        # index
-        $html = '<h2>Index<bookmark content="Index" /></h2>
-        <indexinsert cols="2" offset="5" usedivletters="on" div-font-size="15" gap="5" font="Trebuchet" div-font="sans-serif" links="on" />
-        ';
-
-        $mpdf->WriteHTML($html);
-               
-        $mpdf->Output('cache/' . $pdfExportName);
-               
-        header('Content-Disposition: attachment; filename="' . $pdfExportName . '"');
+        // set image scale factor
+        $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
+        
+        
+        $pdf->Output('cache/' . $this->bookFileName . '.pdf', 'FD');
+        }
+        catch (Exception $e) {
+            Tools::logm('TCPDF has encountered an error : '.$e->getMessage());
+            $this->wallabag->messages->add('e', $e->getMessage());
+            }
 
-        header('Content-Transfer-Encoding: base64');
-        header('Content-Type: application/pdf');
-        echo file_get_contents('cache/' . $pdfExportName);
-        Tools::logm('PDF file produced');
        }
-}
\ No newline at end of file
+}