]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Refactor
authorNicolas Lœuillet <nicolas@loeuillet.org>
Sat, 12 Jul 2014 17:01:11 +0000 (19:01 +0200)
committerNicolas Lœuillet <nicolas@loeuillet.org>
Sat, 12 Jul 2014 17:01:11 +0000 (19:01 +0200)
14 files changed:
inc/poche/Language.class.php
inc/poche/Poche.class.php
inc/poche/Routing.class.php
inc/poche/Template.class.php
inc/poche/Tools.class.php
inc/poche/WallabagEpub.class.php [new file with mode: 0644]
inc/poche/global.inc.php
inc/poche/pochePictures.php
themes/baggy/home.twig
themes/baggy/view.twig
themes/courgette/_view.twig
themes/courgette/home.twig
themes/default/home.twig
themes/default/view.twig

index 790cc197a1d97236ce0986ab1eb9f6c994ef12b9..8d3912f5f8d01fa68d8944ab822f4a9585aa6a83 100644 (file)
@@ -107,8 +107,7 @@ class Language
 
         $_SESSION['poche_user']->setConfig($currentConfig);
 
-        $this->wallabag->emptyCache();
-
+        Tools::emptyCache();
         Tools::redirect('?view=config');
     }
 } 
\ No newline at end of file
index bc4320b83ef1bb8a79cc553923fe0f1219721f83..a49413f23816837688ee5b279278a2a9c5bc3d2e 100755 (executable)
@@ -74,61 +74,57 @@ class Poche
     /**
      * Creates a new user
      */
-    public function createNewUser()
+    public function createNewUser($username, $password)
     {
-        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->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));
-                        Tools::redirect();
-                    }
-                    else {
-                        Tools::logm('error during adding new user');
-                        Tools::redirect();
-                    }
+        if (!empty($username) && !empty($password)){
+            $newUsername = filter_var($username, FILTER_SANITIZE_STRING);
+            if (!$this->store->userExists($newUsername)){
+                if ($this->store->install($newUsername, Tools::encodeString($password . $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));
+                    Tools::redirect();
                 }
                 else {
-                    $this->messages->add('e', sprintf(_('Error : An user with the name %s already exists !'),$newusername));
-                    Tools::logm('An user with the name '.$newusername.' already exists !');
+                    Tools::logm('error during adding new user');
                     Tools::redirect();
                 }
             }
+            else {
+                $this->messages->add('e', sprintf(_('Error : An user with the name %s already exists !'), $newUsername));
+                Tools::logm('An user with the name ' . $newUsername . ' already exists !');
+                Tools::redirect();
+            }
         }
     }
 
     /**
      * Delete an existing user
      */
