]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #853 from wallabag/fix-for-#797
authorThomas Citharel <tcit@tcit.fr>
Sat, 4 Oct 2014 15:50:01 +0000 (17:50 +0200)
committerThomas Citharel <tcit@tcit.fr>
Sat, 4 Oct 2014 15:50:01 +0000 (17:50 +0200)
Fix for #797

23 files changed:
TRANSLATION.md
check_setup.php [changed mode: 0644->0755]
inc/3rdparty/site_config/custom/blogs.faz.net.txt [new file with mode: 0644]
inc/3rdparty/site_config/standard/faz.net.txt [changed mode: 0755->0644]
inc/poche/Database.class.php
inc/poche/Poche.class.php
inc/poche/Routing.class.php
inc/poche/Tools.class.php
inc/poche/WallabagEpub.class.php
inc/poche/config.inc.default.php
inc/poche/pochePictures.php
index.php
install/index.php
locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo
locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po
locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
themes/baggy/_pocheit-form.twig
themes/baggy/config.twig
themes/baggy/css/main.css
themes/courgette/config.twig
themes/default/config.twig
wallabag_compatibility_test.php

index 2e38d5ccbd44c9ffbc3978153c05a8869f92b918..a033662c47134cfdb4ba622c54ffdd18e363a22c 100755 (executable)
@@ -1,10 +1,10 @@
-# How to manage translations of wallabag
+# How to manage translations for wallabag
 
-This guide will describe procedure of translation management of wallabag web application.
+This guide will describe the procedure of translation management of the wallabag web application.
 
