# l10n
$language = $this->user->getConfigValue('language');
- putenv('LC_ALL=' . $language);
+ @putenv('LC_ALL=' . $language);
setlocale(LC_ALL, $language);
bindtextdomain($language, LOCALE);
textdomain($language);
$filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
$this->tpl->addFilter($filter);
}
-
+
public function createNewUser() {
if (isset($_GET['newuser'])){
if ($_POST['newusername'] != "" && $_POST['password4newuser'] != ""){
$newusername = filter_var($_POST['newusername'], FILTER_SANITIZE_STRING);
- if (!$this->store->userExists($newusername)){
+ if (!$this->store->userExists($newusername)){
if ($this->store->install($newusername, Tools::encodeString($_POST['password4newuser'] . $newusername))) {
Tools::logm('The new user '.$newusername.' has been installed');
$this->messages->add('s', sprintf(_('The new user %s has been installed. Do you want to <a href="?logout">logout ?</a>'),$newusername));
}
}
}
-
+
public function deleteUser(){
if (isset($_GET['deluser'])){
if ($this->store->listUsers() > 1) {
Tools::redirect();
break;
case 'add_tag' :
- $tags = explode(',', $_POST['value']);
- $entry_id = $_POST['entry_id'];
- $entry = $this->store->retrieveOneById($entry_id, $this->user->getId());
- if (!$entry) {
- $this->messages->add('e', _('Article not found!'));
- Tools::logm('error : article not found');
- Tools::redirect();
- }
- //get all already set tags to preven duplicates
- $already_set_tags = array();
- $entry_tags = $this->store->retrieveTagsByEntry($entry_id);
- foreach ($entry_tags as $tag) {
- $already_set_tags[] = $tag['value'];
+ if (isset($_GET['search'])) {
+ //when we want to apply a tag to a search
+ $tags = array($_GET['search']);
+ $allentry_ids = $this->store->search($tags[0], $this->user->getId());
+ $entry_ids = array();
+ foreach ($allentry_ids as $eachentry) {
+ $entry_ids[] = $eachentry[0];
+ }
+ } else { //add a tag to a single article
+ $tags = explode(',', $_POST['value']);
+ $entry_ids = array($_POST['entry_id']);
}
- foreach($tags as $key => $tag_value) {
- $value = trim($tag_value);
- if ($value && !in_array($value, $already_set_tags)) {
- $tag = $this->store->retrieveTagByValue($value);
-
- if (is_null($tag)) {
- # we create the tag
- $tag = $this->store->createTag($value);
- $sequence = '';
- if (STORAGE == 'postgres') {
- $sequence = 'tags_id_seq';
+ foreach($entry_ids as $entry_id) {
+ $entry = $this->store->retrieveOneById($entry_id, $this->user->getId());
+ if (!$entry) {
+ $this->messages->add('e', _('Article not found!'));
+ Tools::logm('error : article not found');
+ Tools::redirect();
+ }
+ //get all already set tags to preven duplicates
+ $already_set_tags = array();
+ $entry_tags = $this->store->retrieveTagsByEntry($entry_id);
+ foreach ($entry_tags as $tag) {
+ $already_set_tags[] = $tag['value'];
+ }
+ foreach($tags as $key => $tag_value) {
+ $value = trim($tag_value);
+ if ($value && !in_array($value, $already_set_tags)) {
+ $tag = $this->store->retrieveTagByValue($value);
+ if (is_null($tag)) {
+ # we create the tag
+ $tag = $this->store->createTag($value);
+ $sequence = '';
+ if (STORAGE == 'postgres') {
+ $sequence = 'tags_id_seq';
+ }
+ $tag_id = $this->store->getLastId($sequence);
+ }
+ else {
+ $tag_id = $tag['id'];
}
- $tag_id = $this->store->getLastId($sequence);
- }
- else {
- $tag_id = $tag['id'];
- }
-
- # we assign the tag to the article
- $this->store->setTagToEntry($tag_id, $entry_id);
+
+ # we assign the tag to the article
+ $this->store->setTagToEntry($tag_id, $entry_id);
+ }
}
}
+ $this->messages->add('s', _('The tag has been applied successfully'));
+ Tools::logm('The tag has been applied successfully');
Tools::redirect();
break;
case 'remove_tag' :
Tools::redirect();
}
$this->store->removeTagForEntry($id, $tag_id);
+ Tools::logm('tag entry deleted');
+ if ($this->store->cleanUnusedTag($tag_id)) {
+ Tools::logm('tag deleted');
+ }
+ $this->messages->add('s', _('The tag has been successfully deleted'));
Tools::redirect();
break;
default:
* return new purifier object with actual config
*/
protected function getPurifier() {
- $config = HTMLPurifier_Config::createDefault();\r
- $config->set('Cache.SerializerPath', CACHE);\r
- $config->set('HTML.SafeIframe', true);\r
- $config->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/)%'); //allow YouTube and Vimeo$purifier = new HTMLPurifier($config);
-\r
+ $config = HTMLPurifier_Config::createDefault();
+ $config->set('Cache.SerializerPath', CACHE);
+ $config->set('HTML.SafeIframe', true);
+ //allow YouTube, Vimeo and dailymotion videos
+ $config->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/|www\.dailymotion\.com/embed/video/)%');
+
return new HTMLPurifier($config);
}
$entryID = filter_var($_GET['id'],FILTER_SANITIZE_NUMBER_INT);
$entry = $this->store->retrieveOneById($entryID, $this->user->getId());
$entries = array($entry);
+ $bookTitle = $entry['title'];
+ $bookFileName = substr($bookTitle, 0, 200);
break;
case 'all':
$entries = $this->store->retrieveAll($this->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'));
break;
case 'tag':
$tag = filter_var($_GET['tag'],FILTER_SANITIZE_STRING);
$tags_id = $this->store->retrieveAllTags($this->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->store->retrieveEntriesByTag($tag_id,$this->user->getId());
+ $bookTitle = sprintf(_('Articles tagged %s'),$tag);
+ $bookFileName = substr(sprintf(_('Tag %s'),$tag), 0, 200);
break;
case 'category':
$category = filter_var($_GET['category'],FILTER_SANITIZE_STRING);
$entries = $this->store->getEntriesByView($category,$this->user->getId());
+ $bookTitle = sprintf(_('All articles in category %s'), $category);
+ $bookFileName = substr(sprintf(_('Category %s'),$category), 0, 200);
break;
case 'search':
$search = filter_var($_GET['search'],FILTER_SANITIZE_STRING);
$entries = $this->store->search($search,$this->user->getId());
+ $bookTitle = sprintf(_('All articles for search %s'), $search);
+ $bookFileName = substr(sprintf(_('Search %s'), $search), 0, 200);
break;
case 'default':
die(_('Uh, there is a problem while generating epub.'));
}
$content_start =
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
- . "<!DOCTYPE html>\n"
- . "<html>\n"
- . "<head>\n"
- . "<link rel=\"stylesheet\" type=\"text/css\" href=\"styles.css\" />\n"
- . "<title>wallabag article</title>\n"
+ "<?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"
+ . "<head>"
+ . "<meta http-equiv=\"Default-Style\" content=\"text/html; charset=utf-8\" />\n"
+ . "<title>wallabag articles book</title>\n"
. "</head>\n"
. "<body>\n";
$log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
$log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
- $book->setTitle("wallabag's articles");
+ $book->setTitle(_('wallabag\'s articles'));
$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");
+ $book->setDescription(_("Some articles saved on my wallabag"));
$book->setAuthor("wallabag","wallabag");
$book->setPublisher("wallabag","wallabag"); // I hope this is a non existant address :)
$book->setDate(time()); // Strictly not needed as the book date defaults to time().
$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");
- if (count($entries)>1){
- $cover = "<h1>" . $entries[0]['title'] . " and " . count($entries) . " other articles</h1>";
- } else {
- $cover = "<h1>" . $entries[0]['title'] . "</h1>";
- }
- $book->setCover("Cover.png", file_get_contents("themes/baggy/img/apple-touch-icon-152.png"), "image/png", $cover);
+ $fullTitle = "<h1> " . $bookTitle . "</h1>\n";
+
+ $book->setCoverImage("Cover.png", file_get_contents("themes/baggy/img/apple-touch-icon-152.png"), "image/png", $fullTitle);
- $book->setCover($cover);
- //$book->addChapter("Notices", "Cover.html", $cover);
- $book->buildTOC(NULL, "toc", "Table of Contents", TRUE, TRUE);
- $subject = "";
+ $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;
- foreach ($entries as $entry) {
+ //$book->addChapter("Table of Contents", "TOC.xhtml", NULL, false, EPub::EXTERNAL_REF_IGNORE);
+ $book->addChapter("Notices", "Cover2.html", $cover);
+
+ $book->buildTOC();
+
+ foreach ($entries as $entry) { //set tags as subjects
$tags = $this->store->retrieveTagsByEntry($entry['id']);
foreach ($tags as $tag) {
- $subject =. $tag['value'] . ',';
+ $book->setSubject($tag['value']);
}
$log->logLine("Set up parameters");
$chapter = $content_start . $entry['content'] . $bookEnd;
$book->addChapter($entry['title'], htmlspecialchars($entry['title']) . ".html", $chapter, true, EPub::EXTERNAL_REF_ADD);
$log->logLine("Added chapter " . $entry['title']);
- }
- $book->setSubject($subject);
+ }
if (DEBUG_POCHE) {
- $epuplog = $book->getLog();
- $book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // generation log
- // Only used in case we need to debug EPub.php.
- //$book->addChapter("ePubLog", "ePubLog.html", $content_start . $epuplog . "\n</pre>" . $bookEnd);
+ $epuplog = $book->getLog();
+ $book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // log generation
}
$book->finalize();
- $zipData = $book->sendBook("wallabag's articles");
+ $zipData = $book->sendBook($bookFileName);
}
}