From 6c8b36f04ea1bc2c022c331bb0980b6c9dccb83c Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Sun, 5 Oct 2014 15:55:20 +0200
Subject: Let's begin the big refactoring!
Minz_Translate::t\s? replaces by _t
See https://github.com/marienfressinaud/FreshRSS/issues/655
---
lib/lib_rss.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
(limited to 'lib/lib_rss.php')
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 31c9cdbc1..4f6beb9fd 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -77,11 +77,11 @@ function formatBytes($bytes, $precision = 2, $system = 'IEC') {
}
function timestamptodate ($t, $hour = true) {
- $month = Minz_Translate::t (date('M', $t));
+ $month = _t(date('M', $t));
if ($hour) {
- $date = Minz_Translate::t ('format_date_hour', $month);
+ $date = _t('format_date_hour', $month);
} else {
- $date = Minz_Translate::t ('format_date', $month);
+ $date = _t('format_date', $month);
}
return @date ($date, $t);
@@ -107,7 +107,7 @@ function html_only_entity_decode($text) {
function customSimplePie() {
$simplePie = new SimplePie();
- $simplePie->set_useragent(Minz_Translate::t('freshrss') . '/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ') ' . SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION);
+ $simplePie->set_useragent(_t('freshrss') . '/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ') ' . SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION);
$simplePie->set_cache_location(CACHE_PATH);
$simplePie->set_cache_duration(800);
$simplePie->strip_htmltags(array(
--
cgit v1.2.3
From 6c1fe11395c86f71397629b2ab269e26ee63566c Mon Sep 17 00:00:00 2001
From: Alexandre Alapetite
Date: Sun, 5 Oct 2014 20:27:16 +0200
Subject: SimplePie timeout preference
https://github.com/marienfressinaud/FreshRSS/issues/656
TODO: Make a user setting
---
lib/lib_rss.php | 1 +
1 file changed, 1 insertion(+)
(limited to 'lib/lib_rss.php')
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 4f6beb9fd..2f9a2ea45 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -110,6 +110,7 @@ function customSimplePie() {
$simplePie->set_useragent(_t('freshrss') . '/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ') ' . SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION);
$simplePie->set_cache_location(CACHE_PATH);
$simplePie->set_cache_duration(800);
+ $simplePie->set_timeout(10); //TODO: Make a user setting
$simplePie->strip_htmltags(array(
'base', 'blink', 'body', 'doctype', 'embed',
'font', 'form', 'frame', 'frameset', 'html',
--
cgit v1.2.3
From 7080a32650ab8b19e917d8add944a75cc98381bc Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Mon, 20 Oct 2014 11:54:31 +0200
Subject: Add checking installation feature
---
app/Controllers/updateController.php | 14 +++++-
app/Models/DatabaseDAO.php | 83 ++++++++++++++++++++++++++++++++++++
app/Models/DatabaseDAOSQLite.php | 48 +++++++++++++++++++++
app/Models/Factory.php | 9 ++++
app/SQL/install.sql.mysql.php | 2 -
app/SQL/install.sql.sqlite.php | 2 -
app/layout/aside_configure.phtml | 7 ++-
app/layout/header.phtml | 1 +
app/views/update/checkInstall.phtml | 30 +++++++++++++
lib/lib_rss.php | 62 +++++++++++++++++++++++++++
10 files changed, 252 insertions(+), 6 deletions(-)
create mode 100644 app/Models/DatabaseDAO.php
create mode 100644 app/Models/DatabaseDAOSQLite.php
create mode 100644 app/views/update/checkInstall.phtml
(limited to 'lib/lib_rss.php')
diff --git a/app/Controllers/updateController.php b/app/Controllers/updateController.php
index 9d1e1ddf5..4ebb11f51 100644
--- a/app/Controllers/updateController.php
+++ b/app/Controllers/updateController.php
@@ -12,7 +12,6 @@ class FreshRSS_update_Controller extends Minz_ActionController {
invalidateHttpCache();
- Minz_View::prependTitle(_t('update_system') . ' · ');
$this->view->update_to_apply = false;
$this->view->last_update_time = 'unknown';
$this->view->check_last_hour = false;
@@ -24,6 +23,8 @@ class FreshRSS_update_Controller extends Minz_ActionController {
}
public function indexAction() {
+ Minz_View::prependTitle(_t('update_system') . ' · ');
+
if (file_exists(UPDATE_FILENAME) && !is_writable(FRESHRSS_PATH)) {
$this->view->message = array(
'status' => 'bad',
@@ -126,4 +127,15 @@ class FreshRSS_update_Controller extends Minz_ActionController {
}
}
}
+
+ /**
+ * This action displays information about installation.
+ */
+ public function checkInstallAction() {
+ Minz_View::prependTitle(_t('gen.title.check_install') . ' · ');
+
+ $this->view->status_php = check_install_php();
+ $this->view->status_files = check_install_files();
+ $this->view->status_database = check_install_database();
+ }
}
diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php
new file mode 100644
index 000000000..0d85718e3
--- /dev/null
+++ b/app/Models/DatabaseDAO.php
@@ -0,0 +1,83 @@
+bd->prepare($sql);
+ $stm->execute();
+ $res = $stm->fetchAll(PDO::FETCH_ASSOC);
+
+ $tables = array(
+ $this->prefix . 'category' => false,
+ $this->prefix . 'feed' => false,
+ $this->prefix . 'entry' => false,
+ );
+ foreach ($res as $value) {
+ $tables[array_pop($value)] = true;
+ }
+
+ return count(array_keys($tables, true, true)) == count($tables);
+ }
+
+ public function getSchema($table) {
+ $sql = 'DESC ' . $this->prefix . $table;
+ $stm = $this->bd->prepare($sql);
+ $stm->execute();
+
+ return $this->listDaoToSchema($stm->fetchAll(PDO::FETCH_ASSOC));
+ }
+
+ public function checkTable($table, $schema) {
+ $columns = $this->getSchema($table);
+
+ $ok = (count($columns) == count($schema));
+ foreach ($columns as $c) {
+ $ok &= in_array($c['name'], $schema);
+ }
+
+ return $ok;
+ }
+
+ public function categoryIsCorrect() {
+ return $this->checkTable('category', array(
+ 'id', 'name'
+ ));
+ }
+
+ public function feedIsCorrect() {
+ return $this->checkTable('feed', array(
+ 'id', 'url', 'category', 'name', 'website', 'description', 'lastUpdate',
+ 'priority', 'pathEntries', 'httpAuth', 'error', 'keep_history', 'ttl',
+ 'cache_nbEntries', 'cache_nbUnreads'
+ ));
+ }
+
+ public function entryIsCorrect() {
+ return $this->checkTable('entry', array(
+ 'id', 'guid', 'title', 'author', 'content_bin', 'link', 'date', 'is_read',
+ 'is_favorite', 'id_feed', 'tags'
+ ));
+ }
+
+ public function daoToSchema($dao) {
+ return array(
+ 'name' => $dao['Field'],
+ 'type' => strtolower($dao['Type']),
+ 'notnull' => (bool)$dao['Null'],
+ 'default' => $dao['Default'],
+ );
+ }
+
+ public function listDaoToSchema($listDAO) {
+ $list = array();
+
+ foreach ($listDAO as $dao) {
+ $list[] = $this->daoToSchema($dao);
+ }
+
+ return $list;
+ }
+}
diff --git a/app/Models/DatabaseDAOSQLite.php b/app/Models/DatabaseDAOSQLite.php
new file mode 100644
index 000000000..7f53f967d
--- /dev/null
+++ b/app/Models/DatabaseDAOSQLite.php
@@ -0,0 +1,48 @@
+bd->prepare($sql);
+ $stm->execute();
+ $res = $stm->fetchAll(PDO::FETCH_ASSOC);
+
+ $tables = array(
+ 'category' => false,
+ 'feed' => false,
+ 'entry' => false,
+ );
+ foreach ($res as $value) {
+ $tables[$value['name']] = true;
+ }
+
+ return count(array_keys($tables, true, true)) == count($tables);
+ }
+
+ public function getSchema($table) {
+ $sql = 'PRAGMA table_info(' . $table . ')';
+ $stm = $this->bd->prepare($sql);
+ $stm->execute();
+
+ return $this->listDaoToSchema($stm->fetchAll(PDO::FETCH_ASSOC));
+ }
+
+ public function entryIsCorrect() {
+ return $this->checkTable('entry', array(
+ 'id', 'guid', 'title', 'author', 'content', 'link', 'date', 'is_read',
+ 'is_favorite', 'id_feed', 'tags'
+ ));
+ }
+
+ public function daoToSchema($dao) {
+ return array(
+ 'name' => $dao['name'],
+ 'type' => strtolower($dao['type']),
+ 'notnull' => $dao['notnull'] === '1' ? true : false,
+ 'default' => $dao['dflt_value'],
+ );
+ }
+}
diff --git a/app/Models/Factory.php b/app/Models/Factory.php
index 93f4552f7..91cb84998 100644
--- a/app/Models/Factory.php
+++ b/app/Models/Factory.php
@@ -29,4 +29,13 @@ class FreshRSS_Factory {
}
}
+ public static function createDatabaseDAO($username = null) {
+ $db = Minz_Configuration::dataBase();
+ if ($db['type'] === 'sqlite') {
+ return new FreshRSS_DatabaseDAOSQLite($username);
+ } else {
+ return new FreshRSS_DatabaseDAO($username);
+ }
+ }
+
}
diff --git a/app/SQL/install.sql.mysql.php b/app/SQL/install.sql.mysql.php
index 16cb3a3b8..cf0159199 100644
--- a/app/SQL/install.sql.mysql.php
+++ b/app/SQL/install.sql.mysql.php
@@ -57,5 +57,3 @@ INSERT IGNORE INTO `%1$scategory` (id, name) VALUES(1, "%2$s");
');
define('SQL_DROP_TABLES', 'DROP TABLES %1$sentry, %1$sfeed, %1$scategory');
-
-define('SQL_SHOW_TABLES', 'SHOW tables;');
diff --git a/app/SQL/install.sql.sqlite.php b/app/SQL/install.sql.sqlite.php
index 7988ada04..30bca2810 100644
--- a/app/SQL/install.sql.sqlite.php
+++ b/app/SQL/install.sql.sqlite.php
@@ -55,5 +55,3 @@ $SQL_CREATE_TABLES = array(
);
define('SQL_DROP_TABLES', 'DROP TABLES %1$sentry, %1$sfeed, %1$scategory');
-
-define('SQL_SHOW_TABLES', 'SELECT name FROM sqlite_master WHERE type="table"');
diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml
index 20446c877..32dc19a4e 100644
--- a/app/layout/aside_configure.phtml
+++ b/app/layout/aside_configure.phtml
@@ -31,7 +31,12 @@
-
+
+
+
+
diff --git a/app/layout/header.phtml b/app/layout/header.phtml
index e848ac4eb..506cec175 100644
--- a/app/layout/header.phtml
+++ b/app/layout/header.phtml
@@ -68,6 +68,7 @@ if (Minz_Configuration::canLogIn()) {
+
diff --git a/app/views/update/checkInstall.phtml b/app/views/update/checkInstall.phtml
new file mode 100644
index 000000000..32058714e
--- /dev/null
+++ b/app/views/update/checkInstall.phtml
@@ -0,0 +1,30 @@
+partial('aside_configure'); ?>
+
+
+
+
+
+
+ status_php as $key => $status) { ?>
+
+
+
+
+
+
+
+ status_files as $key => $status) { ?>
+
+
+
+
+
+
+
+ status_database as $key => $status) { ?>
+
+
+
+
+
+
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 2f9a2ea45..dbed207d0 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -245,3 +245,65 @@ function is_referer_from_same_domain() {
}
return (isset($host['port']) ? $host['port'] : 0) === (isset($referer['port']) ? $referer['port'] : 0);
}
+
+
+/**
+ *
+ */
+function check_install_php() {
+ return array(
+ 'php' => version_compare(PHP_VERSION, '5.2.1') >= 0,
+ 'minz' => file_exists(LIB_PATH . '/Minz'),
+ 'curl' => extension_loaded('curl'),
+ 'pdo_mysql' => extension_loaded('pdo_mysql'),
+ 'pdo_sqlite' => extension_loaded('pdo_sqlite'),
+ 'pdo' => extension_loaded('pdo_mysql') || extension_loaded('pdo_sqlite'),
+ 'pcre' => extension_loaded('pcre'),
+ 'ctype' => extension_loaded('ctype'),
+ 'dom' => class_exists('DOMDocument'),
+ 'json' => extension_loaded('json'),
+ 'zip' => extension_loaded('zip'),
+ );
+}
+
+
+/**
+ *
+ */
+function check_install_files() {
+ return array(
+ 'data' => DATA_PATH && is_writable(DATA_PATH),
+ 'cache' => CACHE_PATH && is_writable(CACHE_PATH),
+ 'logs' => LOG_PATH && is_writable(LOG_PATH),
+ 'favicons' => is_writable(DATA_PATH . '/favicons'),
+ 'persona' => is_writable(DATA_PATH . '/persona'),
+ 'tokens' => is_writable(DATA_PATH . '/tokens'),
+ );
+}
+
+
+/**
+ *
+ */
+function check_install_database() {
+ $status = array(
+ 'connection' => true,
+ 'tables' => false,
+ 'categories' => false,
+ 'feeds' => false,
+ 'entries' => false,
+ );
+
+ try {
+ $dbDAO = FreshRSS_Factory::createDatabaseDAO();
+
+ $status['tables'] = $dbDAO->tablesAreCorrect();
+ $status['categories'] = $dbDAO->categoryIsCorrect();
+ $status['feeds'] = $dbDAO->feedIsCorrect();
+ $status['entries'] = $dbDAO->entryIsCorrect();
+ } catch(Minz_PDOConnectionException $e) {
+ $status['connection'] = false;
+ }
+
+ return $status;
+}
--
cgit v1.2.3
From 61a2f9387f2d7f681040c1641c7601fa3002c8f8 Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Mon, 20 Oct 2014 12:42:46 +0200
Subject: Fix i18n (french and english)
---
app/i18n/en.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
app/i18n/fr.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
lib/lib_rss.php | 6 ++++++
3 files changed, 112 insertions(+), 8 deletions(-)
(limited to 'lib/lib_rss.php')
diff --git a/app/i18n/en.php b/app/i18n/en.php
index 283d28dc6..b24af38c1 100644
--- a/app/i18n/en.php
+++ b/app/i18n/en.php
@@ -9,6 +9,53 @@
'add_category' => 'Add a category',
'add_query' => 'Add a query',
'add_rss_feed' => 'Add a RSS feed',
+ 'admin.check_install.cache.nok' => 'Check permissions on ./data/cache directory. HTTP server must have rights to write into',
+ 'admin.check_install.cache.ok' => 'Permissions on cache directory are good.',
+ 'admin.check_install.categories.nok' => 'Category table is bad configured.',
+ 'admin.check_install.categories.ok' => 'Category table is ok.',
+ 'admin.check_install.connection.nok' => 'Connection to the database cannot being established.',
+ 'admin.check_install.connection.ok' => 'Connection to the database is ok.',
+ 'admin.check_install.ctype.nok' => 'You lack a required library for character type checking (php-ctype).',
+ 'admin.check_install.ctype.ok' => 'You have the required library for character type checking (ctype).',
+ 'admin.check_install.curl.nok' => 'You lack cURL (php5-curl package).',
+ 'admin.check_install.curl.ok' => 'You have version %s of cURL.',
+ 'admin.check_install.data.nok' => 'Check permissions on ./data directory. HTTP server must have rights to write into',
+ 'admin.check_install.data.ok' => 'Permissions on data directory are good.',
+ 'admin.check_install.database' => 'Database installation',
+ 'admin.check_install.dom.nok' => 'You lack a required library to browse the DOM (php-xml package).',
+ 'admin.check_install.dom.ok' => 'You have the required library to browse the DOM.',
+ 'admin.check_install.entries.nok' => 'Entry table is bad configured.',
+ 'admin.check_install.entries.ok' => 'Entry table is ok.',
+ 'admin.check_install.favicons.nok' => 'Check permissions on ./data/favicons directory. HTTP server must have rights to write into',
+ 'admin.check_install.favicons.ok' => 'Permissions on favicons directory are good.',
+ 'admin.check_install.feeds.nok' => 'Feed table is bad configured.',
+ 'admin.check_install.feeds.ok' => 'Feed table is ok.',
+ 'admin.check_install.files' => 'File installation',
+ 'admin.check_install.json.nok' => 'You lack JSON (php5-json package).',
+ 'admin.check_install.json.ok' => 'You have version %s of JSON.',
+ 'admin.check_install.logs.nok' => 'Check permissions on ./data/logs directory. HTTP server must have rights to write into',
+ 'admin.check_install.logs.ok' => 'Permissions on logs directory are good.',
+ 'admin.check_install.minz.nok' => 'You lack the Minz framework.',
+ 'admin.check_install.minz.ok' => 'You have the Minz framework.',
+ 'admin.check_install.pcre.nok' => 'You lack a required library for regular expressions (php-pcre).',
+ 'admin.check_install.pcre.ok' => 'You have the required library for regular expressions (PCRE).',
+ 'admin.check_install.pdo.nok' => 'You lack PDO or one of the supported drivers (pdo_mysql, pdo_sqlite).',
+ 'admin.check_install.pdo.ok' => 'You have PDO and at least one of the supported drivers (pdo_mysql, pdo_sqlite).',
+ 'admin.check_install.pdo_mysql.nok' => 'You lack PDO for MySQL (it\'s ok if PDO is good).',
+ 'admin.check_install.pdo_mysql.ok' => 'You have PDO for MySQL.',
+ 'admin.check_install.pdo_sqlite.nok' => 'You lack PDO for SQLite (it\'s ok if PDO is good).',
+ 'admin.check_install.pdo_sqlite.ok' => 'You have PDO for SQLite.',
+ 'admin.check_install.persona.nok' => 'Check permissions on ./data/persona directory. HTTP server must have rights to write into',
+ 'admin.check_install.persona.ok' => 'Permissions on Mozilla Persona directory are good.',
+ 'admin.check_install.php' => 'PHP installation',
+ 'admin.check_install.php.nok' => 'Your PHP version is %s but FreshRSS requires at least version %s.',
+ 'admin.check_install.php.ok' => 'Your PHP version is %s, which is compatible with FreshRSS.',
+ 'admin.check_install.tables.nok' => 'There is one or more lacking tables in the database.',
+ 'admin.check_install.tables.ok' => 'Tables are existing in the database.',
+ 'admin.check_install.tokens.nok' => 'Check permissions on ./data/tokens directory. HTTP server must have rights to write into',
+ 'admin.check_install.tokens.ok' => 'Permissions on tokens directory are good.',
+ 'admin.check_install.zip.nok' => 'You lack ZIP extension (php5-zip package).',
+ 'admin.check_install.zip.ok' => 'You have version %s of ZIP extension.',
'admin.users.articles_and_size' => '%s articles (%s)',
'administration' => 'Manage',
'advanced' => 'Advanced',
@@ -118,8 +165,8 @@
'current_user' => 'Current user',
'damn' => 'Damn!',
'data_is_ok' => 'Permissions on data directory are good',
- 'dec' => 'dec',
'Dec' => '\\D\\e\\c\\e\\m\\b\\e\\r',
+ 'dec' => 'dec',
'december' => 'Dec',
'default_category' => 'Uncategorized',
'default_user' => 'Username of the default user (maximum 16 alphanumeric characters)',
@@ -186,8 +233,10 @@
'g+' => 'Google+',
'gen.menu.admin' => 'Administration',
'gen.menu.authentication' => 'Authentication',
+ 'gen.menu.check_install' => 'Installation checking',
'gen.menu.manage_users' => 'Manage users',
'gen.menu.profil' => 'Profil',
+ 'gen.title.check_install' => 'Installation checking',
'general_configuration' => 'General configuration',
'general_conf_is_ok' => 'General configuration has been saved.',
'github_or_email' => 'on Github or by mail',
@@ -219,8 +268,8 @@
'javascript_for_shortcuts' => 'JavaScript must be enabled in order to use shortcuts',
'javascript_is_better' => 'FreshRSS is more pleasant with JavaScript enabled',
'javascript_should_be_activated' => 'JavaScript must be enabled',
- 'jul' => 'jul',
'Jul' => '\\J\\u\\l\\y',
+ 'jul' => 'jul',
'july' => 'Jul',
'jump_next' => 'jump to next unread sibling (feed or category)',
'jun' => 'jun',
@@ -297,8 +346,8 @@
'number_feeds' => '%d feeds',
'n_entries_deleted' => '%d articles have been deleted',
'n_feeds_actualized' => '%d feeds have been updated',
- 'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
'oct' => 'oct',
+ 'Oct' => '\\O\\c\\t\\o\\b\\e\\r',
'october' => 'Oct',
'ok' => 'Ok!',
'older_first' => 'Oldest first',
@@ -375,8 +424,8 @@
'seconds_(0_means_no_timeout)' => 'seconds (0 means no timeout)',
'see_on_website' => 'See on original website',
'see_website' => 'See website',
- 'sep' => 'sep',
'Sep' => '\\S\\e\\p\\t\\e\\m\\b\\e\\r',
+ 'sep' => 'sep',
'september' => 'Sep',
'shaarli' => 'Shaarli',
'share' => 'Share',
diff --git a/app/i18n/fr.php b/app/i18n/fr.php
index 0517544d5..22494274c 100644
--- a/app/i18n/fr.php
+++ b/app/i18n/fr.php
@@ -9,6 +9,53 @@
'add_category' => 'Ajouter une catégorie',
'add_query' => 'Créer un filtre',
'add_rss_feed' => 'Ajouter un flux RSS',
+ 'admin.check_install.cache.nok' => 'Veuillez vérifier les droits sur le répertoire ./data/cache. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.cache.ok' => 'Les droits sur le répertoire de cache sont bons.',
+ 'admin.check_install.categories.nok' => 'La table category est mal configurée.',
+ 'admin.check_install.categories.ok' => 'La table category est bien configurée.',
+ 'admin.check_install.connection.nok' => 'La connexion à la base de données est impossible.',
+ 'admin.check_install.connection.ok' => 'La connexion à la base de données est bonne.',
+ 'admin.check_install.ctype.nok' => 'Il manque une librairie pour la vérification des types de caractères (php-ctype).',
+ 'admin.check_install.ctype.ok' => 'Vous disposez du nécessaire pour la vérification des types de caractères (ctype).',
+ 'admin.check_install.curl.nok' => 'Vous ne disposez pas de cURL (paquet php5-curl).',
+ 'admin.check_install.curl.ok' => 'Vous disposez de cURL dans sa version %s.',
+ 'admin.check_install.data.nok' => 'Veuillez vérifier les droits sur le répertoire ./data. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.data.ok' => 'Les droits sur le répertoire de data sont bons.',
+ 'admin.check_install.database' => 'Installation de la base de données',
+ 'admin.check_install.dom.nok' => 'Il manque une librairie pour parcourir le DOM (paquet php-xml).',
+ 'admin.check_install.dom.ok' => 'Vous disposez du nécessaire pour parcourir le DOM.',
+ 'admin.check_install.entries.nok' => 'La table entry est mal configurée.',
+ 'admin.check_install.entries.ok' => 'La table entry est bien configurée.',
+ 'admin.check_install.favicons.nok' => 'Veuillez vérifier les droits sur le répertoire ./data/favicons. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.favicons.ok' => 'Les droits sur le répertoire des favicons sont bons.',
+ 'admin.check_install.feeds.nok' => 'La table feed est mal configurée.',
+ 'admin.check_install.feeds.ok' => 'La table feed est bien configurée.',
+ 'admin.check_install.files' => 'Installation des fichiers',
+ 'admin.check_install.json.nok' => 'Vous ne disposez pas de JSON (paquet php5-json).',
+ 'admin.check_install.json.ok' => 'Vous disposez de JSON dans sa version %s.',
+ 'admin.check_install.logs.nok' => 'Veuillez vérifier les droits sur le répertoire ./data/logs. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.logs.ok' => 'Les droits sur le répertoire des logs sont bons.',
+ 'admin.check_install.minz.nok' => 'Vous ne disposez pas de la librairie Minz.',
+ 'admin.check_install.minz.ok' => 'Vous disposez du framework Minz',
+ 'admin.check_install.pcre.nok' => 'Il manque une librairie pour les expressions régulières (php-pcre).',
+ 'admin.check_install.pcre.ok' => 'Vous disposez du nécessaire pour les expressions régulières (PCRE).',
+ 'admin.check_install.pdo.nok' => 'Vous ne disposez pas de PDO ou d’un des drivers supportés (pdo_mysql, pdo_sqlite).',
+ 'admin.check_install.pdo.ok' => 'Vous disposez de PDO et d’au moins un des drivers supportés (pdo_mysql, pdo_sqlite).',
+ 'admin.check_install.pdo_mysql.nok' => 'Vous ne possédez pas PDO pour MySQL (ok si PDO est bon).',
+ 'admin.check_install.pdo_mysql.ok' => 'Vous possédez PDO pour MySQL.',
+ 'admin.check_install.pdo_sqlite.nok' => 'Vous ne possédez pas PDO pour SQLite (ok si PDO est bon).',
+ 'admin.check_install.pdo_sqlite.ok' => 'Vous possédez PDO pour SQLite.',
+ 'admin.check_install.persona.nok' => 'Veuillez vérifier les droits sur le répertoire ./data/persona. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.persona.ok' => 'Les droits sur le répertoire de Mozilla Persona sont bons.',
+ 'admin.check_install.php' => 'Installation de PHP',
+ 'admin.check_install.php.nok' => 'Votre version de PHP est la %s mais FreshRSS requiert au moins la version %s.',
+ 'admin.check_install.php.ok' => 'Votre version de PHP est la %s, qui est compatible avec FreshRSS.',
+ 'admin.check_install.tables.nok' => 'Il manque une ou plusieurs tables en base de données.',
+ 'admin.check_install.tables.ok' => 'Les tables sont bien présentes en base de données.',
+ 'admin.check_install.tokens.nok' => 'Veuillez vérifier les droits sur le répertoire ./data/tokens. Le serveur HTTP doit être capable d’écrire dedans',
+ 'admin.check_install.tokens.ok' => 'Les droits sur le répertoire des tokens sont bons.',
+ 'admin.check_install.zip.nok' => 'Vous ne disposez pas de l\'extension ZIP (paquet php5-zip).',
+ 'admin.check_install.zip.ok' => 'Vous disposez de l\'extension ZIP dans sa version %s.',
'admin.users.articles_and_size' => '%s articles (%s)',
'administration' => 'Gérer',
'advanced' => 'Avancé',
@@ -118,8 +165,8 @@
'current_user' => 'Utilisateur actuel',
'damn' => 'Arf !',
'data_is_ok' => 'Les droits sur le répertoire de data sont bons',
- 'dec' => 'déc.',
'Dec' => '\\d\\é\\c\\e\\m\\b\\r\\e',
+ 'dec' => 'déc.',
'december' => 'décembre',
'default_category' => 'Sans catégorie',
'default_user' => 'Nom de l’utilisateur par défaut (16 caractères alphanumériques maximum)',
@@ -186,8 +233,10 @@
'g+' => 'Google+',
'gen.menu.admin' => 'Administration',
'gen.menu.authentication' => 'Authentification',
+ 'gen.menu.check_install' => 'Vérification de l\'installation',
'gen.menu.manage_users' => 'Gestion des utilisateurs',
'gen.menu.profil' => 'Profil',
+ 'gen.title.check_install' => 'Vérification de l\'installation',
'general_configuration' => 'Configuration générale',
'general_conf_is_ok' => 'La configuration générale a été enregistrée.',
'github_or_email' => 'sur Github ou par courriel',
@@ -219,8 +268,8 @@
'javascript_for_shortcuts' => 'Le JavaScript doit être activé pour pouvoir profiter des raccourcis.',
'javascript_is_better' => 'FreshRSS est plus agréable à utiliser avec JavaScript activé',
'javascript_should_be_activated' => 'Le JavaScript doit être activé.',
- 'jul' => 'jui.',
'Jul' => '\\j\\u\\i\\l\\l\\e\\t',
+ 'jul' => 'jui.',
'july' => 'juillet',
'jump_next' => 'sauter au prochain voisin non lu (flux ou catégorie)',
'jun' => 'juin',
@@ -297,8 +346,8 @@
'number_feeds' => '%d flux',
'n_entries_deleted' => '%d articles ont été supprimés.',
'n_feeds_actualized' => '%d flux ont été mis à jour.',
- 'Oct' => '\\o\\c\\t\\o\\b\\r\\e',
'oct' => 'oct.',
+ 'Oct' => '\\o\\c\\t\\o\\b\\r\\e',
'october' => 'octobre',
'ok' => 'Ok !',
'older_first' => 'Plus anciens en premier',
@@ -375,8 +424,8 @@
'seconds_(0_means_no_timeout)' => 'secondes (0 signifie aucun timeout ) ',
'see_on_website' => 'Voir sur le site d’origine',
'see_website' => 'Voir le site',
- 'sep' => 'sep.',
'Sep' => '\\s\\e\\p\\t\\e\\m\\b\\r\\e',
+ 'sep' => 'sep.',
'september' => 'septembre',
'shaarli' => 'Shaarli',
'share' => 'Partager',
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index dbed207d0..9abdf18ce 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -248,7 +248,9 @@ function is_referer_from_same_domain() {
/**
+ * Check PHP and its extensions are well-installed.
*
+ * @return array of tested values.
*/
function check_install_php() {
return array(
@@ -268,7 +270,9 @@ function check_install_php() {
/**
+ * Check different data files and directories exist.
*
+ * @return array of tested values.
*/
function check_install_files() {
return array(
@@ -283,7 +287,9 @@ function check_install_files() {
/**
+ * Check database is well-installed.
*
+ * @return array of tested values.
*/
function check_install_database() {
$status = array(
--
cgit v1.2.3
From 8a7bab3a55442f85553ab1d897084e89c10f7e05 Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Mon, 20 Oct 2014 19:35:22 +0200
Subject: Refactoring of indexController
Global view has been moved to a different action (all is not working)
See https://github.com/marienfressinaud/FreshRSS/issues/634
and https://github.com/marienfressinaud/FreshRSS/issues/655
---
app/Controllers/errorController.php | 2 +-
app/Controllers/indexController.php | 33 +++++++++++++++-----
app/layout/nav_menu.phtml | 2 +-
app/views/helpers/view/global_view.phtml | 53 --------------------------------
app/views/index/global.phtml | 46 +++++++++++++++++++++++++++
app/views/index/index.phtml | 2 --
lib/lib_rss.php | 4 +++
p/scripts/global_view.js | 3 +-
8 files changed, 79 insertions(+), 66 deletions(-)
delete mode 100644 app/views/helpers/view/global_view.phtml
create mode 100644 app/views/index/global.phtml
(limited to 'lib/lib_rss.php')
diff --git a/app/Controllers/errorController.php b/app/Controllers/errorController.php
index 76ab930e0..6c080bea8 100644
--- a/app/Controllers/errorController.php
+++ b/app/Controllers/errorController.php
@@ -37,7 +37,7 @@ class FreshRSS_error_Controller extends Minz_ActionController {
if ($this->view->errorMessage == '') {
switch($code_int) {
case 403:
- $this->view->errorMessage = _t('forbidden_access');
+ $this->view->errorMessage = _t('access_denied');
break;
case 404:
default:
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php
index f994e257c..e1ce71b28 100755
--- a/app/Controllers/indexController.php
+++ b/app/Controllers/indexController.php
@@ -1,5 +1,8 @@
array(_t('access_denied')))
- );
+ Minz_Error::error(403);
return;
} elseif ($output !== 'rss') {
// "hard" redirection is not required, just ask dispatcher to
@@ -201,17 +201,34 @@ class FreshRSS_index_Controller extends Minz_ActionController {
return false;
}
}
+
+ /**
+ * This action displays the global view of FreshRSS.
+ */
+ public function globalAction() {
+ if (!FreshRSS_Auth::hasAccess() && !Minz_Configuration::allowAnonymous()) {
+ Minz_Error::error(403);
+ }
+
+ Minz_View::appendScript(Minz_Url::display('/scripts/global_view.js?' . @filemtime(PUBLIC_PATH . '/scripts/global_view.js')));
+
+ $catDAO = new FreshRSS_CategoryDAO();
+ $this->view->categories = $catDAO->listCategories();
+ }
+ /**
+ * This action displays the about page of FreshRSS.
+ */
public function aboutAction() {
Minz_View::prependTitle(_t('about') . ' · ');
}
+ /**
+ * This action displays logs of FreshRSS for the current user.
+ */
public function logsAction() {
if (!FreshRSS_Auth::hasAccess()) {
- Minz_Error::error(
- 403,
- array('error' => array(_t('access_denied')))
- );
+ Minz_Error::error(403);
}
Minz_View::prependTitle(_t('logs') . ' · ');
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index bb9468ab1..1a26422df 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -240,7 +240,7 @@
-
+
diff --git a/app/views/helpers/view/global_view.phtml b/app/views/helpers/view/global_view.phtml
deleted file mode 100644
index ae8af820d..000000000
--- a/app/views/helpers/view/global_view.phtml
+++ /dev/null
@@ -1,53 +0,0 @@
-partial('nav_menu'); ?>
-
-entries)) { ?>
-
- 'index', 'a' => 'index', 'params' => array());
- if (FreshRSS_Context::$conf->view_mode !== 'normal') {
- $arUrl['params']['output'] = 'normal';
- }
- $p = Minz_Request::param('state', '');
- if (($p != '') && (FreshRSS_Context::$conf->default_view !== $p)) {
- $arUrl['params']['state'] = $p;
- }
-
- foreach ($this->cat_aside as $cat) {
- $feeds = $cat->feeds();
- if (!empty($feeds)) {
-?>
-
-
-
-
-
-display_posts ? '' : ' class="hide_posts"'; ?>>
-
-
-
-
-
-
diff --git a/app/views/index/global.phtml b/app/views/index/global.phtml
new file mode 100644
index 000000000..a72e431df
--- /dev/null
+++ b/app/views/index/global.phtml
@@ -0,0 +1,46 @@
+partial('nav_menu'); ?>
+
+
+ 'index',
+ 'a' => 'index',
+ 'params' => array(
+ 'state' => FreshRSS_Context::$state
+ )
+ );
+
+ foreach ($this->categories as $cat) {
+ $feeds = $cat->feeds();
+ $url_base['params']['get'] = 'c_' . $cat->id();
+
+ if (!empty($feeds)) {
+?>
+
+
+
+
+ nbNotRead();
+ $error = $feed->inError() ? 'error ' : '';
+ $empty = $feed->nbEntries() === 0 ? 'empty ' : '';
+ $url_base['params']['get'] = 'f_' . $feed->id();
+ ?>
+ -
+
+ name(); ?>
+
+
+
+
+
+
+
+
+display_posts ? '' : ' class="hide_posts"'; ?>>
+
+
diff --git a/app/views/index/index.phtml b/app/views/index/index.phtml
index a59063557..8b93461dd 100644
--- a/app/views/index/index.phtml
+++ b/app/views/index/index.phtml
@@ -7,8 +7,6 @@ if (FreshRSS_Auth::hasAccess() || Minz_Configuration::allowAnonymous()) {
$this->renderHelper('view/normal_view');
} elseif ($output === 'reader') {
$this->renderHelper('view/reader_view');
- } elseif ($output === 'global') {
- $this->renderHelper('view/global_view');
} elseif ($output === 'rss') {
$this->renderHelper('view/rss_view');
} else {
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 9abdf18ce..80eb206d2 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -60,6 +60,10 @@ function formatNumber($n, $precision = 0) {
return str_replace(' ', ' ', //Espace insécable //TODO: remplacer par une espace _fine_ insécable
number_format($n, $precision, '.', ' ')); //number_format does not seem to be Unicode-compatible
}
+function format_number($n, $precision = 0) {
+ // TODO: coding style, prefer THIS function. Remove formatNumber.
+ return formatNumber($n, $precision);
+}
function formatBytes($bytes, $precision = 2, $system = 'IEC') {
if ($system === 'IEC') {
diff --git a/p/scripts/global_view.js b/p/scripts/global_view.js
index 6e1f61066..8c2e6c1a2 100644
--- a/p/scripts/global_view.js
+++ b/p/scripts/global_view.js
@@ -50,7 +50,8 @@ function init_close_panel() {
}
function init_global_view() {
- $("#stream .box-category a").click(function () {
+ // TODO: should be based on generic classes.
+ $(".box a").click(function () {
var link = $(this).attr("href");
load_panel(link);
--
cgit v1.2.3
From e86a3d001745656c6ec94837ff3275d4bc93aa5a Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Sun, 26 Oct 2014 12:40:42 +0100
Subject: Fix pdo checking
Show only one message for both mysql and sqlite pdo conf. If one of them is ok,
PDO is ok.
See https://github.com/marienfressinaud/FreshRSS/issues/678
---
lib/lib_rss.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
(limited to 'lib/lib_rss.php')
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 80eb206d2..8ae357f02 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -257,13 +257,13 @@ function is_referer_from_same_domain() {
* @return array of tested values.
*/
function check_install_php() {
+ $pdo_mysql = extension_loaded('pdo_mysql');
+ $pdo_sqlite = extension_loaded('pdo_sqlite');
return array(
'php' => version_compare(PHP_VERSION, '5.2.1') >= 0,
'minz' => file_exists(LIB_PATH . '/Minz'),
'curl' => extension_loaded('curl'),
- 'pdo_mysql' => extension_loaded('pdo_mysql'),
- 'pdo_sqlite' => extension_loaded('pdo_sqlite'),
- 'pdo' => extension_loaded('pdo_mysql') || extension_loaded('pdo_sqlite'),
+ 'pdo' => $pdo_mysql || $pdo_sqlite,
'pcre' => extension_loaded('pcre'),
'ctype' => extension_loaded('ctype'),
'dom' => class_exists('DOMDocument'),
--
cgit v1.2.3
From 2e5d4d97c989f55c3506ceb918126eaf9c68f1d6 Mon Sep 17 00:00:00 2001
From: Alexandre Alapetite
Date: Tue, 28 Oct 2014 22:29:55 +0100
Subject: More limit options in config.php
See e.g. https://github.com/marienfressinaud/FreshRSS/issues/681
https://github.com/marienfressinaud/FreshRSS/issues/680
https://github.com/marienfressinaud/FreshRSS/issues/656
---
CHANGELOG | 6 ++++++
lib/Minz/Configuration.php | 26 ++++++++++++++++++++------
lib/lib_rss.php | 5 +++--
3 files changed, 29 insertions(+), 8 deletions(-)
(limited to 'lib/lib_rss.php')
diff --git a/CHANGELOG b/CHANGELOG
index 44d3452ae..688a286e3 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,11 @@
# Journal des modifications
+##
+
+* Configuration
+ * New options in config.php for cache duration, timeout, max number of feeds and categories per user.
+
+
## 2014-09-26 FreshRSS 0.8.0 / 0.9.0 (beta)
* UI
diff --git a/lib/Minz/Configuration.php b/lib/Minz/Configuration.php
index fe9ea6b2e..9511cb357 100644
--- a/lib/Minz/Configuration.php
+++ b/lib/Minz/Configuration.php
@@ -62,6 +62,8 @@ class Minz_Configuration {
const MAX_SMALL_INT = 16384;
private static $limits = array(
+ 'cache_duration' => 800, //SimplePie cache duration in seconds
+ 'timeout' => 10, //SimplePie timeout in seconds
'max_feeds' => Minz_Configuration::MAX_SMALL_INT,
'max_categories' => Minz_Configuration::MAX_SMALL_INT,
);
@@ -303,16 +305,28 @@ class Minz_Configuration {
if (isset($ini_array['limits'])) {
$limits = $ini_array['limits'];
+ if (isset($limits['cache_duration'])) {
+ $v = intval($limits['cache_duration']);
+ if ($v > 0) {
+ self::$limits['cache_duration'] = $v;
+ }
+ }
+ if (isset($limits['timeout'])) {
+ $v = intval($limits['timeout']);
+ if ($v > 0) {
+ self::$limits['timeout'] = $v;
+ }
+ }
if (isset($limits['max_feeds'])) {
- self::$limits['max_feeds'] = intval($limits['max_feeds']);
- if (self::$limits['max_feeds'] < 0 || self::$limits['max_feeds'] > Minz_Configuration::MAX_SMALL_INT) {
- self::$limits['max_feeds'] = Minz_Configuration::MAX_SMALL_INT;
+ $v = intval($limits['max_feeds']);
+ if ($v > 0 && $v < Minz_Configuration::MAX_SMALL_INT) {
+ self::$limits['max_feeds'] = $v;
}
}
if (isset($limits['max_categories'])) {
- self::$limits['max_categories'] = intval($limits['max_categories']);
- if (self::$limits['max_categories'] < 0 || self::$limits['max_categories'] > Minz_Configuration::MAX_SMALL_INT) {
- self::$limits['max_categories'] = Minz_Configuration::MAX_SMALL_INT;
+ $v = intval($limits['max_categories']);
+ if ($v > 0 && $v < Minz_Configuration::MAX_SMALL_INT) {
+ self::$limits['max_categories'] = $v;
}
}
}
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 8ae357f02..3648a4582 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -110,11 +110,12 @@ function html_only_entity_decode($text) {
}
function customSimplePie() {
+ $limits = Minz_Configuration::limits();
$simplePie = new SimplePie();
$simplePie->set_useragent(_t('freshrss') . '/' . FRESHRSS_VERSION . ' (' . PHP_OS . '; ' . FRESHRSS_WEBSITE . ') ' . SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION);
$simplePie->set_cache_location(CACHE_PATH);
- $simplePie->set_cache_duration(800);
- $simplePie->set_timeout(10); //TODO: Make a user setting
+ $simplePie->set_cache_duration($limits['cache_duration']);
+ $simplePie->set_timeout($limits['timeout']);
$simplePie->strip_htmltags(array(
'base', 'blink', 'body', 'doctype', 'embed',
'font', 'form', 'frame', 'frameset', 'html',
--
cgit v1.2.3
From 036240ab01999c8eff1b9b3a98a7313cf43f5836 Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Thu, 30 Oct 2014 19:31:32 +0100
Subject: Fix coding style formatNumber and formatBytes
---
app/views/configure/archiving.phtml | 4 ++--
app/views/stats/index.phtml | 20 ++++++++++----------
app/views/user/manage.phtml | 4 ++--
lib/lib_rss.php | 14 ++++++--------
4 files changed, 20 insertions(+), 22 deletions(-)
(limited to 'lib/lib_rss.php')
diff --git a/app/views/configure/archiving.phtml b/app/views/configure/archiving.phtml
index 410434599..7c2d79343 100644
--- a/app/views/configure/archiving.phtml
+++ b/app/views/configure/archiving.phtml
@@ -60,7 +60,7 @@
@@ -68,7 +68,7 @@
diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml
index ba4258b71..c75810850 100644
--- a/app/views/stats/index.phtml
+++ b/app/views/stats/index.phtml
@@ -18,23 +18,23 @@
|
- repartition['main_stream']['total']); ?> |
- repartition['all_feeds']['total']); ?> |
+ repartition['main_stream']['total']); ?> |
+ repartition['all_feeds']['total']); ?> |
|
- repartition['main_stream']['read']); ?> |
- repartition['all_feeds']['read']); ?> |
+ repartition['main_stream']['read']); ?> |
+ repartition['all_feeds']['read']); ?> |
|
- repartition['main_stream']['unread']); ?> |
- repartition['all_feeds']['unread']); ?> |
+ repartition['main_stream']['unread']); ?> |
+ repartition['all_feeds']['unread']); ?> |
|
- repartition['main_stream']['favorite']); ?> |
- repartition['all_feeds']['favorite']); ?> |
+ repartition['main_stream']['favorite']); ?> |
+ repartition['all_feeds']['favorite']); ?> |
@@ -56,8 +56,8 @@
|
|
- |
- repartition['all_feeds']['total'] * 100, 1);?> |
+ |
+ repartition['all_feeds']['total'] * 100, 1);?> |
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml
index 2bfd633a2..e46e02572 100644
--- a/app/views/user/manage.phtml
+++ b/app/views/user/manage.phtml
@@ -65,8 +65,8 @@
nb_articles),
- formatBytes($this->size_user)); ?>
+ format_number($this->nb_articles),
+ format_bytes($this->size_user)); ?>
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 3648a4582..317c6852f 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -56,16 +56,14 @@ function checkUrl($url) {
}
}
-function formatNumber($n, $precision = 0) {
- return str_replace(' ', ' ', //Espace insécable //TODO: remplacer par une espace _fine_ insécable
- number_format($n, $precision, '.', ' ')); //number_format does not seem to be Unicode-compatible
-}
function format_number($n, $precision = 0) {
- // TODO: coding style, prefer THIS function. Remove formatNumber.
- return formatNumber($n, $precision);
+ // number_format does not seem to be Unicode-compatible
+ return str_replace(' ', ' ', //Espace insécable //TODO: remplacer par une espace _fine_ insécable
+ number_format($n, $precision, '.', ' ')
+ );
}
-function formatBytes($bytes, $precision = 2, $system = 'IEC') {
+function format_bytes($bytes, $precision = 2, $system = 'IEC') {
if ($system === 'IEC') {
$base = 1024;
$units = array('B', 'KiB', 'MiB', 'GiB', 'TiB');
@@ -77,7 +75,7 @@ function formatBytes($bytes, $precision = 2, $system = 'IEC') {
$pow = $bytes === 0 ? 0 : floor(log($bytes) / log($base));
$pow = min($pow, count($units) - 1);
$bytes /= pow($base, $pow);
- return formatNumber($bytes, $precision) . ' ' . $units[$pow];
+ return format_number($bytes, $precision) . ' ' . $units[$pow];
}
function timestamptodate ($t, $hour = true) {
--
cgit v1.2.3
From ba832bef4de4a02df46023b389f752b01d43c98b Mon Sep 17 00:00:00 2001
From: Marien Fressinaud
Date: Thu, 30 Oct 2014 19:34:36 +0100
Subject: Fix TODO in format_number()
---
lib/lib_rss.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'lib/lib_rss.php')
diff --git a/lib/lib_rss.php b/lib/lib_rss.php
index 317c6852f..e7ca95aba 100644
--- a/lib/lib_rss.php
+++ b/lib/lib_rss.php
@@ -58,7 +58,7 @@ function checkUrl($url) {
function format_number($n, $precision = 0) {
// number_format does not seem to be Unicode-compatible
- return str_replace(' ', ' ', //Espace insécable //TODO: remplacer par une espace _fine_ insécable
+ return str_replace(' ', ' ', //Espace fine insécable
number_format($n, $precision, '.', ' ')
);
}
--
cgit v1.2.3