-All translation are made using [gettext](http://en.wikipedia.org/wiki/Gettext) system and tools. 
+All translations are made using [gettext](http://en.wikipedia.org/wiki/Gettext) system and tools. 
 
-You will need [Poedit](http://www.poedit.net/download.php) editor to update, edit and create your translation files comfortably. In general, you can handle translations also without it: all can be done using gettext tools and your favorite plain text editor only. This guide, however, describes editing with Poedit. If you want to use gettext only, pls refer to xgettext manual page to update po files from sources (see also how it is used by Poedit below) and use msgunfmt tool to compile .mo files manually.  
+You will need the [Poedit](http://www.poedit.net/download.php) editor to update, edit and create your translation files easily. However, you can also handle translations also without it: all can be done using gettext tools and your favorite plain text editor only. This guide, however, describes editing with Poedit. If you want to use gettext only, please refer to the xgettext manual page to update po files from sources (see also how it is used by Poedit below) and use msgunfmt tool to compile .mo files manually.  
 
 You need to know, that translation phrases are stored in **".po"** files (for example: `locale/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po`), which are then complied in **".mo"** files using **msgfmt** gettext tool or by Poedit, which will run msgfmt for you in background. 
 
@@ -22,7 +22,7 @@ go to root of your installation of wallabag project and run next command:
 
 `rm -rf ./cache/*`
 
-(this may require root privileges if you run, for example Apatche web server with mod_php)
+(this may require root privileges if you run, for example Apache web server with mod_php)
 
 ### 2. Generate php files from all twig templates
 Do this using next command:
@@ -31,37 +31,37 @@ Do this using next command:
 
 OR
 
-from your browser: **http://your-wallabag-host.com/locale/tools/fillCache.php** (this may require removal of .htacces file in locale/ directory).
+from your browser: **http://your-wallabag-host.com/locale/tools/fillCache.php** (this may require removal of .htaccess file in locale/ directory).
 
 ### 3. Configure your Poedit
 Open Poedit editor, open Edit->Preferences. Go to "Parsers" tab, click on PHP and press "Edit" button. Make sure your "Parser command:" looks like
 
 `xgettext --no-location --force-po -o %o %C %K %F`
 
-Usualy it is required to add "--no-location" to default value. 
+Usually it is required to add "--no-location" to default value. 
 
-### 4. Open .po file you want to edit in Poedit and change it's settings
+### 4. Open .po file you want to edit in Poedit and change its settings
 Open, for example `locale/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po` file in your Poedit.
 
-Go to "Catalog"->"Settings..." menu. Go to "Path" tab and add path to wallabag installaion in your local file system. This step can't be ommited as you will not be able to update phrases otherwise.
+Go to "Catalog"->"Settings..." menu. Then go to "Path" tab and add path to wallabag installation in your local file system. This step can't be omitted as you will not be able to update phrases otherwise.
 
 You can also check "project into" tab to be sure, that "Language" is set correctly (this will allow you to spell check your translation).
 
 ### 5. Update opened .po file from sources
 Once you have set your path correctly, you are able to update phrases from sources. Press "Update catalog - synchronize it with sources" button or go to "Catalog"->"Update from sources" menu.
 
-As a result you will see confirmation popup with two tabs: "New strings" and "Obsolete strings". Pls review and accept changes (or press "Undo" if you see too many obsolete strings, as Poedit will remove them all - in this case please make sure all previous steps are performed w/o errors).
+As a result you will see confirmation popup with two tabs: "New strings" and "Obsolete strings". Please review and accept changes (or press "Undo" if you see too many obsolete strings, as Poedit will remove them all - in this case please make sure all previous steps are performed w/o errors).
 
 ### 6. Translate and save your .po file
-If you have any dificulties on this step, please consult with Poedit manual.
-Every time you save your .po file, Poedit will also comple appropriate .mo file by default (of course, if not disabled in preferences).
+If you have any difficulties on this step, please consult with Poedit manual.
+Every time you save your .po file, Poedit will also compile appropriate .mo file by default (of course, if not disabled in preferences).
 
-So, you are almost done.
+You are now almost done.
 
 ### 7. Clear cache again
 This step may be required if your web server runs php scripts in name of, say, www user (i.e. Apache with mod_php, not cgi).
 
 
-##To create new translation 
-Please simple create appropriate directories in locale folder and perform all steps, described above. Instead of opening an existing file just create new one.
+##To create new translation
+You just have to copy the folder corresponding to the language you want to translate from, change language in the project settings and for the folder and files names. Then start replacing all existing translations with your own.
 
old mode 100644 (file)
new mode 100755 (executable)
index 7e378b1..cf02c34
@@ -5,11 +5,6 @@ if (! is_writable('cache')) {
     die('The directory "cache" must be writeable by your web server user');
 }
 
-// Check if /db is writeable
-if (! is_writable('db') && STORAGE === 'sqlite') {
-    die('The directory "db" must be writeable by your web server user');
-}
-
 // install folder still present, need to install wallabag
 if (is_dir('install')) {
     require('install/index.php');
diff --git a/inc/3rdparty/site_config/custom/blogs.faz.net.txt b/inc/3rdparty/site_config/custom/blogs.faz.net.txt
new file mode 100644 (file)
index 0000000..4f2626f
--- /dev/null
@@ -0,0 +1,45 @@
+# Author: zinnober
+
+tidy: no
+prune: no
+
+# Set author
+author: //a[@rel='author']
+
+# Set date
+date: //span[@class='Datum']
+
+# Content is here
+body: //div[@class='Artikel']
+
+# Tidy up before article
+strip: //div[@id='FAZHeaderNeu']
+strip: //h2[@itemprop='headline']
+strip: //span[@class='Datum']
+strip: //span[@class='Autor']
+strip_id_or_class: ArticlePagerTop
+strip: //div[@class='FAZArtikelEinleitung']/h2
+
+# General cleanup
+strip: //div[@class='clear']
+strip: //span[@class='Bildnachweis']
+strip: //iframe
+strip_id_or_class: Community
+strip: ' ·  '
+
+# Remove tracking and ads
+strip_image_src: /l.gif?
+strip: //img[@width='1']
+strip_id_or_class: invisible
+strip_id_or_class: Anzeige
+strip_id_or_class: billboard
+
+# Remove clutter after article
+strip_id_or_class: Tagline
+strip_id_or_class: ArtikelAbbinder
+strip_id_or_class: FAZArtikelKommentare
+strip_id_or_class: ArtikelKommentieren
+strip_id_or_class: FAZContentRight
+
+# Try it yourself
+test_url: http://blogs.faz.net/wost/2014/08/17/viel-fuck-und-wenig-guter-sex-1239/
old mode 100755 (executable)
new mode 100644 (file)
index d087d2a..47048a1
+# Author: zinnober
+# Complete rewrite of the faz.net template as the standard one is broken
+# I tried to consider as many page variants as possible, which was some serious work
+
+tidy: no
+prune: no
+
 # Title
 title: //p[@class='Content HeadlineShort']
 
-# Authors
-# some are known and have a link, others don't
-author: substring-after(//span[@class='Autor'], 'Von')
+# Set author
+author: substring-after(//span[@class='Autor'], 'von ')
+author: //span[@class='caps last']/span[@class='caps last']
+author: //a[@rel='author']
 
-# Date
+# Set date
 date: //span[@class='Datum']
+date: //span[@class='Datum'],/span
+
+# Fetch full multipage articles
+next_page_link: //a[@title='Nächste Seite']
 
-# Body
+# Content is here
 body: //div[@class='Artikel']
 
-# Removements before body text
-strip: //div[@class='Breadcrumbs']
-strip: //div[@class='QuickSearchBox']
-strip: //div[@class='FAZArtikelEinleitung']
-strip: //div[@class='FAZArtikelReiter']
+# Tidy up before article
+strip: //div[@id='FAZHeaderNeu']
+strip: //h2[@itemprop='headline']
+strip: //span[@class='Datum']
+strip: //span[@class='Autor']
+strip_id_or_class: ArticlePagerTop
+
+# General cleanup
 strip: //div[@class='clear']
+strip: //a[@title='Zur Homepage FAZ.NET']
+strip: //iframe
+replace_string( ·  ):
+
+# Remove tracking and ads
+strip_image_src: /l.gif?
+strip: //div[contains(@style, 'background-image')]
+strip: //img[@width='1']
+strip_id_or_class: invisible
+strip_id_or_class: Anzeige
+strip_id_or_class: billboard
+
+# Remove various text boxes and social media foo
+strip_id_or_class: WeitereBeitraege
+strip_id_or_class: WBListe
+strip_id_or_class: AutorenModul
+strip_id_or_class: Community
+strip_id_or_class: SocialMediaStatus
+strip_id_or_class: RelatedLinkBox
+strip_id_or_class: MultimediaNavigation
+strip_id_or_class: IndexTitel
+
+# Fix picture caps and pictures (use better resolution and remove clutter)
+strip_id_or_class: LightBoxOverlay
+strip_id_or_class: exitLarge
+strip_id_or_class: PagerBox
+strip_id_or_class: Bildnachweis
+strip_id_or_class: Bildueberschrift
+strip_id_or_class: Bildbeschreibung
+strip_id_or_class: ArtikelBild610
+strip_id_or_class: MediaLink
+strip_id_or_class: FotoBoxInnerLeft
+strip_id_or_class: BilderRelatedLinks
+
+# Remove clutter after article
+strip_id_or_class: ArticlePagerBottom
+strip_id_or_class: backToHome
+strip_id_or_class: ArtikelAbbinder
+strip_id_or_class: lesermeinungscontainer
+strip_id_or_class: ThemenLinks
+strip_id_or_class: rechtehinweis
+strip_id_or_class: FAZArtikelMap
+strip_id_or_class: FAZArtikelKommentare
+strip_id_or_class: ArtikelKommentieren
+strip_id_or_class: FAZArtikelFunktionen
+strip_id_or_class: mailLB
+strip_id_or_class: FAZContentRight
+strip_id_or_class: stageModule
+strip_id_or_class: ContentFooter
+strip_id_or_class: ServicesFooter
+strip_id_or_class: FAZFooter
+
+# Clean up stuff present just in some articles
+strip_id_or_class: Teaser620
+strip_id_or_class: TeaserMultimedia
+strip_id_or_class: VideoBox
+
+# Remove as soon as Wallabag maight be able to embed flash video
+strip_id_or_class: mmoObjectAsTeaserInArticle
+strip_id_or_class: additionalStylesAudioVideo
+strip_id_or_class: hideMMElements
+
+# Try it yourself
+test_url: http://www.faz.net/aktuell/feuilleton/zum-tod-von-margaret-thatcher-die-reizfigur-12141919.html#Drucken
+test_url: http://www.faz.net/aktuell/politik/inland/allensbach-analyse-im-namen-des-volkes-13106492.html
+test_url: http://www.faz.net/aktuell/feuilleton/kino/video-filmkritiken/video-filmkritik-when-animals-dream-zerrissene-jugend-13105772.html
 
-# General removements
-strip: //span[@class='Bildnachweis']
-strip: //img[@class='MediaIcon']
-strip: //div[@class='ArtikelMediaLink']
-dissolve: //a[img]
-
-# Removements after body text
-strip: //div[@class='ArtikelAbbinder']
-strip: //div[@class='ArtikelKommentieren Artikelfuss GETS;tk;boxen.top-lesermeinungen;tp;content']
-strip: //div[@class='FAZArtikelKommentare FAZArtikelContent']
-strip: //div[@class='FAZArtikelFunktionen']
-strip: //div[@id='FAZContentRight']
-
-# Fix picture captions
-wrap_in(small): //span[@class='Bildunterschrift']/text()
-test_url: http://www.faz.net/aktuell/feuilleton/zum-tod-von-margaret-thatcher-die-reizfigur-12141919.html#Drucken
\ No newline at end of file
index 2c80b64b5dff24687777be87754134057be01091..b5dd21203a9a667872303bc71a0b97498f862769 100755 (executable)
@@ -23,6 +23,10 @@ class Database {
     {
         switch (STORAGE) {
             case 'sqlite':
+                // Check if /db is writeable
+                if ( !is_writable(STORAGE_SQLITE) || !is_writable(dirname(STORAGE_SQLITE))) {\r
+                       die('An error occured: "db" directory must be writeable for your web server user!');
+                }
                 $db_path = 'sqlite:' . STORAGE_SQLITE;
                 $this->handle = new PDO($db_path);
                 break;
@@ -113,10 +117,10 @@ class Database {
         $query = $this->executeQuery($sql, array());
     }
 
-    public function install($login, $password)
+    public function install($login, $password, $email = '')
     {
         $sql = 'INSERT INTO users ( username, password, name, email) VALUES (?, ?, ?, ?)';
-        $params = array($login, $password, $login, ' ');
+        $params = array($login, $password, $login, $email);
         $query = $this->executeQuery($sql, $params);
 
         $sequence = '';
index 098dd7c19c16b6f1891157c32a7639ac0b10e1f1..8cebafa31af026de49c59c3db8ccf6954bc4419f 100755 (executable)
@@ -74,12 +74,13 @@ class Poche
     /**
      * Creates a new user
      */
-    public function createNewUser($username, $password)
+    public function createNewUser($username, $password, $email = "")
     {
         if (!empty($username) && !empty($password)){
             $newUsername = filter_var($username, FILTER_SANITIZE_STRING);
+            $email = filter_var($email, FILTER_SANITIZE_STRING);
             if (!$this->store->userExists($newUsername)){
-                if ($this->store->install($newUsername, Tools::encodeString($password . $newUsername))) {
+                if ($this->store->install($newUsername, Tools::encodeString($password . $newUsername), $email)) {
                     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();
@@ -524,6 +525,14 @@ class Poche
                 $longlastingsession = isset($_POST['longlastingsession']);
                 $passwordTest = ($isauthenticated) ? $user['password'] : Tools::encodeString($password . $login);
                 Session::login($user['username'], $user['password'], $login, $passwordTest, $longlastingsession, array('poche_user' => new User($user)));
+
+                # reload l10n
+                $language = $user['config']['language'];
+                @putenv('LC_ALL=' . $language);
+                setlocale(LC_ALL, $language);
+                bindtextdomain($language, LOCALE);
+                textdomain($language);
+
                 $this->messages->add('s', _('welcome to your wallabag'));
                 Tools::logm('login successful');
                 Tools::redirect($referer);
@@ -551,42 +560,39 @@ class 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']) && $_FILES['file']['tmp_name'] ) {
+        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
 
@@ -629,9 +635,11 @@ class Poche
                 $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).');
+      }
+      else {
+        $this->messages->add('s', _('Did you forget to select a file?'));
+      }
         // file parsing finished here
         // now download article contents if any
         // check if we need to download any content
index 004bd45a928f56215acd0ab8837b8c57dbb6853e..0b373058029777acc582736faffddaeaa46e6cf8 100755 (executable)
@@ -124,8 +124,6 @@ class Routing
             } 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'])) {
                 Tools::emptyCache();
             } elseif (isset($_GET['export'])) {
index 63137d765542a8724991c68b3314ceba8f574d0b..93ec3fc6a877bf93f00e7c0dfadfd2cdf2b412d8 100755 (executable)
@@ -54,6 +54,10 @@ final class Tools
             || ($https && $_SERVER["SERVER_PORT"] == '443')
             || ($https && $_SERVER["SERVER_PORT"]==SSL_PORT) //Custom HTTPS port detection
             ? '' : ':' . $_SERVER["SERVER_PORT"]);
+        
+        if (isset($_SERVER["HTTP_X_FORWARDED_PORT"])) {
+            $serverport = ':' . $_SERVER["HTTP_X_FORWARDED_PORT"];
+        }
 
         $scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]);
 
@@ -294,21 +298,6 @@ final class Tools
         }
     }
 
-    /**
-     * Download the sqlite database
-     */
-    public static function downloadDb()
-    {
-        header('Content-Disposition: attachment; filename="poche.sqlite.gz"');
-        self::_status(200);
-
-        header('Content-Transfer-Encoding: binary');
-        header('Content-Type: application/octet-stream');
-        echo gzencode(file_get_contents(STORAGE_SQLITE));
-
-        exit;
-    }
-
     /**
      * Get the content for a given URL (by a call to FullTextFeed)
      *
index b81d9bfd248b6eed8098f8a983c040f9eb2206da..9c4d3566d558fdcc7207f6b20720e4ef1a66ee7f 100644 (file)
@@ -12,14 +12,12 @@ class WallabagEpub
 {
     protected $wallabag;
     protected $method;
-    protected $id;
     protected $value;
 
-    public function __construct(Poche $wallabag, $method, $id, $value)
+    public function __construct(Poche $wallabag, $method, $value)
     {
         $this->wallabag = $wallabag;
         $this->method   = $method;
-        $this->id       = $id;
         $this->value    = $value;
     }
 
@@ -30,7 +28,7 @@ class WallabagEpub
     {
         switch ($this->method) {
             case 'id':
-                $entryID = filter_var($this->id, FILTER_SANITIZE_NUMBER_INT);
+                $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'];
@@ -87,7 +85,7 @@ class WallabagEpub
         $log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
         $log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
 
-        $book->setTitle(_('wallabag\'s articles'));
+        $book->setTitle($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"));
index 6f03af188dd2ea2d4aac53296c9d77a278f10a42..2a458544f0fd49b09a4b4f4bb873486db5e3216b 100755 (executable)
@@ -59,7 +59,7 @@
 @define ('LOCALE', ROOT . '/locale');
 @define ('CACHE', ROOT . '/cache');
 
-@define ('PAGINATION', '10');
+@define ('PAGINATION', '12');
 
 //limit for download of articles during import
 @define ('IMPORT_LIMIT', 5);
index 7a914f90f8b1a28781c6e8dba84ae24a7d527571..52394c703b1130fb73bbd9aa8807f17b89a574a0 100644 (file)
@@ -33,7 +33,7 @@ final class Picture
                 }
 
                 if (self::_downloadPictures($absolute_path, $fullpath) === true) {
-                    $content = str_replace($matches[$i][2], $fullpath, $content);
+                    $content = str_replace($matches[$i][2], Tools::getPocheUrl() . $fullpath, $content);
                 }
 
                 $processing_pictures[] = $absolute_path;
index f191d7e7157f4822a5749685509e499c15f45a68..39990d55a7c59292f1a7ba78caa5dcbc146189e3 100755 (executable)
--- a/index.php
+++ b/index.php
@@ -10,8 +10,8 @@
 
 define ('POCHE', '1.8.0');
 require 'check_essentials.php';
-require_once 'inc/poche/global.inc.php';
 require 'check_setup.php';
+require_once 'inc/poche/global.inc.php';
 
 // Start session
 Session::$sessionName = 'wallabag';
index 1ae782a2bc8656d68e4e61871e3e0e3075945f53..e3965e9793ed5bc77e9009777cb704021406dd0f 100755 (executable)
@@ -141,16 +141,16 @@ else if (isset($_POST['install'])) {
                 }
 
                 // create database structure
-                $query = executeQuery($handle, $sql_structure, array());
+                $query = $handle->exec($sql_structure);
 
                 // Create user
                 $handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
-                $sql = 'INSERT INTO users (username, password, name) VALUES (?, ?, ?)';
+                $sql = "INSERT INTO users (username, password, name, email) VALUES (?, ?, ?, '')";
                 $params = array($username, $salted_password, $username);
                 $query = executeQuery($handle, $sql, $params);
 
-                $id_user = $handle->lastInsertId();
+                $id_user = (int)$handle->lastInsertId('users_id_seq');
 
                 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
                 $params = array($id_user, 'pager', '10');
@@ -292,9 +292,11 @@ php composer.phar install</code></pre></li>
                     <p>
                         <label for="password">Password</label>
                         <input type="password" required id="password" name="password" value="wallabag" />
+                        <label for="show">Show password:</label> <input style="margin-left:-80px;" name="show" id="show" type="checkbox" onchange="document.getElementById('password').type = this.checked ? 'text' : 'password'">
                     </p>
                     <p>
-                        <label for="show">Show password:</label> <input name="show" id="show" type="checkbox" onchange="document.getElementById('password').type = this.checked ? 'text' : 'password'">
+                        <label for="email">Email (not required)</label>
+                        <input type="email" id="email" name="email" />
                     </p>
                 </fieldset>
 
index bf5f69e7286a149f8f2646d2fba934698e3d5ce3..1f729b60dcb1f67c1a00d55ceb85fbbb6b9ef378 100644 (file)
Binary files a/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo and b/locale/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo differ
index 119fb0601819b1ebfc93521760eee9f1ab73cab6..8292a196e8b5c08af3a2422998172801c2d8dcef 100644 (file)
@@ -4,16 +4,14 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-02-25 15:17+0300\n"
 "PO-Revision-Date: \n"
-"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
+"Last-Translator: tcit <tcit@tcit.fr>\n"
 "Language-Team: \n"
-"Language: \n"
+"Language: en\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.4\n"
-"X-Poedit-Language: English\n"
+"X-Generator: Poedit 1.6.4\n"
 "X-Poedit-Basepath: .\n"
-"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
 
 msgid "wallabag, a read it later open source system"
 msgstr "wallabag, a read it later open source system"
@@ -84,8 +82,12 @@ msgstr "A more recent development version is available."
 msgid "Feeds"
 msgstr "Feeds"
 
-msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
-msgstr "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
+msgid ""
+"Your feed token is currently empty and must first be generated to enable "
+"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
+msgstr ""
+"Your feed token is currently empty and must first be generated to enable "
+"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
 
 msgid "Unread feed"
 msgstr "Unread feed"
@@ -102,8 +104,12 @@ msgstr "Your token:"
 msgid "Your user id:"
 msgstr "Your user id:"
 
-msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
-msgstr "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
+msgid ""
+"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
+"</a>."
+msgstr ""
+"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
+"</a>."
 
 msgid "Change your theme"
 msgstr "Change your theme"
@@ -135,8 +141,10 @@ msgstr "Repeat your new password:"
 msgid "Import"
 msgstr "Import"
 
-msgid "Please execute the import script locally as it can take a very long time."
-msgstr "Please execute the import script locally as it can take a very long time."
+msgid ""
+"Please execute the import script locally as it can take a very long time."
+msgstr ""
+"Please execute the import script locally as it can take a very long time."
 
 msgid "More info in the official documentation:"
 msgstr "More info in the official documentation:"
@@ -184,8 +192,12 @@ msgstr "return to article"
 msgid "plop"
 msgstr "plop"
 
-msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
-msgstr "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
+msgid ""
+"You can <a href='wallabag_compatibility_test.php'>check your configuration "
+"here</a>."
+msgstr ""
+"You can <a href='wallabag_compatibility_test.php'>check your configuration "
+"here</a>."
 
 msgid "favoris"
 msgstr "favoris"
@@ -247,8 +259,14 @@ msgstr "installation"
 msgid "install your wallabag"
 msgstr "install your wallabag"
 
-msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
-msgstr "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
+msgid ""
+"wallabag is still not installed. Please fill the below form to install it. "
+"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
+"on wallabag website</a>."
+msgstr ""
+"wallabag is still not installed. Please fill the below form to install it. "
+"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
+"on wallabag website</a>."
 
 msgid "Login"
 msgstr "Login"
@@ -401,7 +419,8 @@ msgid "a more recent development version is available."
 msgstr "a more recent development version is available."
 
 msgid "Please execute the import script locally, it can take a very long time."
-msgstr "Please execute the import script locally, it can take a very long time."
+msgstr ""
+"Please execute the import script locally, it can take a very long time."
 
 msgid "More infos in the official doc:"
 msgstr "More infos in the official doc:"
@@ -448,8 +467,12 @@ msgstr "in demo mode, you can't update your password"
 msgid "your password has been updated"
 msgstr "your password has been updated"
 
-msgid "the two fields have to be filled & the password must be the same in the two fields"
-msgstr "the two fields have to be filled & the password must be the same in the two fields"
+msgid ""
+"the two fields have to be filled & the password must be the same in the two "
+"fields"
+msgstr ""
+"the two fields have to be filled & the password must be the same in the two "
+"fields"
 
 msgid "still using the \""
 msgstr "still using the \""
@@ -505,6 +528,46 @@ msgstr "Cache deleted."
 msgid "Oops, it seems you don't have PHP 5."
 msgstr "Oops, it seems you don't have PHP 5."
 
+msgid "Add user"
+msgstr "Add user"
+
+msgid "Add a new user :"
+msgstr "Add a new user :"
+
+msgid "Login for new user"
+msgstr "Login for new user"
+
+msgid "Password for new user"
+msgstr "Password for new user"
+
+msgid "Email for new user (not required)"
+msgstr "Email for new user (not required)"
+
+msgid "Send"
+msgstr "Send"
+
+msgid "Delete account"
+msgstr "Delete account"
+
+msgid "You can delete your account by entering your password and validating."
+msgstr "You can delete your account by entering your password and validating."
+
+msgid "Be careful, data will be erased forever (that is a very long time)."
+msgstr "Be careful, data will be erased forever (that is a very long time)."
+
+msgid "Type here your password"
+msgstr "Type here your password"
+
+msgid "You are the only user, you cannot delete your own account."
+msgstr "You are the only user, you cannot delete your own account."
+
+msgid ""
+"To completely remove wallabag, delete the wallabag folder on your web server "
+"(and eventual databases)."
+msgstr ""
+"To completely remove wallabag, delete the wallabag folder on your web server "
+"(and eventual databases)."
+
 #~ msgid "poche it!"
 #~ msgstr "poche it!"
 
index b625e346c7ea82c3760705371100a4d25a5d10ac..d0f04615734e8a49cde94c00774842b22a5644b8 100644 (file)
Binary files a/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo and b/locale/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo differ
index 0343bfec63fe6e54b6758f0591bcad57462362d3..e4e2ce56a2f0b23d482e774fa6aeb7ac58ab13c4 100644 (file)
@@ -4,7 +4,7 @@ msgstr ""
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-05-10 20:09+0100\n"
 "PO-Revision-Date: \n"
-"Last-Translator: Gilles Wittezaële <gilles.wittezaele@laposte.net>\n"
+"Last-Translator: tcit <tcit@tcit.fr>\n"
 "Language-Team: \n"
 "Language: fr_FR\n"
 "MIME-Version: 1.0\n"
@@ -12,7 +12,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
 "X-Poedit-SourceCharset: UTF-8\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.6.4\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 msgid "wallabag, a read it later open source system"
@@ -298,6 +298,9 @@ msgstr "Nom d'utilisateur"
 msgid "Password for new user"
 msgstr "Mot de passe du nouvel utilisateur"
 
+msgid "Email for new user (not required)"
+msgstr "E-mail pour le nouvel utilisateur (facultatif)"
+
 msgid "Send"
 msgstr "Envoyer"
 
@@ -320,10 +323,12 @@ msgstr ""
 "Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte."
 
 msgid ""
-"To completely remove wallabag, delete the wallabag folder on your web server."
+"To completely remove wallabag, delete the wallabag folder on your web server "
+"(and eventual databases)."
 msgstr ""
 "Pour désinstaller complètement wallabag, supprimez le répertoire "
-"<code>wallabag</code> de votre serveur Web."
+"<code>wallabag</code> de votre serveur Web (ainsi que les bases de données "
+"éventuelles)."
 
 msgid "Save a link"
 msgstr "Ajouter un lien"
index 505ec368e30754fe71858d8a8fdf0bb3161b56de..57a928c0b4c2a135b5bc0e716ecdc1dcb9501d89 100755 (executable)
@@ -4,7 +4,7 @@
         {% trans "Save a link" %}</h2>
         <input type="hidden" name="autoclose" value="1" />
         <input required placeholder="example.com/article" class="addurl" id="plainurl" name="plainurl" type="url" />
+        <span id="add-link-result"></span>
         <input type="submit" value="{% trans "save link!" %}" />
-        <div id="add-link-result"></div>
     </form>
 </div>
index 46735f0744d1e45816df071a4e5a92b9588eb739..3523cd0847365c2cd8945a1653883a25ffcd3b22 100755 (executable)
                 <fieldset class="w500p">
                     <div class="row">
                         <label class="col w150p" for="file">{% trans "File:" %}</label>
-                        <input class="col" type="file" id="file" name="file" tabindex="4">
+                        <input class="col" type="file" id="file" name="file" tabindex="4" required="required">
                     </div>
                     <div class="row mts txtcenter">
                         <button class="bouton" type="submit" tabindex="4">{% trans "Import" %}</button>
             <p><a href="?import">{% trans "You can click here to fetch content for articles with no content." %}</a></p>
             
             <h2>{% trans "Export your wallabag data" %}</h2>
-            {% if constant('STORAGE') == 'sqlite' %}
-            <p><a href="?download" target="_blank">{% trans "Click here" %}</a> {% trans "to download your database." %}</p>{% endif %}
             <p><a href="?export" target="_blank">{% trans "Click here" %}</a> {% trans "to export your wallabag data." %}</p>
             
             <h2>{% trans "Fancy an E-Book ?" %}</h2>
                 <fieldset class="w500p">
                 <div class="row">
                     <label class="col w150p" for="newusername">{% trans 'Login for new user' %}</label>
-                    <input class="col" type="text" id="newusername" name="newusername" placeholder="{% trans 'Login' %}">
+                    <input class="col" type="text" id="newusername" name="newusername" placeholder="{% trans 'Login' %}" required>
                 </div>
                 <div class="row">
                     <label class="col w150p" for="password4newuser">{% trans "Password for new user" %}</label>
-                    <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans "Password" %}">
+                    <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans 'Password' %}" required>
+                </div>
+                <div class="row">
+                    <label class="col w150p" for="newuseremail">{% trans 'Email for new user (not required)' %}</label>
+                    <input class="col" type="email" id="newuseremail" name="newuseremail" placeholder="{% trans 'Email' %}">
                 </div>
                 <div class="row mts txtcenter">
                     <button type="submit">{% trans "Send" %}</button>  
             </div>
             </form>
             {% else %}<p>{% trans "You are the only user, you cannot delete your own account." %}<br />
-            {% trans "To completely remove wallabag, delete the wallabag folder on your web server." %}</p>{% endif %}
+            {% trans "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." %}</p>{% endif %}
 {% endblock %}
index f8238744928be9f1c15d48d8178174bf19228074..b775a2916251ae40edbc21f6a7d8de654519d7dc 100755 (executable)
@@ -89,7 +89,7 @@ form fieldset {
   margin: 0;
 }
 
-form input[type="text"], select, form input[type="password"], form input[type="url"] {
+form input[type="text"], select, form input[type="password"], form input[type="url"], form input[type="email"] {
   border: 1px solid #999;
   padding: 0.5em 1em;
   min-width: 12em;
@@ -630,7 +630,7 @@ a.add-to-wallabag-link-after:after {
 
 #add-link-result {
   font-weight: bold;
-  margin-top: 10px;
+  font-size: 0.9em;
 }
 
 /* ==========================================================================
index 9ab58461abe2dadd38722e7fe782e1904376f8ad..c49337942adf78d6de75cb69e94aa6d51e9dae96 100755 (executable)
                     <label class="col w150p" for="password4newuser">{% trans "Password for new user" %}</label>
                     <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans "Password" %}">
                 </div>
+                <div class="row">
+                    <label class="col w150p" for="newuseremail">{% trans 'Email for new user (not required)' %}</label>
+                    <input class="col" type="email" id="newuseremail" name="newuseremail" placeholder="{% trans 'Email' %}">
+                </div>
                 <div class="row mts txtcenter">
                     <button type="submit">{% trans "Send" %}</button>  
                 </div>
             </div>
             </form>
             {% else %}<p>{% trans "You are the only user, you cannot delete your own account." %}<br />
-            {% trans "To completely remove wallabag, delete the wallabag folder on your web server." %}</p>{% endif %}
+            {% trans "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." %}</p>{% endif %}
         </div>
 {% endblock %}
index 160f6046a46426f5590603bfd2ddb0d5de1f42d3..c639ba9c61b3ab97c66ec6fb86d39b08bfb0ed65 100755 (executable)
                 <fieldset class="w500p">
                     <div class="row">
                         <label class="col w150p" for="file">{% trans "File:" %}</label>
-                        <input class="col" type="file" id="file" name="file" tabindex="4">
+                        <input class="col" type="file" id="file" name="file" tabindex="4" required="required">
                     </div>
                     <div class="row mts txtcenter">
                         <button class="bouton" type="submit" tabindex="4">{% trans "Import" %}</button>
 
             <h2>{% trans "Export your wallabag data" %}</h2>
             {% if constant('STORAGE') == 'sqlite' %}
-            <p><a href="?download" target="_blank">{% trans "Click here" %}</a> {% trans "to download your database." %}</p>{% endif %}
             <p><a href="?export" target="_blank">{% trans "Click here" %}</a> {% trans "to export your wallabag data." %}</p>
 
             <h2>{% trans "Cache" %}</h2>
                     <label class="col w150p" for="password4newuser">{% trans "Password for new user" %}</label>
                     <input class="col" type="password" id="password4newuser" name="password4newuser" placeholder="{% trans "Password" %}">
                 </div>
+                <div class="row">
+                    <label class="col w150p" for="newuseremail">{% trans 'Email for new user (not required)' %}</label>
+                    <input class="col" type="email" id="newuseremail" name="newuseremail" placeholder="{% trans 'Email' %}">
+                </div>
                 <div class="row mts txtcenter">
                     <button type="submit">{% trans "Send" %}</button>  
                 </div>
             </div>
             </form>
             {% else %}<p>{% trans "You are the only user, you cannot delete your own account." %}<br />
-            {% trans "To completely remove wallabag, delete the wallabag folder on your web server." %}</p>{% endif %}
+            {% trans "To completely remove wallabag, delete the wallabag folder on your web server (and eventual databases)." %}</p>{% endif %}
 {% endblock %}
index da0786234291c8ba789609c3a53e0937fa0a547d..3f9ff59f92d3937b576fcc25213941c46b80d37e 100644 (file)
@@ -14,6 +14,7 @@ $php_ok = (function_exists('version_compare') && version_compare(phpversion(), '
 $pcre_ok = extension_loaded('pcre');
 $zlib_ok = extension_loaded('zlib');
 $mbstring_ok = extension_loaded('mbstring');
+$dom_ok = extension_loaded('DOM');
 $iconv_ok = extension_loaded('iconv');
 $tidy_ok = function_exists('tidy_parse_string');
 $curl_ok = function_exists('curl_exec');
@@ -22,6 +23,8 @@ $parallel_ok = ((extension_loaded('http') && class_exists('HttpRequestPool')) ||
 $allow_url_fopen_ok = (bool)ini_get('allow_url_fopen');
 $filter_ok = extension_loaded('filter');
 $gettext_ok = function_exists("gettext");
+$gd_ok = extension_loaded('gd');
+
 
 if (extension_loaded('xmlreader')) {
        $xml_ok = true;
@@ -232,10 +235,20 @@ if (isset($_GET['from'])){
                                                <td>Enabled</td>
                                                <?php echo ($iconv_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
                                        </tr> -->
+                                       <tr class="<?php echo ($dom_ok) ? 'enabled' : 'disabled'; ?>">
+                                               <td><a href="http://php.net/manual/en/book.dom.php">DOM / XML extension</a></td>
+                                               <td>Enabled</td>
+                                               <?php echo ($dom_ok) ? '<td class="good">Enabled' : '<td class="bad">Disabled'; ?></td>
+                                       </tr>
                                        <tr class="<?php echo ($filter_ok) ? 'enabled' : 'disabled'; ?>">
                                                <td><a href="http://uk.php.net/manual/en/book.filter.php">Data filtering</a></td>
                                                <td>Enabled</td>
                                                <?php echo ($filter_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
+                                       </tr>
+                                       <tr class="<?php echo ($gd_ok) ? 'enabled' : 'disabled'; ?>">
+                                               <td><a href="http://php.net/manual/en/book.image.php">GD</a></td>
+                                               <td>Enabled</td>
+                                               <?php echo ($gd_ok) ? '<td class="good">Enabled' : '<td class="pass">Disabled'; ?></td>
                                        </tr>                                   
                                        <tr class="<?php echo ($tidy_ok) ? 'enabled' : 'disabled'; ?>">
                                                <td><a href="http://php.net/tidy">Tidy</a></td>
@@ -275,7 +288,7 @@ if (isset($_GET['from'])){
                        <h3>What does this mean?</h3>
                        <ol>
                                <?php //if ($php_ok && $xml_ok && $pcre_ok && $mbstring_ok && $iconv_ok && $filter_ok && $zlib_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok): ?>
-                               <?php if ($php_ok && $xml_ok && $pcre_ok && $filter_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok): ?>
+                               <?php if ($php_ok && $xml_ok && $pcre_ok && $dom_ok && $filter_ok && $gd_ok && $tidy_ok && $curl_ok && $parallel_ok && $allow_url_fopen_ok && $gettext_ok && $parse_ini_ok): ?>
                                <li><em>You have everything you need to run <?php echo $app_name; ?> properly!  Congratulations!</em></li>
                                <?php else: ?>
                                        <?php if ($php_ok): ?>
@@ -292,48 +305,62 @@ if (isset($_GET['from'])){
                                                                                <li><strong>Gettext:</strong> You have <code>gettext</code> enabled. <em>No problems here.</em></li>
                                         
                                         <?php if ($parse_ini_ok): ?>
+                                               <li><strong>Parse ini:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
+
+                                               <?php if ($dom_ok): ?>
+                                                       <li><strong>DOM/XML:</strong> You can parse <em>ini</em> files. <em>No problems here.</em></li>
                                         
-                                            <?php if ($filter_ok): ?>
-                                                <li><strong>Data filtering:</strong> You have the PHP filter extension enabled. <em>No problems here.</em></li>
-        
-                                                <?php if ($zlib_ok): ?>
-                                                    <li><strong>Zlib:</strong> You have <code>Zlib</code> enabled.  This allows SimplePie to support GZIP-encoded feeds.  <em>No problems here.</em></li>
-                                                <?php else: ?>
-                                                    <li><strong>Zlib:</strong> The <code>Zlib</code> extension is not available.  SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.</li>
-                                                <?php endif; ?>
-                                                
-                                                <?php if ($mbstring_ok && $iconv_ok): ?>
-                                                    <li><strong>mbstring and iconv:</strong> You have both <code>mbstring</code> and <code>iconv</code> installed!  This will allow <?php echo $app_name; ?> to handle the greatest number of languages. <em>No problems here.</em></li>
-                                                <?php elseif ($mbstring_ok): ?>
-                                                    <li><strong>mbstring:</strong> <code>mbstring</code> is installed, but <code>iconv</code> is not.</li>
-                                                <?php elseif ($iconv_ok): ?>
-                                                    <li><strong>iconv:</strong> <code>iconv</code> is installed, but <code>mbstring</code> is not.</li>
-                                                <?php else: ?>
-                                                    <li><strong>mbstring and iconv:</strong> <em>You do not have either of the extensions installed.</em> This will significantly impair your ability to read non-English feeds, as well as even some English ones.</li>
-                                                <?php endif; ?>
-
-                                                <?php if ($tidy_ok): ?>
-                                                    <li><strong>Tidy:</strong> You have <code>Tidy</code> support installed.  <em>No problems here.</em></li>
-                                                <?php else: ?>
-                                                    <li><strong>Tidy:</strong> The <code>Tidy</code> extension is not available.  <?php echo $app_name; ?> should still work with most feeds, but you may experience problems with some.</li>
-                                                <?php endif; ?>
-                                            
-                                                <?php if ($curl_ok): ?>
-                                                    <li><strong>cURL:</strong> You have <code>cURL</code> support installed.  <em>No problems here.</em></li>
-                                                <?php else: ?>
-                                                    <li><strong>cURL:</strong> The <code>cURL</code> extension is not available.  SimplePie will use <code>fsockopen()</code> instead.</li>
-                                                <?php endif; ?>
-                
-                                                <?php if ($parallel_ok): ?>
-                                                    <li><strong>Parallel URL fetching:</strong> You have <code>HttpRequestPool</code> or <code>curl_multi</code> support installed.  <em>No problems here.</em></li>
-                                                <?php else: ?>
-                                                    <li><strong>Parallel URL fetching:</strong> <code>HttpRequestPool</code> or <code>curl_multi</code> support is not available.  <?php echo $app_name; ?> will use <code>file_get_contents()</code> instead to fetch URLs sequentially rather than in parallel.</li>
-                                                <?php endif; ?>
-
-                                            <?php else: ?>
-                                                <li><strong>Data filtering:</strong> Your PHP configuration has the filter extension disabled.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
-                                            <?php endif; ?>
-                                        
+                                                   <?php if ($filter_ok): ?>
+                                                       <li><strong>Data filtering:</strong> You can use the PHP build-in DOM to operate on XML documents. <em>No problems here.</em></li>
+               
+                                                       <?php if ($zlib_ok): ?>
+                                                           <li><strong>Zlib:</strong> You have <code>Zlib</code> enabled.  This allows SimplePie to support GZIP-encoded feeds.  <em>No problems here.</em></li>
+                                                       <?php else: ?>
+                                                           <li><strong>Zlib:</strong> The <code>Zlib</code> extension is not available.  SimplePie will ignore any GZIP-encoding, and instead handle feeds as uncompressed text.</li>
+                                                       <?php endif; ?>
+                                                       
+                                                       <?php if ($mbstring_ok && $iconv_ok): ?>
+                                                           <li><strong>mbstring and iconv:</strong> You have both <code>mbstring</code> and <code>iconv</code> installed!  This will allow <?php echo $app_name; ?> to handle the greatest number of languages. <em>No problems here.</em></li>
+                                                       <?php elseif ($mbstring_ok): ?>
+                                                           <li><strong>mbstring:</strong> <code>mbstring</code> is installed, but <code>iconv</code> is not.</li>
+                                                       <?php elseif ($iconv_ok): ?>
+                                                           <li><strong>iconv:</strong> <code>iconv</code> is installed, but <code>mbstring</code> is not.</li>
+                                                       <?php else: ?>
+                                                           <li><strong>mbstring and iconv:</strong> <em>You do not have either of the extensions installed.</em> This will significantly impair your ability to read non-English feeds, as well as even some English ones.</li>
+                                                       <?php endif; ?>
+
+                                                       <?php if ($gd_ok): ?>
+                                                           <li><strong>GD:</strong> You have <code>GD</code> support installed.  <em>No problems here.</em></li>
+                                                       <?php else: ?>
+                                                           <li><strong>GD:</strong> The <code>GD</code> extension is not available.  <?php echo $app_name; ?> will not be able to download pictures locally on your server.</li>
+                                                       <?php endif; ?>
+
+                                                       <?php if ($tidy_ok): ?>
+                                                           <li><strong>Tidy:</strong> You have <code>Tidy</code> support installed.  <em>No problems here.</em></li>
+                                                       <?php else: ?>
+                                                           <li><strong>Tidy:</strong> The <code>Tidy</code> extension is not available.  <?php echo $app_name; ?> should still work with most feeds, but you may experience problems with some.</li>
+                                                       <?php endif; ?>
+                                                   
+                                                       <?php if ($curl_ok): ?>
+                                                           <li><strong>cURL:</strong> You have <code>cURL</code> support installed.  <em>No problems here.</em></li>
+                                                       <?php else: ?>
+                                                           <li><strong>cURL:</strong> The <code>cURL</code> extension is not available.  SimplePie will use <code>fsockopen()</code> instead.</li>
+                                                       <?php endif; ?>
+                       
+                                                       <?php if ($parallel_ok): ?>
+                                                           <li><strong>Parallel URL fetching:</strong> You have <code>HttpRequestPool</code> or <code>curl_multi</code> support installed.  <em>No problems here.</em></li>
+                                                       <?php else: ?>
+                                                           <li><strong>Parallel URL fetching:</strong> <code>HttpRequestPool</code> or <code>curl_multi</code> support is not available.  <?php echo $app_name; ?> will use <code>file_get_contents()</code> instead to fetch URLs sequentially rather than in parallel.</li>
+                                                       <?php endif; ?>
+
+                                                       <?php else: ?>
+                                                           <li><strong>Data filtering:</strong> Your PHP configuration has the filter extension disabled.  <strong><?php echo $app_name; ?> will not work here.</strong></li>
+                                                       <?php endif; ?>
+
+                                                   <?php else: ?>
+                                                       <li><strong>DOM/XML:</strong> Your PHP configuration isn't standard, you're missing PHP-DOM.  You may try to install a package or recompile PHP. <strong><?php echo $app_name; ?> will not work here.</strong></li>
+                                               <?php endif; ?>
+
                                         <?php else : ?>
                                             <li><strong>Parse ini files function :</strong> Bad luck : your webhost has decided to block the use of the <em>parse_ini_file</em> function. <strong><?php echo $app_name; ?> will not work here.</strong>
                                         <?php endif; ?>