-    public function deleteUser()
+    public function deleteUser($password)
     {
-        if (isset($_GET['deluser'])){
-            if ($this->store->listUsers() > 1) {
-                if (Tools::encodeString($_POST['password4deletinguser'].$this->user->getUsername()) == $this->store->getUserPassword($this->user->getId())) {
-                    $username = $this->user->getUsername();
-                    $this->store->deleteUserConfig($this->user->getId());
-                    Tools::logm('The configuration for user '. $username .' has been deleted !');
-                    $this->store->deleteTagsEntriesAndEntries($this->user->getId());
-                    Tools::logm('The entries for user '. $username .' has been deleted !');
-                    $this->store->deleteUser($this->user->getId());
-                    Tools::logm('User '. $username .' has been completely deleted !');
-                    Session::logout();
-                    Tools::logm('logout');
-                    Tools::redirect();
-                    $this->messages->add('s', sprintf(_('User %s has been successfully deleted !'),$newusername));
-                }
-                else {
-                    Tools::logm('Bad password !');
-                    $this->messages->add('e', _('Error : The password is wrong !'));
-                }
+        if ($this->store->listUsers() > 1) {
+            if (Tools::encodeString($password . $this->user->getUsername()) == $this->store->getUserPassword($this->user->getId())) {
+                $username = $this->user->getUsername();
+                $this->store->deleteUserConfig($this->user->getId());
+                Tools::logm('The configuration for user '. $username .' has been deleted !');
+                $this->store->deleteTagsEntriesAndEntries($this->user->getId());
+                Tools::logm('The entries for user '. $username .' has been deleted !');
+                $this->store->deleteUser($this->user->getId());
+                Tools::logm('User '. $username .' has been completely deleted !');
+                Session::logout();
+                Tools::logm('logout');
+                Tools::redirect();
+                $this->messages->add('s', sprintf(_('User %s has been successfully deleted !'), $username));
             }
             else {
-                Tools::logm('Only user !');
-                $this->messages->add('e', _('Error : You are the only user, you cannot delete your account !'));
+                Tools::logm('Bad password !');
+                $this->messages->add('e', _('Error : The password is wrong !'));
             }
         }
+        else {
+            Tools::logm('Only user !');
+            $this->messages->add('e', _('Error : You are the only user, you cannot delete your account !'));
+        }
     }
 
     public function getDefaultConfig()
@@ -153,7 +149,7 @@ class Poche
                 $body = $content['rss']['channel']['item']['description'];
 
                 // clean content from prevent xss attack
-                $purifier = $this->getPurifier();
+                $purifier = $this->_getPurifier();
                 $title = $purifier->purify($title);
                 $body = $purifier->purify($body);
 
@@ -318,10 +314,10 @@ class Poche
         switch ($view)
         {
             case 'config':
-                $dev_infos = $this->getPocheVersion('dev');
+                $dev_infos = $this->_getPocheVersion('dev');
                 $dev = trim($dev_infos[0]);
                 $check_time_dev = date('d-M-Y H:i', $dev_infos[1]);
-                $prod_infos = $this->getPocheVersion('prod');
+                $prod_infos = $this->_getPocheVersion('prod');
                 $prod = trim($prod_infos[0]);
                 $check_time_prod = date('d-M-Y H:i', $prod_infos[1]);
                 $compare_dev = version_compare(POCHE, $dev);
@@ -461,7 +457,7 @@ class Poche
      * @todo set the new password in function header like this updatePassword($newPassword)
      * @return boolean
      */
-    public function updatePassword()
+    public function updatePassword($password, $confirmPassword)
     {
         if (MODE_DEMO) {
             $this->messages->add('i', _('in demo mode, you can\'t update your password'));
@@ -469,10 +465,10 @@ class Poche
             Tools::redirect('?view=config');
         }
         else {
-            if (isset($_POST['password']) && isset($_POST['password_repeat'])) {
-                if ($_POST['password'] == $_POST['password_repeat'] && $_POST['password'] != "") {
+            if (isset($password) && isset($confirmPassword)) {
+                if ($password == $confirmPassword && !empty($password)) {
                     $this->messages->add('s', _('your password has been updated'));
-                    $this->store->updatePassword($this->user->getId(), Tools::encodeString($_POST['password'] . $this->user->getUsername()));
+                    $this->store->updatePassword($this->user->getId(), Tools::encodeString($password . $this->user->getUsername()));
                     Session::logout();
                     Tools::logm('password updated');
                     Tools::redirect();
@@ -486,22 +482,24 @@ class Poche
     }
 
     /**
-     * get credentials from differents sources
-     * it redirects the user to the $referer link
+     * Get credentials from differents sources
+     * It redirects the user to the $referer link
+     *
      * @return array
      */
-    private function credentials() {
-        if(isset($_SERVER['PHP_AUTH_USER'])) {
-            return array($_SERVER['PHP_AUTH_USER'],'php_auth',true);
+    private function credentials()
+    {
+        if (isset($_SERVER['PHP_AUTH_USER'])) {
+            return array($_SERVER['PHP_AUTH_USER'], 'php_auth', true);
         }
-        if(!empty($_POST['login']) && !empty($_POST['password'])) {
-            return array($_POST['login'],$_POST['password'],false);
+        if (!empty($_POST['login']) && !empty($_POST['password'])) {
+            return array($_POST['login'], $_POST['password'], false);
         }
-        if(isset($_SERVER['REMOTE_USER'])) {
-            return array($_SERVER['REMOTE_USER'],'http_auth',true);
+        if (isset($_SERVER['REMOTE_USER'])) {
+            return array($_SERVER['REMOTE_USER'], 'http_auth', true);
         }
 
-        return array(false,false,false);
+        return array(false, false, false);
     }
 
     /**
@@ -550,129 +548,148 @@ class Poche
     }
 
     /**
-     * import datas into your poche
+     * import datas into your wallabag
      * @return boolean
      */
-    public function import() {
-
-      if ( isset($_FILES['file']) ) {
-        Tools::logm('Import stated: parsing file');
-
-        // assume, that file is in json format
-        $str_data = file_get_contents($_FILES['file']['tmp_name']);
-        $data = json_decode($str_data, true);
-
-        if ( $data === null ) {
-          //not json - assume html
-          $html = new simple_html_dom();
-          $html->load_file($_FILES['file']['tmp_name']);
-          $data = array();
-          $read = 0;
-          foreach (array('ol','ul') as $list) {
-            foreach ($html->find($list) as $ul) {
-              foreach ($ul->find('li') as $li) {
-                $tmpEntry = array();
-                  $a = $li->find('a');
-                  $tmpEntry['url'] = $a[0]->href;
-                  $tmpEntry['tags'] = $a[0]->tags;
-                  $tmpEntry['is_read'] = $read;
-                  if ($tmpEntry['url']) {
-                    $data[] = $tmpEntry;
-                  }
-              }
-              # the second <ol/ul> is for read links
-              $read = ((sizeof($data) && $read)?0:1);
+    public function import()
+    {
+        if (isset($_FILES['file'])) {
+            Tools::logm('Import stated: parsing file');
+
+            // assume, that file is in json format
+
+            $str_data = file_get_contents($_FILES['file']['tmp_name']);
+            $data = json_decode($str_data, true);
+            if ($data === null) {
+
+                // not json - assume html
+
+                $html = new simple_html_dom();
+                $html->load_file($_FILES['file']['tmp_name']);
+                $data = array();
+                $read = 0;
+                foreach(array('ol','ul') as $list) {
+                    foreach($html->find($list) as $ul) {
+                        foreach($ul->find('li') as $li) {
+                            $tmpEntry = array();
+                            $a = $li->find('a');
+                            $tmpEntry['url'] = $a[0]->href;
+                            $tmpEntry['tags'] = $a[0]->tags;
+                            $tmpEntry['is_read'] = $read;
+                            if ($tmpEntry['url']) {
+                                $data[] = $tmpEntry;
+                            }
+                        }
+
+                        // the second <ol/ul> is for read links
+
+                        $read = ((sizeof($data) && $read) ? 0 : 1);
+                    }
+                }
             }
-          }
-        }
 
-        //for readability structure
-        foreach ($data as $record) {
-          if (is_array($record)) {
-            $data[] = $record;
-            foreach ($record as $record2) {
-              if (is_array($record2)) {
-                $data[] = $record2;
-              }
+            // for readability structure
+
+            foreach($data as $record) {
+                if (is_array($record)) {
+                    $data[] = $record;
+                    foreach($record as $record2) {
+                        if (is_array($record2)) {
+                            $data[] = $record2;
+                        }
+                    }
+                }
             }
-          }
-        }
 
-        $urlsInserted = array(); //urls of articles inserted
-        foreach ($data as $record) {
-          $url = trim( isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : '') );
-          if ( $url and !in_array($url, $urlsInserted) ) {
-            $title = (isset($record['title']) ? $record['title'] :  _('Untitled - Import - ').'</a> <a href="./?import">'._('click to finish import').'</a><a>');
-            $body = (isset($record['content']) ? $record['content'] : '');
-            $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive'])?intval($record['archive']):0));
-            $isFavorite = (isset($record['is_fav']) ? intval($record['is_fav']) : (isset($record['favorite'])?intval($record['favorite']):0) );
-            //insert new record
-            $id = $this->store->add($url, $title, $body, $this->user->getId(), $isFavorite, $isRead);
-            if ( $id ) {
-              $urlsInserted[] = $url; //add
-
-              if ( isset($record['tags']) && trim($record['tags']) ) {
-                //@TODO: set tags
-
-              }
+            $urlsInserted = array(); //urls of articles inserted
+            foreach($data as $record) {
+                $url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : ''));
+                if ($url and !in_array($url, $urlsInserted)) {
+                    $title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>');
+                    $body = (isset($record['content']) ? $record['content'] : '');
+                    $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0));
+                    $isFavorite = (isset($record['is_fav']) ? intval($record['is_fav']) : (isset($record['favorite']) ? intval($record['favorite']) : 0));
+
+                    // insert new record
+
+                    $id = $this->store->add($url, $title, $body, $this->user->getId() , $isFavorite, $isRead);
+                    if ($id) {
+                        $urlsInserted[] = $url; //add
+                        if (isset($record['tags']) && trim($record['tags'])) {
+
+                            // @TODO: set tags
+
+                        }
+                    }
+                }
             }
-          }
-        }
 
-        $i = sizeof($urlsInserted);
-        if ( $i > 0 ) {
-          $this->messages->add('s', _('Articles inserted: ').$i._('. Please note, that some may be marked as "read".'));
+            $i = sizeof($urlsInserted);
+            if ($i > 0) {
+                $this->messages->add('s', _('Articles inserted: ') . $i . _('. Please note, that some may be marked as "read".'));
+            }
+
+            Tools::logm('Import of articles finished: ' . $i . ' articles added (w/o content if not provided).');
         }
-        Tools::logm('Import of articles finished: '.$i.' articles added (w/o content if not provided).');
-      }
-      //file parsing finished here
 
-      //now download article contents if any
+        // file parsing finished here
+        // now download article contents if any
+        // check if we need to download any content
 
-      //check if we need to download any content
-      $recordsDownloadRequired = $this->store->retrieveUnfetchedEntriesCount($this->user->getId());
-      if ( $recordsDownloadRequired == 0 ) {
-        //nothing to download
-        $this->messages->add('s', _('Import finished.'));
-        Tools::logm('Import finished completely');
-        Tools::redirect();
-      }
-      else {
-        //if just inserted - don't download anything, download will start in next reload
-        if ( !isset($_FILES['file']) ) {
-          //download next batch
-          Tools::logm('Fetching next batch of articles...');
-          $items = $this->store->retrieveUnfetchedEntries($this->user->getId(), IMPORT_LIMIT);
+        $recordsDownloadRequired = $this->store->retrieveUnfetchedEntriesCount($this->user->getId());
+
+        if ($recordsDownloadRequired == 0) {
 
-          $purifier = $this->getPurifier();
+            // nothing to download
 
-          foreach ($items as $item) {
-            $url = new Url(base64_encode($item['url']));
-            Tools::logm('Fetching article '.$item['id']);
-            $content = Tools::getPageContent($url);
+            $this->messages->add('s', _('Import finished.'));
+            Tools::logm('Import finished completely');
+            Tools::redirect();
+        }
+        else {
 
-            $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
-            $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
+            // if just inserted - don't download anything, download will start in next reload
 
-            //clean content to prevent xss attack
-            $title = $purifier->purify($title);
-            $body = $purifier->purify($body);
+            if (!isset($_FILES['file'])) {
 
-            $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
-            Tools::logm('Article '.$item['id'].' updated.');
-          }
+                // download next batch
 
+                Tools::logm('Fetching next batch of articles...');
+                $items = $this->store->retrieveUnfetchedEntries($this->user->getId() , IMPORT_LIMIT);
+                $purifier = $this->_getPurifier();
+                foreach($items as $item) {
+                    $url = new Url(base64_encode($item['url']));
+                    Tools::logm('Fetching article ' . $item['id']);
+                    $content = Tools::getPageContent($url);
+                    $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
+                    $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
+
+                    // clean content to prevent xss attack
+
+                    $title = $purifier->purify($title);
+                    $body = $purifier->purify($body);
+                    $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
+                    Tools::logm('Article ' . $item['id'] . ' updated.');
+                }
+            }
         }
-      }
 
-      return array('includeImport'=>true, 'import'=>array('recordsDownloadRequired'=>$recordsDownloadRequired, 'recordsUnderDownload'=> IMPORT_LIMIT, 'delay'=> IMPORT_DELAY * 1000) );
+        return array(
+            'includeImport' => true,
+            'import' => array(
+                'recordsDownloadRequired' => $recordsDownloadRequired,
+                'recordsUnderDownload' => IMPORT_LIMIT,
+                'delay' => IMPORT_DELAY * 1000
+            )
+        );
     }
 
     /**
      * export poche entries in json
      * @return json all poche entries
      */
-    public function export() {
+    public function export()
+    {
       $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json";
       header('Content-Disposition: attachment; filename='.$filename);
 
@@ -688,7 +705,7 @@ class Poche
      * @param  string $which 'prod' or 'dev'
      * @return string        latest $which version
      */
-    private function getPocheVersion($which = 'prod') {
+    private function _getPocheVersion($which = 'prod') {
       $cache_file = CACHE . '/' . $which;
       $check_time = time();
 
@@ -703,29 +720,27 @@ class Poche
       return array($version, $check_time);
     }
 
-    public function generateToken()
+    /**
+     * Update token for current user
+     */
+    public function updateToken()
     {
-      if (ini_get('open_basedir') === '') {
-        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
-          echo 'This is a server using Windows!';
-          // alternative to /dev/urandom for Windows
-          $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
-        } else {
-          $token = substr(base64_encode(file_get_contents('/dev/urandom', false, null, 0, 20)), 0, 15);
-        }
-      }
-      else {
-        $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
-      }
-
-      $token = str_replace('+', '', $token);
-      $this->store->updateUserConfig($this->user->getId(), 'token', $token);
-      $currentConfig = $_SESSION['poche_user']->config;
-      $currentConfig['token'] = $token;
-      $_SESSION['poche_user']->setConfig($currentConfig);
-      Tools::redirect();
+        $token = Tools::generateToken();
+        $this->store->updateUserConfig($this->user->getId(), 'token', $token);
+        $currentConfig = $_SESSION['poche_user']->config;
+        $currentConfig['token'] = $token;
+        $_SESSION['poche_user']->setConfig($currentConfig);
+        Tools::redirect();
     }
 
+    /**
+     * Generate RSS feeds for current user
+     *
+     * @param $token
+     * @param $user_id
+     * @param $tag_id
+     * @param string $type
+     */
     public function generateFeeds($token, $user_id, $tag_id, $type = 'home')
     {
         $allowed_types = array('home', 'fav', 'archive', 'tag');
@@ -738,7 +753,6 @@ class Poche
         if (!in_array($type, $allowed_types) || $token != $config['token']) {
             die(_('Uh, there is a problem while generating feeds.'));
         }
-        // Check the token
 
         $feed = new FeedWriter(RSS2);
         $feed->setTitle('wallabag — ' . $type . ' feed');
@@ -770,147 +784,22 @@ class Poche
         exit;
     }
 
-    public function emptyCache() {
-        $files = new RecursiveIteratorIterator(
-            new RecursiveDirectoryIterator(CACHE, RecursiveDirectoryIterator::SKIP_DOTS),
-            RecursiveIteratorIterator::CHILD_FIRST
-        );
-
-        foreach ($files as $fileinfo) {
-            $todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
-            $todo($fileinfo->getRealPath());
-        }
 
-        Tools::logm('empty cache');
-        $this->messages->add('s', _('Cache deleted.'));
-        Tools::redirect();
-    }
 
     /**
-     * return new purifier object with actual config
+     * Returns new purifier object with actual config
      */
-    protected function getPurifier() {
-      $config = HTMLPurifier_Config::createDefault();
-      $config->set('Cache.SerializerPath', CACHE);
-      $config->set('HTML.SafeIframe', true);
+    private function _getPurifier()
+    {
+        $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/)%');
+        //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);
+        return new HTMLPurifier($config);
     }
 
-    /**
-     * handle epub
-     */
-    public function createEpub() {
-
-        switch ($_GET['method']) {
-            case 'id':
-                $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"
-        . "<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";
-
-        $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()");
-        $log->logLine("EPub class version: " . EPub::VERSION);
-        $log->logLine("EPub Req. Zip version: " . EPub::REQ_ZIP_VERSION);
-        $log->logLine("Zip version: " . Zip::VERSION);
-        $log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
-        $log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
-
-        $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->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().
-        //$book->setRights("Copyright and licence information specific for the book."); // As this is generated, this _could_ contain the name or licence information of the user who purchased the book, if needed. If this is used that way, the identifier must also be made unique for the book.
-        $book->setSourceURL("http://$_SERVER[HTTP_HOST]");
-
-        $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";
-
-        $log->logLine("Add Cover");
 
-        $fullTitle = "<h1> " . $bookTitle . "</h1>\n";
-
-        $book->setCoverImage("Cover.png", file_get_contents("themes/baggy/img/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;
-
-        //$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) {
-                $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']);
-        }
-
-        if (DEBUG_POCHE) {
-            $epuplog = $book->getLog();
-            $book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // log generation
-        }
-        $book->finalize();
-        $zipData = $book->sendBook($bookFileName);
-    }
 }
index 8c2f38e370b5ddca176e0aace9fb0c6570f46595..eb4c4d90073913bba0c334ce4592e5fa6b38f569 100644 (file)
@@ -105,20 +105,21 @@ class Routing
             $this->wallabag->logout();
         } elseif (isset($_GET['config'])) {
             // update password
-            $this->wallabag->updatePassword();
+            $this->wallabag->updatePassword($_POST['password'], $_POST['password_repeat']);
         } elseif (isset($_GET['newuser'])) {
-            $this->wallabag->createNewUser();
+            $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser']);
         } elseif (isset($_GET['deluser'])) {
-            $this->wallabag->deleteUser();
+            $this->wallabag->deleteUser($_POST['password4deletinguser']);
         } elseif (isset($_GET['epub'])) {
-            $this->wallabag->createEpub();
+            $epub = new WallabagEpub($this->wallabag, $_GET['method'], $_GET['id'], $_GET['value']);
+            $epub->run();
         } elseif (isset($_GET['import'])) {
             $import = $this->wallabag->import();
             $tplVars = array_merge($this->vars, $import);
         } elseif (isset($_GET['download'])) {
             Tools::downloadDb();
         } elseif (isset($_GET['empty-cache'])) {
-            $this->wallabag->emptyCache();
+            Tools::emptyCache();
         } elseif (isset($_GET['export'])) {
             $this->wallabag->export();
         } elseif (isset($_GET['updatetheme'])) {
@@ -129,7 +130,7 @@ class Routing
             $this->wallabag->uploadFile();
         } elseif (isset($_GET['feed'])) {
             if (isset($_GET['action']) && $_GET['action'] == 'generate') {
-                $this->wallabag->generateToken();
+                $this->wallabag->updateToken();
             }
             else {
                 $tag_id = (isset($_GET['tag_id']) ? intval($_GET['tag_id']) : 0);
index 0e09ad64a5038b40004e9fe7953caaa723534e30..b686f2ec783037553db3af677606b46a6256c215 100644 (file)
@@ -229,8 +229,7 @@ class Template extends Twig_Environment
 
         $_SESSION['poche_user']->setConfig($currentConfig);
 
-        $this->wallabag->emptyCache();
-
+        Tools::emptyCache();
         Tools::redirect('?view=config');
     }
 }
\ No newline at end of file
index 762e44460b8985afd13cc0d278cf41f4634431d2..63137d765542a8724991c68b3314ceba8f574d0b 100755 (executable)
 
 final class Tools
 {
-    private function __construct()
-    {
-
-    }
-
     /**
      * Initialize PHP environment
      */
@@ -393,4 +388,40 @@ final class Tools
         return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
     }
 
+    /*
+     * Empty cache folder
+     */
+    public static function emptyCache()
+    {
+        $files = new RecursiveIteratorIterator(
+            new RecursiveDirectoryIterator(CACHE, RecursiveDirectoryIterator::SKIP_DOTS),
+            RecursiveIteratorIterator::CHILD_FIRST
+        );
+
+        foreach ($files as $fileInfo) {
+            $todo = ($fileInfo->isDir() ? 'rmdir' : 'unlink');
+            $todo($fileInfo->getRealPath());
+        }
+
+        Tools::logm('empty cache');
+        Tools::redirect();
+    }
+
+    public static function generateToken()
+    {
+        if (ini_get('open_basedir') === '') {
+            if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+                // alternative to /dev/urandom for Windows
+                $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
+            } else {
+                $token = substr(base64_encode(file_get_contents('/dev/urandom', false, null, 0, 20)), 0, 15);
+            }
+        }
+        else {
+            $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
+        }
+
+        return str_replace('+', '', $token);
+    }
+
 }
diff --git a/inc/poche/WallabagEpub.class.php b/inc/poche/WallabagEpub.class.php
new file mode 100644 (file)
index 0000000..b81d9bf
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+/**
+ * wallabag, self hostable application allowing you to not miss any content anymore
+ *
+ * @category   wallabag
+ * @author     Nicolas Lœuillet <nicolas@loeuillet.org>
+ * @copyright  2013
+ * @license    http://opensource.org/licenses/MIT see COPYING file
+ */
+
+class WallabagEpub
+{
+    protected $wallabag;
+    protected $method;
+    protected $id;
+    protected $value;
+
+    public function __construct(Poche $wallabag, $method, $id, $value)
+    {
+        $this->wallabag = $wallabag;
+        $this->method   = $method;
+        $this->id       = $id;
+        $this->value    = $value;
+    }
+
+    /**
+     * handle ePub
+     */
+    public function run()
+    {
+        switch ($this->method) {
+            case 'id':
+                $entryID = filter_var($this->id, 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);
+                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'));
+                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);
+                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);
+                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);
+                break;
+            case 'default':
+                die(_('Uh, there is a problem while generating epub.'));
+        }
+
+        $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"
+            . "<head>"
+            . "<meta http-equiv=\"Default-Style\" content=\"text/html; charset=utf-8\" />\n"
+            . "<title>wallabag articles book</title>\n"
+            . "</head>\n"
+            . "<body>\n";
+
+        $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()");
+        $log->logLine("EPub class version: " . EPub::VERSION);
+        $log->logLine("EPub Req. Zip version: " . EPub::REQ_ZIP_VERSION);
+        $log->logLine("Zip version: " . Zip::VERSION);
+        $log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
+        $log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
+
+        $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->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().
+        //$book->setRights("Copyright and licence information specific for the book."); // As this is generated, this _could_ contain the name or licence information of the user who purchased the book, if needed. If this is used that way, the identifier must also be made unique for the book.
+        $book->setSourceURL("http://$_SERVER[HTTP_HOST]");
+
+        $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";
+
+        $log->logLine("Add Cover");
+
+        $fullTitle = "<h1> " . $bookTitle . "</h1>\n";
+
+        $book->setCoverImage("Cover.png", file_get_contents("themes/baggy/img/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;
+
+        //$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->wallabag->store->retrieveTagsByEntry($entry['id']);
+            foreach ($tags as $tag) {
+                $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']);
+        }
+
+        if (DEBUG_POCHE) {
+            $book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // log generation
+        }
+        $book->finalize();
+        $zipData = $book->sendBook($bookFileName);
+    }
+} 
\ No newline at end of file
index 3eb64df0e13bfcd9c242928deac0815d043b15d6..b8c487e39277e604c684c880e4b03d55d358829e 100755 (executable)
@@ -22,6 +22,7 @@ require_once ROOT . '/vendor/autoload.php';
 require_once INCLUDES . '/poche/Template.class.php';
 require_once INCLUDES . '/poche/Language.class.php';
 require_once INCLUDES . '/poche/Routing.class.php';
+require_once INCLUDES . '/poche/WallabagEpub.class.php';
 require_once INCLUDES . '/poche/Poche.class.php';
 
 require_once INCLUDES . '/poche/Database.class.php';
index 26bf07063af0b7006fc468863fde1712a2197745..7a914f90f8b1a28781c6e8dba84ae24a7d527571 100644 (file)
 
 final class Picture
 {
-    private function __construct()
-    {
-
-    }
-
     /**
      * Changing pictures URL in article content
      */
index 3942d3bf8aef4396db5f0dc4ee1541ce60e48b0e..e788b588f88c2ac681fba1b84c4c3286ef6201df 100755 (executable)
@@ -61,9 +61,9 @@
 
             {% if search_term is defined %}<a title="{% trans %} Apply the tag {{ search_term }} to this search {% endtrans %}" href="./?action=add_tag&search={{ search_term }}">{% trans %} Apply the tag {{ search_term }} to this search {% endtrans %}</a>{% endif %}
             
-            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;tag={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
-            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;search={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
-            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;category={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
+            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
+            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;value={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
+            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;value={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
             
             {% endif %}
 {% endblock %}
index af97407d076f2ad800f5a44ab4049d8792601b66..7b65340a9a36ac4645634be8d7a82f53fc67ee17 100755 (executable)
@@ -16,7 +16,7 @@
                 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
                 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr icon icon-flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span> ({{ flattr.numflattrs }})</a></li>{% endif %}{% endif %}
                 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
-                <li><a href="./?epub&amp;method=id&amp;id={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
+                <li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
                 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans "Does this article appear wrong?" %}" class="tool bad-display icon icon-delete"><span>{% trans "Does this article appear wrong?" %}</span></a></li>
             </ul>
         </div>
index 25479a3d79d8830350ab3823685bdb1766a39253..c5c916c047bf4fba3d589a1f353605182ea64436 100755 (executable)
@@ -12,7 +12,7 @@
                 {% if constant('SHARE_MAIL') == 1 %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email" title="{% trans "email" %}"><span>{% trans "email" %}</span></a></li>{% endif %}
                 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
                 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li class="flattrli"><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span>{{ flattr.numflattrs }}</a></li>{% endif %}{% endif %}
-                <li><a href="./?epub&amp;method=id&amp;id={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
+                <li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
                 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans "this article appears wrong?" %}" class="tool bad-display"><span>{% trans "this article appears wrong?" %}</span></a></li>
             </ul>
         </div>
index 401f3f20d96fc6a074c5e31689c813efdda97ba7..811298eb58f00a0e3a4e0a699494c59e35fcaf2e 100755 (executable)
@@ -53,9 +53,9 @@
             
             {{ block('pager') }}
             
-            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;tag={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
-            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;search={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
-            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;category={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
+            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
+            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;value={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
+            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;value={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
             
             {% endif %}
 
index e6c781f58e53331c56826517f6cc4c689521d201..093c2dc5e20b04076dc767143b89ec1b01c9de6b 100755 (executable)
@@ -60,9 +60,9 @@
             
             {% if view == 'home' %}{% if nb_results > 1 %}<a title="{% trans "mark all the entries as read" %}"  href="./?action=archive_all">{% trans "mark all the entries as read" %}</a>{% endif %}{% endif %}
             
-            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;tag={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
-            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;search={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
-            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;category={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
+            {% if tag %}<a title="{% trans "Download the articles from this tag in an epub" %}" href="./?epub&amp;method=tag&amp;value={{ tag.value }}">{% trans "Download the articles from this tag in an epub" %}</a>
+            {% elseif search_term is defined %}<a title="{% trans "Download the articles from this search in an epub" %}" href="./?epub&amp;method=search&amp;value={{ search_term }}">{% trans "Download the articles from this search in an epub" %}</a>
+            {% else %}<a title="{% trans "Download the articles from this category in an epub" %}" href="./?epub&amp;method=category&amp;value={{ view }}">{% trans "Download the articles from this category in an epub" %}</a>{% endif %}
             
             {% endif %}
 {% endblock %}
index b7d48c00211f153af002668b29379f7a25d50227..90b118394383d05a468d885e5a322a1609258e03 100755 (executable)
@@ -15,7 +15,7 @@
                 {% if constant('SHARE_SHAARLI') == 1 %}<li><a href="{{ constant('SHAARLI_URL') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans "shaarli" %}"><span>{% trans "shaarli" %}</span></a></li>{% endif %}
                 {% if constant('FLATTR') == 1 %}{% if flattr.status == constant('FLATTRABLE') %}<li><a href="http://flattr.com/submit/auto?url={{ entry.url }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span></a></li>{% elseif flattr.status == constant('FLATTRED') %}<li><a href="{{ flattr.flattrItemURL }}" class="tool flattr" target="_blank" title="{% trans "flattr" %}"><span>{% trans "flattr" %}</span>{{ flattr.numflattrs }}</a></li>{% endif %}{% endif %}
                 {% if constant('SHOW_PRINTLINK') == 1 %}<li><a title="{% trans "Print" %}" class="tool print" href="javascript: window.print();"><span>{% trans "Print" %}</span></a></li>{% endif %}
-                <li><a href="./?epub&amp;method=id&amp;id={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
+                <li><a href="./?epub&amp;method=id&amp;value={{ entry.id|e }}" title="Generate epub file">EPUB</a></li>
                 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans "Does this article appear wrong?" %}" class="tool bad-display"><span>{% trans "Does this article appear wrong?" %}</span></a></li>
                 {% if constant('SHOW_READPERCENT') == 1 %}<li><div id="readLeftPercent">0%</div></li>{% endif %}
             </ul>