use directly MOBIClass

This commit is contained in:
tcit
2014-07-24 21:56:04 +02:00
parent c70bfefc68
commit fb9df0c269
47 changed files with 309 additions and 1551 deletions

View File

@ -30,34 +30,35 @@ class WallabagEBooks
case 'id':
$entryID = filter_var($this->value, FILTER_SANITIZE_NUMBER_INT);
$entry = $this->wallabag->store->retrieveOneById($entryID, $this->wallabag->user->getId());
$entries = array($entry);
$bookTitle = $entry['title'];
$bookFileName = substr($bookTitle, 0, 200);
$this->entries = array($entry);
$this->bookTitle = $entry['title'];
$this->bookFileName = substr($this->bookTitle, 0, 200);
break;
case 'all':
$entries = $this->wallabag->store->retrieveAll($this->wallabag->user->getId());
$bookTitle = sprintf(_('All my articles on '), date(_('d.m.y'))); #translatable because each country has it's own date format system
$bookFileName = _('Allarticles') . date(_('dmY'));
$this->entries = $this->wallabag->store->retrieveAll($this->wallabag->user->getId());
$this->bookTitle = sprintf(_('All my articles on '), date(_('d.m.y'))); #translatable because each country has it's own date format system
$this->bookFileName = _('Allarticles') . date(_('dmY'));
break;
case 'tag':
$tag = filter_var($this->value, FILTER_SANITIZE_STRING);
$tags_id = $this->wallabag->store->retrieveAllTags($this->wallabag->user->getId(), $tag);
$tag_id = $tags_id[0]["id"]; // we take the first result, which is supposed to match perfectly. There must be a workaround.
$entries = $this->wallabag->store->retrieveEntriesByTag($tag_id, $this->wallabag->user->getId());
$bookTitle = sprintf(_('Articles tagged %s'), $tag);
$bookFileName = substr(sprintf(_('Tag %s'), $tag), 0, 200);
$this->entries = $this->wallabag->store->retrieveEntriesByTag($tag_id, $this->wallabag->user->getId());
$this->bookTitle = sprintf(_('Articles tagged %s'), $tag);
$this->bookFileName = substr(sprintf(_('Tag %s'), $tag), 0, 200);
break;
case 'category':
$category = filter_var($this->value, FILTER_SANITIZE_STRING);
$entries = $this->wallabag->store->getEntriesByView($category, $this->wallabag->user->getId());
$bookTitle = sprintf(_('All articles in category %s'), $category);
$bookFileName = substr(sprintf(_('Category %s'), $category), 0, 200);
$this->entries = $this->wallabag->store->getEntriesByView($category, $this->wallabag->user->getId());
$this->bookTitle = sprintf(_('All articles in category %s'), $category);
$this->bookFileName = substr(sprintf(_('Category %s'), $category), 0, 200);
break;
case 'search':
$search = filter_var($this->value, FILTER_SANITIZE_STRING);
$entries = $this->store->search($search, $this->wallabag->user->getId());
$bookTitle = sprintf(_('All articles for search %s'), $search);
$bookFileName = substr(sprintf(_('Search %s'), $search), 0, 200);
Tools::logm($search);
$this->entries = $this->wallabag->store->search($search, $this->wallabag->user->getId());
$this->bookTitle = sprintf(_('All articles for search %s'), $search);
$this->bookFileName = substr(sprintf(_('Search %s'), $search), 0, 200);
break;
case 'default':
die(_('Uh, there is a problem while generating epub.'));
@ -94,7 +95,7 @@ class WallabagEpub extends WallabagEBooks
$log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
$log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
$book->setTitle($bookTitle);
$book->setTitle($this->bookTitle);
$book->setIdentifier("http://$_SERVER[HTTP_HOST]", EPub::IDENTIFIER_URI); // Could also be the ISBN number, prefered for published books, or a UUID.
//$book->setLanguage("en"); // Not needed, but included for the example, Language is mandatory, but EPub defaults to "en". Use RFC3066 Language codes, such as "en", "da", "fr" etc.
$book->setDescription(_("Some articles saved on my wallabag"));
@ -111,7 +112,7 @@ class WallabagEpub extends WallabagEBooks
$log->logLine("Add Cover");
$fullTitle = "<h1> " . $bookTitle . "</h1>\n";
$fullTitle = "<h1> " . $this->bookTitle . "</h1>\n";
$book->setCoverImage("Cover.png", file_get_contents("themes/baggy/img/apple-touch-icon-152.png"), "image/png", $fullTitle);
@ -122,7 +123,7 @@ class WallabagEpub extends WallabagEBooks
$book->buildTOC();
foreach ($entries as $entry) { //set tags as subjects
foreach ($this->entries as $entry) { //set tags as subjects
$tags = $this->wallabag->store->retrieveTagsByEntry($entry['id']);
foreach ($tags as $tag) {
$book->setSubject($tag['value']);
@ -139,97 +140,82 @@ class WallabagEpub extends WallabagEBooks
$book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // log generation
}
$book->finalize();
$zipData = $book->sendBook($bookFileName);
$zipData = $book->sendBook($this->bookFileName);
}
}
class WallabagMobi extends WallabagEBooks
{
/**
* Adapted from News2Kindle
* @author Jakub Westfalewski <jwest@jwest.pl>
*
* MOBI Class
* @author Sander Kromwijk
*/
public function produceMobi()
public function produceMobi($send = FALSE)
{
$storage = new Storage('static');
$this->prepareData();
foreach ($entries as $i => $item) {
$content = $item['content'];
$images = new Images($storage, $content);
$content = $images->convert();
$storage->add_content
(
md5($item['title']),
mb_convert_encoding($item['title'], 'HTML-ENTITIES', 'utf-8'),
$content,
$item['url']],
""
);
}
$articles = $storage->get_contents();
$toc = array();
$articles_count = count($articles);
foreach($articles as $article){
if(array_key_exists($article->website->title, $toc)){
$toc[$article->website->title]->articles[] = $article;
}else{
$toc[$article->website->title] = (object)array(
'articles' => array($article),
'title' => $article->website->title,
'streamId' => $article->website->streamId,
'url' => $article->website->htmlUrl,
);
}
# Good try
$mobi = new MOBI();
$content = new MOBIFile();
$content->set("title", $this->bookTitle);
$content->set("author", "wallabag");
# introduction
//$content->appendChapterTitle("Cover");
$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->appendPageBreak();
foreach ($this->entries as $item) {
$content->appendChapterTitle($item['title']);
$content->appendParagraph($item['content']);
$content->appendPageBreak();
}
$mobi->setContentProvider($content);
$mobi = new MOBI();
$mobi->setData($content);
$mobi->setOptions(array(
'title' => 'Articles from '.date('Y-m-d'),
'author' => 'wallabag',
'subject' => 'Articles from '.date('Y-m-d'),
));
$images = array();
//prepare images for mobi format
foreach ( $storage->info('images') as $n => $image )
{
$images[$n] = new FileRecord(new Record(file_get_contents($storage->get_path() . $image)));
}
$mobi->setImages($images);
$mobi->save( $storage->get_path(FALSE) . 'articles-' . date('Y-m-d') . '.mobi');
$storage->clean();
if ($send) {
$files = glob($storage->get_path(FALSE).'*.mobi');
$mail = new Send(KINDLEMAIL,MAIL);
foreach ( $files as $file_mobi )
{
$mail->send( $file_mobi );
}
// clean cache
foreach ( $files as $file_mobi )
{
unlink( $file_mobi );
}
}
}
$mobi->download($this->bookFileName.".mobi");
}
}
class WallabagPDF extends WallabagEbooks
{
public function producePDF()
{
//$this->prepareData();
$mpdf = new mPDF('c');
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;
# intro
$html = '<h1>' . $this->bookTitle . '</h1><img src="themes/baggy/img/apple-touch-icon-152.png" />';
foreach ($this->entries as $item) {
$html .= '<h1>' . $item['title'] . '</h1>';
$html .= '<indexentry content="'. $item['title'] .'" />';
$html .= $item['content'];
}
//$mpdf->h2toc = array('H1'=>0);
# headers
$mpdf->SetHeader('{DATE j-m-Y}|{PAGENO}/{nb}|Produced with wallabag');
$mpdf->SetFooter('{PAGENO}');
$mpdf->WriteHTML($html);
# remove characters that make mpdf bug
$char_in = array('/', '.', ',', ':', '|');
$pdfExportName = preg_replace('/\s+/', '-', str_replace($char_in, '-', $this->bookFileName . '.pdf'));
$mpdf->Output('cache/' . $pdfExportName);
header('Content-Disposition: attachment; filename="' . $pdfExportName . '"');
header('Content-Transfer-Encoding: base64');
header('Content-Type: application/pdf');
echo file_get_contents('cache/' . $pdfExportName);
//exit;
}
}