aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rwxr-xr-xapp/Controllers/entryController.php20
-rwxr-xr-xapp/Controllers/feedController.php23
-rwxr-xr-xapp/Controllers/indexController.php2
-rwxr-xr-xapp/Controllers/javascriptController.php4
-rw-r--r--app/Controllers/userController.php11
-rw-r--r--app/FreshRSS.php2
-rw-r--r--app/Models/Category.php2
-rw-r--r--app/Models/CategoryDAO.php2
-rw-r--r--app/Models/Entry.php5
-rw-r--r--app/Models/EntryDAO.php38
-rw-r--r--app/Models/EntryDAOSQLite.php17
-rw-r--r--app/Models/Feed.php15
-rw-r--r--app/Models/FeedDAO.php4
-rw-r--r--app/i18n/cz/admin.php6
-rw-r--r--app/i18n/cz/feedback.php5
-rw-r--r--app/i18n/cz/gen.php1
-rw-r--r--app/i18n/cz/index.php1
-rw-r--r--app/i18n/cz/install.php4
-rw-r--r--app/i18n/de/admin.php6
-rw-r--r--app/i18n/de/feedback.php5
-rw-r--r--app/i18n/de/gen.php3
-rw-r--r--app/i18n/de/index.php1
-rw-r--r--app/i18n/de/install.php4
-rw-r--r--app/i18n/en/admin.php6
-rw-r--r--app/i18n/en/feedback.php5
-rw-r--r--app/i18n/en/gen.php1
-rw-r--r--app/i18n/en/index.php1
-rw-r--r--app/i18n/en/install.php4
-rwxr-xr-xapp/i18n/es/admin.php6
-rwxr-xr-xapp/i18n/es/feedback.php5
-rwxr-xr-xapp/i18n/es/gen.php1
-rwxr-xr-xapp/i18n/es/index.php1
-rwxr-xr-xapp/i18n/es/install.php4
-rw-r--r--app/i18n/fr/admin.php8
-rw-r--r--app/i18n/fr/feedback.php5
-rw-r--r--app/i18n/fr/gen.php1
-rw-r--r--app/i18n/fr/index.php3
-rw-r--r--app/i18n/fr/install.php8
-rw-r--r--app/i18n/he/admin.php10
-rw-r--r--app/i18n/he/feedback.php5
-rw-r--r--app/i18n/he/gen.php1
-rw-r--r--app/i18n/he/index.php1
-rw-r--r--app/i18n/he/install.php10
-rw-r--r--app/i18n/it/admin.php6
-rw-r--r--app/i18n/it/feedback.php5
-rw-r--r--app/i18n/it/gen.php1
-rw-r--r--app/i18n/it/index.php1
-rw-r--r--app/i18n/it/install.php4
-rw-r--r--app/i18n/kr/admin.php12
-rw-r--r--app/i18n/kr/conf.php10
-rw-r--r--app/i18n/kr/feedback.php11
-rw-r--r--app/i18n/kr/gen.php3
-rw-r--r--app/i18n/kr/index.php1
-rw-r--r--app/i18n/kr/install.php6
-rw-r--r--app/i18n/kr/sub.php4
-rw-r--r--app/i18n/nl/admin.php6
-rw-r--r--app/i18n/nl/feedback.php5
-rw-r--r--app/i18n/nl/gen.php1
-rw-r--r--app/i18n/nl/index.php1
-rw-r--r--app/i18n/nl/install.php4
-rw-r--r--app/i18n/pt-br/admin.php6
-rw-r--r--app/i18n/pt-br/feedback.php5
-rw-r--r--app/i18n/pt-br/gen.php1
-rw-r--r--app/i18n/pt-br/index.php1
-rw-r--r--app/i18n/pt-br/install.php6
-rw-r--r--app/i18n/ru/admin.php6
-rw-r--r--app/i18n/ru/feedback.php5
-rw-r--r--app/i18n/ru/gen.php1
-rw-r--r--app/i18n/ru/index.php1
-rw-r--r--app/i18n/ru/install.php4
-rw-r--r--app/i18n/tr/admin.php6
-rw-r--r--app/i18n/tr/feedback.php5
-rw-r--r--app/i18n/tr/gen.php1
-rw-r--r--app/i18n/tr/index.php1
-rw-r--r--app/i18n/tr/install.php4
-rw-r--r--app/i18n/zh-cn/admin.php6
-rw-r--r--app/i18n/zh-cn/feedback.php5
-rw-r--r--app/i18n/zh-cn/gen.php1
-rw-r--r--app/i18n/zh-cn/index.php1
-rw-r--r--app/i18n/zh-cn/install.php4
-rw-r--r--app/install.php8
-rw-r--r--app/layout/header.phtml3
-rw-r--r--app/layout/nav_menu.phtml24
-rw-r--r--app/shares.php6
-rw-r--r--app/views/helpers/export/opml.phtml8
-rw-r--r--app/views/helpers/index/normal/entry_bottom.phtml2
-rw-r--r--app/views/helpers/javascript_vars.phtml2
-rwxr-xr-xapp/views/helpers/pagination.phtml2
-rw-r--r--app/views/stats/index.phtml2
-rw-r--r--app/views/stats/repartition.phtml2
90 files changed, 350 insertions, 127 deletions
diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php
index 73e181b07..16a15c447 100755
--- a/app/Controllers/entryController.php
+++ b/app/Controllers/entryController.php
@@ -40,6 +40,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
$get = Minz_Request::param('get');
$next_get = Minz_Request::param('nextGet', $get);
$id_max = Minz_Request::param('idMax', 0);
+ $is_read = (bool)(Minz_Request::param('is_read', true));
FreshRSS_Context::$search = new FreshRSS_BooleanSearch(Minz_Request::param('search', ''));
FreshRSS_Context::$state = Minz_Request::param('state', 0);
@@ -63,39 +64,38 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
if (!$get) {
// No get? Mark all entries as read (from $id_max)
- $entryDAO->markReadEntries($id_max);
+ $entryDAO->markReadEntries($id_max, $is_read);
} else {
$type_get = $get[0];
$get = substr($get, 2);
switch($type_get) {
case 'c':
- $entryDAO->markReadCat($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state);
+ $entryDAO->markReadCat($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
break;
case 'f':
- $entryDAO->markReadFeed($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state);
+ $entryDAO->markReadFeed($get, $id_max, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
break;
case 's':
- $entryDAO->markReadEntries($id_max, true, 0, FreshRSS_Context::$search);
+ $entryDAO->markReadEntries($id_max, true, 0, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
break;
case 'a':
- $entryDAO->markReadEntries($id_max, false, 0, FreshRSS_Context::$search, FreshRSS_Context::$state);
+ $entryDAO->markReadEntries($id_max, false, 0, FreshRSS_Context::$search, FreshRSS_Context::$state, $is_read);
break;
}
if ($next_get !== 'a') {
// Redirect to the correct page (category, feed or starred)
- // Not "a" because it is the default value if nothing is
- // given.
+ // Not "a" because it is the default value if nothing is given.
$params['get'] = $next_get;
}
}
} else {
- $is_read = (bool)(Minz_Request::param('is_read', true));
$entryDAO->markRead($id, $is_read);
}
if (!$this->ajax) {
- Minz_Request::good(_t('feedback.sub.feed.marked_read'), array(
+ Minz_Request::good(_t($is_read ? 'feedback.sub.articles.marked_read' : 'feedback.sub.articles.marked_unread'),
+ array(
'c' => 'index',
'a' => 'index',
'params' => $params,
@@ -186,7 +186,7 @@ class FreshRSS_entry_Controller extends Minz_ActionController {
$nb = $entryDAO->cleanOldEntries($feed->id(), $date_min, $feed_history);
if ($nb > 0) {
$nb_total += $nb;
- Minz_Log::debug($nb . ' old entries cleaned in feed [' . $feed->url() . ']');
+ Minz_Log::debug($nb . ' old entries cleaned in feed [' . $feed->url(false) . ']');
}
}
}
diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php
index ec88156f9..2f7495884 100755
--- a/app/Controllers/feedController.php
+++ b/app/Controllers/feedController.php
@@ -295,12 +295,12 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
if ($feed->lastUpdate() + 10 >= $mtime) {
continue; //Nothing newer from other users
}
- //Minz_Log::debug($feed->url() . ' was updated at ' . date('c', $mtime) . ' by another user');
+ //Minz_Log::debug($feed->url(false) . ' was updated at ' . date('c', $mtime) . ' by another user');
//Will take advantage of the newer cache
}
if (!$feed->lock()) {
- Minz_Log::notice('Feed already being actualized: ' . $feed->url());
+ Minz_Log::notice('Feed already being actualized: ' . $feed->url(false));
continue;
}
@@ -351,7 +351,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
//This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3
$oldGuids[] = $entry->guid();
} else { //This entry already exists but has been updated
- //Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->url() .
+ //Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->url(false) .
//', old hash ' . $existingHash . ', new hash ' . $entry->hash());
$mark_updated_article_unread = $feed->attributes('mark_updated_article_unread') !== null ? (
$feed->attributes('mark_updated_article_unread')
@@ -413,7 +413,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
$entryDAO->updateLastSeen($feed->id(), $oldGuids, $mtime);
}
- if ($feed_history >= 0 && rand(0, 30) === 1) {
+ if ($feed_history >= 0 && mt_rand(0, 30) === 1) {
// TODO: move this function in web cron when available (see entry::purge)
// Remove old entries once in 30.
if (!$entryDAO->inTransaction()) {
@@ -425,8 +425,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
max($feed_history, count($entries) + 10));
if ($nb > 0) {
$needFeedCacheRefresh = true;
- Minz_Log::debug($nb . ' old entries cleaned in feed [' .
- $feed->url() . ']');
+ Minz_Log::debug($nb . ' old entries cleaned in feed [' . $feed->url(false) . ']');
}
}
@@ -442,25 +441,25 @@ class FreshRSS_feed_Controller extends Minz_ActionController {
if ($feed->selfUrl() !== $url) { //https://code.google.com/p/pubsubhubbub/wiki/MovingFeedsOrChangingHubs
$selfUrl = checkUrl($feed->selfUrl());
if ($selfUrl) {
- Minz_Log::debug('PubSubHubbub unsubscribe ' . $feed->url());
+ Minz_Log::debug('PubSubHubbub unsubscribe ' . $feed->url(false));
if (!$feed->pubSubHubbubSubscribe(false)) { //Unsubscribe
- Minz_Log::warning('Error while PubSubHubbub unsubscribing from ' . $feed->url());
+ Minz_Log::warning('Error while PubSubHubbub unsubscribing from ' . $feed->url(false));
}
$feed->_url($selfUrl, false);
- Minz_Log::notice('Feed ' . $url . ' canonical address moved to ' . $feed->url());
+ Minz_Log::notice('Feed ' . $url . ' canonical address moved to ' . $feed->url(false));
$feedDAO->updateFeed($feed->id(), array('url' => $feed->url()));
}
}
} elseif ($feed->url() !== $url) { // HTTP 301 Moved Permanently
- Minz_Log::notice('Feed ' . $url . ' moved permanently to ' . $feed->url());
+ Minz_Log::notice('Feed ' . $url . ' moved permanently to ' . $feed->url(false));
$feedDAO->updateFeed($feed->id(), array('url' => $feed->url()));
}
$feed->faviconPrepare();
if ($pubsubhubbubEnabledGeneral && $feed->pubSubHubbubPrepare()) {
- Minz_Log::notice('PubSubHubbub subscribe ' . $feed->url());
+ Minz_Log::notice('PubSubHubbub subscribe ' . $feed->url(false));
if (!$feed->pubSubHubbubSubscribe(true)) { //Subscribe
- Minz_Log::warning('Error while PubSubHubbub subscribing to ' . $feed->url());
+ Minz_Log::warning('Error while PubSubHubbub subscribing to ' . $feed->url(false));
}
}
$feed->unlock();
diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php
index 8567b4657..ddffdba73 100755
--- a/app/Controllers/indexController.php
+++ b/app/Controllers/indexController.php
@@ -139,7 +139,7 @@ class FreshRSS_index_Controller extends Minz_ActionController {
}
// No layout for RSS output.
- $this->view->url = empty($_SERVER['QUERY_STRING']) ? '' : '?' . $_SERVER['QUERY_STRING'];
+ $this->view->url = PUBLIC_TO_INDEX_PATH . '/' . (empty($_SERVER['QUERY_STRING']) ? '' : '?' . $_SERVER['QUERY_STRING']);
$this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title();
$this->view->_useLayout(false);
header('Content-Type: application/rss+xml; charset=utf-8');
diff --git a/app/Controllers/javascriptController.php b/app/Controllers/javascriptController.php
index 6336106a9..9d7acf647 100755
--- a/app/Controllers/javascriptController.php
+++ b/app/Controllers/javascriptController.php
@@ -47,8 +47,8 @@ class FreshRSS_javascript_Controller extends Minz_ActionController {
$this->view->salt1 = sprintf('$2a$%02d$', FreshRSS_user_Controller::BCRYPT_COST);
$alphabet = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
for ($i = 22; $i > 0; $i--) {
- $this->view->salt1 .= $alphabet[rand(0, 63)];
+ $this->view->salt1 .= $alphabet[mt_rand(0, 63)];
}
- $this->view->nonce = sha1(rand());
+ $this->view->nonce = sha1(mt_rand());
}
}
diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php
index 47f0ecc62..75a4303d6 100644
--- a/app/Controllers/userController.php
+++ b/app/Controllers/userController.php
@@ -230,6 +230,17 @@ class FreshRSS_user_Controller extends Minz_ActionController {
$_POST['new_user_passwordPlain'] = '';
invalidateHttpCache();
+ // If the user has admin access, it means he's already logged in
+ // and we don't want to login with the new account. Otherwise, the
+ // user just created its account himself so he probably wants to
+ // get started immediately.
+ if ($ok && !FreshRSS_Auth::hasAccess('admin')) {
+ $user_conf = get_user_configuration($new_user_name);
+ Minz_Session::_param('currentUser', $new_user_name);
+ Minz_Session::_param('passwordHash', $user_conf->passwordHash);
+ FreshRSS_Auth::giveAccess();
+ }
+
$notif = array(
'type' => $ok ? 'good' : 'bad',
'content' => _t('feedback.user.created' . (!$ok ? '.error' : ''), $new_user_name)
diff --git a/app/FreshRSS.php b/app/FreshRSS.php
index 25fd429a2..2bd5135a9 100644
--- a/app/FreshRSS.php
+++ b/app/FreshRSS.php
@@ -66,7 +66,7 @@ class FreshRSS extends Minz_FrontController {
403,
array('error' => array(
_t('feedback.access.denied'),
- ' [HTTP_REFERER=' . htmlspecialchars($http_referer) . ']'
+ ' [HTTP_REFERER=' . htmlspecialchars($http_referer, ENT_NOQUOTES, 'UTF-8') . ']'
))
);
}
diff --git a/app/Models/Category.php b/app/Models/Category.php
index 9a44a2d09..197faf942 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -68,7 +68,7 @@ class FreshRSS_Category extends Minz_Model {
$this->id = $value;
}
public function _name($value) {
- $this->name = substr(trim($value), 0, 255);
+ $this->name = mb_strcut(trim($value), 0, 255, 'UTF-8');
}
public function _feeds($values) {
if (!is_array($values)) {
diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php
index ef2c402a0..cf6b3bae3 100644
--- a/app/Models/CategoryDAO.php
+++ b/app/Models/CategoryDAO.php
@@ -9,7 +9,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
$stm = $this->bd->prepare($sql);
$values = array(
- substr($valuesTmp['name'], 0, 255),
+ mb_strcut($valuesTmp['name'], 0, 255, 'UTF-8'),
);
if ($stm && $stm->execute($values)) {
diff --git a/app/Models/Entry.php b/app/Models/Entry.php
index 2b6059638..ccbad5724 100644
--- a/app/Models/Entry.php
+++ b/app/Models/Entry.php
@@ -31,6 +31,7 @@ class FreshRSS_Entry extends Minz_Model {
$this->_isRead($is_read);
$this->_isFavorite($is_favorite);
$this->_feedId($feedId);
+ $tags = mb_strcut($tags, 0, 1023, 'UTF-8');
$this->_tags(preg_split('/[\s#]/', $tags));
$this->_guid($guid);
}
@@ -123,11 +124,11 @@ class FreshRSS_Entry extends Minz_Model {
}
public function _title($value) {
$this->hash = null;
- $this->title = $value;
+ $this->title = mb_strcut($value, 0, 255, 'UTF-8');
}
public function _author($value) {
$this->hash = null;
- $this->author = $value;
+ $this->author = mb_strcut($value, 0, 255, 'UTF-8');
}
public function _content($value) {
$this->hash = null;
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index 59f826c3e..f0e164995 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -160,9 +160,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 760);
$valuesTmp['guid'] = safe_ascii($valuesTmp['guid']);
$this->addEntryPrepared->bindParam(':guid', $valuesTmp['guid']);
- $valuesTmp['title'] = substr($valuesTmp['title'], 0, 255);
+ $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 255, 'UTF-8');
$this->addEntryPrepared->bindParam(':title', $valuesTmp['title']);
- $valuesTmp['author'] = substr($valuesTmp['author'], 0, 255);
+ $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 255, 'UTF-8');
$this->addEntryPrepared->bindParam(':author', $valuesTmp['author']);
$this->addEntryPrepared->bindParam(':content', $valuesTmp['content']);
$valuesTmp['link'] = substr($valuesTmp['link'], 0, 1023);
@@ -176,7 +176,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$valuesTmp['is_favorite'] = $valuesTmp['is_favorite'] ? 1 : 0;
$this->addEntryPrepared->bindParam(':is_favorite', $valuesTmp['is_favorite'], PDO::PARAM_INT);
$this->addEntryPrepared->bindParam(':id_feed', $valuesTmp['id_feed'], PDO::PARAM_INT);
- $valuesTmp['tags'] = substr($valuesTmp['tags'], 0, 1023);
+ $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 1023, 'UTF-8');
$this->addEntryPrepared->bindParam(':tags', $valuesTmp['tags']);
if ($this->hasNativeHex()) {
@@ -243,9 +243,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 760);
$this->updateEntryPrepared->bindParam(':guid', $valuesTmp['guid']);
- $valuesTmp['title'] = substr($valuesTmp['title'], 0, 255);
+ $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 255, 'UTF-8');
$this->updateEntryPrepared->bindParam(':title', $valuesTmp['title']);
- $valuesTmp['author'] = substr($valuesTmp['author'], 0, 255);
+ $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 255, 'UTF-8');
$this->updateEntryPrepared->bindParam(':author', $valuesTmp['author']);
$this->updateEntryPrepared->bindParam(':content', $valuesTmp['content']);
$valuesTmp['link'] = substr($valuesTmp['link'], 0, 1023);
@@ -258,7 +258,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$this->updateEntryPrepared->bindValue(':is_read', $valuesTmp['is_read'] ? 1 : 0, PDO::PARAM_INT);
}
$this->updateEntryPrepared->bindParam(':id_feed', $valuesTmp['id_feed'], PDO::PARAM_INT);
- $valuesTmp['tags'] = substr($valuesTmp['tags'], 0, 1023);
+ $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 1023, 'UTF-8');
$this->updateEntryPrepared->bindParam(':tags', $valuesTmp['tags']);
if ($this->hasNativeHex()) {
@@ -437,7 +437,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $priorityMin
* @return integer affected rows
*/
- public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0) {
+ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0, $is_read = true) {
FreshRSS_UserDAO::touch();
if ($idMax == 0) {
$idMax = time() . '000000';
@@ -445,14 +445,14 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
$sql = 'UPDATE `' . $this->prefix . 'entry` e INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id '
- . 'SET e.is_read=1 '
- . 'WHERE e.is_read=0 AND e.id <= ?';
+ . 'SET e.is_read=? '
+ . 'WHERE e.is_read <> ? AND e.id <= ?';
if ($onlyFavorites) {
$sql .= ' AND e.is_favorite=1';
} elseif ($priorityMin >= 0) {
$sql .= ' AND f.priority > ' . intval($priorityMin);
}
- $values = array($idMax);
+ $values = array($is_read ? 1 : 0, $is_read ? 1 : 0, $idMax);
list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filters, $state);
@@ -480,7 +480,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadCat($id, $idMax = 0, $filters = null, $state = 0) {
+ public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_read = true) {
FreshRSS_UserDAO::touch();
if ($idMax == 0) {
$idMax = time() . '000000';
@@ -488,9 +488,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
}
$sql = 'UPDATE `' . $this->prefix . 'entry` e INNER JOIN `' . $this->prefix . 'feed` f ON e.id_feed=f.id '
- . 'SET e.is_read=1 '
- . 'WHERE f.category=? AND e.is_read=0 AND e.id <= ?';
- $values = array($id, $idMax);
+ . 'SET e.is_read=? '
+ . 'WHERE f.category=? AND e.is_read <> ? AND e.id <= ?';
+ $values = array($is_read ? 1 : 0, $id, $is_read ? 1 : 0, $idMax);
list($searchValues, $search) = $this->sqlListEntriesWhere('e.', $filters, $state);
@@ -518,7 +518,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadFeed($id_feed, $idMax = 0, $filters = null, $state = 0) {
+ public function markReadFeed($id_feed, $idMax = 0, $filters = null, $state = 0, $is_read = true) {
FreshRSS_UserDAO::touch();
if ($idMax == 0) {
$idMax = time() . '000000';
@@ -527,9 +527,9 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$this->bd->beginTransaction();
$sql = 'UPDATE `' . $this->prefix . 'entry` '
- . 'SET is_read=1 '
- . 'WHERE id_feed=? AND is_read=0 AND id <= ?';
- $values = array($id_feed, $idMax);
+ . 'SET is_read=? '
+ . 'WHERE id_feed=? AND is_read <> ? AND id <= ?';
+ $values = array($is_read ? 1 : 0, $id_feed, $is_read ? 1 : 0, $idMax);
list($searchValues, $search) = $this->sqlListEntriesWhere('', $filters, $state);
@@ -909,6 +909,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$stm = $this->bd->prepare($sql);
$stm->execute();
$res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
+ rsort($res);
$all = empty($res[0]) ? 0 : $res[0];
$unread = empty($res[1]) ? 0 : $res[1];
return array('all' => $all, 'unread' => $unread, 'read' => $all - $unread);
@@ -963,6 +964,7 @@ SQL;
$stm = $this->bd->prepare($sql);
$stm->execute(array(':priority_normal' => FreshRSS_Feed::PRIORITY_NORMAL));
$res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
+ rsort($res);
$all = empty($res[0]) ? 0 : $res[0];
$unread = empty($res[1]) ? 0 : $res[1];
return array('all' => $all, 'unread' => $unread, 'read' => $all - $unread);
diff --git a/app/Models/EntryDAOSQLite.php b/app/Models/EntryDAOSQLite.php
index cca970e36..944de8470 100644
--- a/app/Models/EntryDAOSQLite.php
+++ b/app/Models/EntryDAOSQLite.php
@@ -101,6 +101,7 @@ DROP TABLE IF EXISTS `tmp`;
* @return integer affected rows
*/
public function markRead($ids, $is_read = true) {
+ FreshRSS_UserDAO::touch();
if (is_array($ids)) { //Many IDs at once (used by API)
if (true) { //Speed heuristics //TODO: Not implemented yet for SQLite (so always call IDs one by one)
$affected = 0;
@@ -159,19 +160,20 @@ DROP TABLE IF EXISTS `tmp`;
* @param integer $priorityMin
* @return integer affected rows
*/
- public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0) {
+ public function markReadEntries($idMax = 0, $onlyFavorites = false, $priorityMin = 0, $filters = null, $state = 0, $is_read = true) {
+ FreshRSS_UserDAO::touch();
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadEntries(0) is deprecated!');
}
- $sql = 'UPDATE `' . $this->prefix . 'entry` SET is_read=1 WHERE is_read=0 AND id <= ?';
+ $sql = 'UPDATE `' . $this->prefix . 'entry` SET is_read = ? WHERE is_read <> ? AND id <= ?';
if ($onlyFavorites) {
$sql .= ' AND is_favorite=1';
} elseif ($priorityMin >= 0) {
$sql .= ' AND id_feed IN (SELECT f.id FROM `' . $this->prefix . 'feed` f WHERE f.priority > ' . intval($priorityMin) . ')';
}
- $values = array($idMax);
+ $values = array($is_read ? 1 : 0, $is_read ? 1 : 0, $idMax);
list($searchValues, $search) = $this->sqlListEntriesWhere('', $filters, $state);
@@ -199,17 +201,18 @@ DROP TABLE IF EXISTS `tmp`;
* @param integer $idMax fail safe article ID
* @return integer affected rows
*/
- public function markReadCat($id, $idMax = 0, $filters = null, $state = 0) {
+ public function markReadCat($id, $idMax = 0, $filters = null, $state = 0, $is_read = true) {
+ FreshRSS_UserDAO::touch();
if ($idMax == 0) {
$idMax = time() . '000000';
Minz_Log::debug('Calling markReadCat(0) is deprecated!');
}
$sql = 'UPDATE `' . $this->prefix . 'entry` '
- . 'SET is_read=1 '
- . 'WHERE is_read=0 AND id <= ? AND '
+ . 'SET is_read = ? '
+ . 'WHERE is_read <> ? AND id <= ? AND '
. 'id_feed IN (SELECT f.id FROM `' . $this->prefix . 'feed` f WHERE f.category=?)';
- $values = array($idMax, $id);
+ $values = array($is_read ? 1 : 0, $is_read ? 1 : 0, $idMax, $id);
list($searchValues, $search) = $this->sqlListEntriesWhere('', $filters, $state);
diff --git a/app/Models/Feed.php b/app/Models/Feed.php
index 89eb0a53c..ed381a867 100644
--- a/app/Models/Feed.php
+++ b/app/Models/Feed.php
@@ -59,8 +59,8 @@ class FreshRSS_Feed extends Minz_Model {
return $this->hash;
}
- public function url() {
- return $this->url;
+ public function url($includeCredentials = true) {
+ return $includeCredentials ? $this->url : SimplePie_Misc::url_remove_credentials($this->url);
}
public function selfUrl() {
return $this->selfUrl;
@@ -341,7 +341,7 @@ class FreshRSS_Feed extends Minz_Model {
foreach ($feed->get_items() as $item) {
$title = html_only_entity_decode(strip_tags($item->get_title()));
- $author = $item->get_author();
+ $authors = $item->get_authors();
$link = $item->get_permalink();
$date = @strtotime($item->get_date());
@@ -409,12 +409,19 @@ class FreshRSS_Feed extends Minz_Model {
$guid = $item->get_id(false, false);
$hasUniqueGuids &= empty($guids['_' . $guid]);
$guids['_' . $guid] = true;
+ $author_names = '';
+ if (is_array($authors)) {
+ foreach ($authors as $author) {
+ $author_names .= html_only_entity_decode(strip_tags($author->name == '' ? $author->email : $author->name)) . ', ';
+ }
+ }
+ $author_names = substr($author_names, 0, -2);
$entry = new FreshRSS_Entry(
$this->id(),
$guid,
$title === null ? '' : $title,
- $author === null ? '' : html_only_entity_decode(strip_tags($author->name == null ? $author->email : $author->name)),
+ $author_names,
$content === null ? '' : $content,
$link === null ? '' : $link,
$date ? $date : time()
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index 9d980c139..285f17193 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -55,9 +55,9 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$values = array(
substr($valuesTmp['url'], 0, 511),
$valuesTmp['category'],
- substr($valuesTmp['name'], 0, 255),
+ mb_strcut($valuesTmp['name'], 0, 255, 'UTF-8'),
substr($valuesTmp['website'], 0, 255),
- substr($valuesTmp['description'], 0, 1023),
+ mb_strcut($valuesTmp['description'], 0, 1023, 'UTF-8'),
$valuesTmp['lastUpdate'],
base64_encode($valuesTmp['httpAuth']),
FreshRSS_Feed::KEEP_HISTORY_DEFAULT,
diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php
index d414ffd07..78a4a52e4 100644
--- a/app/i18n/cz/admin.php
+++ b/app/i18n/cz/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Instalace souborů',
'json' => array(
- 'nok' => 'Nemáte JSON (balíček php5-json).',
+ 'nok' => 'Nemáte JSON (balíček php-json).',
'ok' => 'Máte rozšíření JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Nemáte framework Minz.',
'ok' => 'Máte framework Minz.',
diff --git a/app/i18n/cz/feedback.php b/app/i18n/cz/feedback.php
index ff9c87d12..fe85a3599 100644
--- a/app/i18n/cz/feedback.php
+++ b/app/i18n/cz/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Aktualizovat',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Kategorie %s byla vytvořena.',
'deleted' => 'Kategorie byla smazána.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Kanál nelze aktualizovat',
'internal_problem' => 'RSS kanál nelze přidat. Pro detaily <a href="%s">zkontrolujte logy FreshRSS</a>.', // @todo
'invalid_url' => 'URL <em>%s</em> není platné',
- 'marked_read' => 'Kanály byly označeny jako přečtené',
'n_actualized' => '%d kanálů bylo aktualizováno',
'n_entries_deleted' => '%d článků bylo smazáno',
'no_refresh' => 'Nelze obnovit žádné kanály…',
diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php
index 09a8307ff..66c011da3 100644
--- a/app/i18n/cz/gen.php
+++ b/app/i18n/cz/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/cz/index.php b/app/i18n/cz/index.php
index cb0e5955d..48a28d4da 100644
--- a/app/i18n/cz/index.php
+++ b/app/i18n/cz/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Označit vše jako přečtené',
'mark_cat_read' => 'Označit kategorii jako přečtenou',
'mark_feed_read' => 'Označit kanál jako přečtený',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Nové nejdříve',
'non-starred' => 'Zobrazit vše vyjma oblíbených',
'normal_view' => 'Normální',
diff --git a/app/i18n/cz/install.php b/app/i18n/cz/install.php
index ea4812ea5..acdb48ab6 100644
--- a/app/i18n/cz/install.php
+++ b/app/i18n/cz/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'Pro parsování JSON chybí doporučená knihovna.',
'ok' => 'Máte doporučenou knihovnu pro parsování JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Nemáte framework Minz.',
'ok' => 'Máte framework Minz.',
diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php
index f03e6cdaf..fbeb80296 100644
--- a/app/i18n/de/admin.php
+++ b/app/i18n/de/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Datei-Installation',
'json' => array(
- 'nok' => 'Ihnen fehlt die JSON-Erweiterung (Paket php5-json).',
+ 'nok' => 'Ihnen fehlt die JSON-Erweiterung (Paket php-json).',
'ok' => 'Sie haben die JSON-Erweiterung.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Ihnen fehlt das Minz-Framework.',
'ok' => 'Sie haben das Minz-Framework.',
diff --git a/app/i18n/de/feedback.php b/app/i18n/de/feedback.php
index 2c46bbe56..c20f58487 100644
--- a/app/i18n/de/feedback.php
+++ b/app/i18n/de/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Aktualisieren',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Die Kategorie %s ist erstellt worden.',
'deleted' => 'Die Kategorie ist gelöscht worden.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Der Feed kann nicht aktualisiert werden',
'internal_problem' => 'Der RSS-Feed konnte nicht hinzugefügt werden. Für Details <a href="%s">prüfen Sie die FreshRSS-Protokolle</a>.', // @todo
'invalid_url' => 'Die URL <em>%s</em> ist ungültig',
- 'marked_read' => 'Die Feeds sind als gelesen markiert worden',
'n_actualized' => 'Die %d Feeds sind aktualisiert worden',
'n_entries_deleted' => 'Die %d Artikel sind gelöscht worden',
'no_refresh' => 'Es gibt keinen Feed zum Aktualisieren…',
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 7dbaac384..eb1e74ed6 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -59,7 +59,7 @@ return array(
'april' => 'April',
'aug' => 'Aug',
'august' => 'August',
- 'before_yesterday' => 'Vor vorgestern',
+ 'before_yesterday' => 'Ältere Beiträge',
'dec' => 'Dez',
'december' => 'Dezember',
'feb' => 'Feb',
@@ -167,6 +167,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php
index df92d8085..1fa3e3933 100644
--- a/app/i18n/de/index.php
+++ b/app/i18n/de/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Alle als gelesen markieren',
'mark_cat_read' => 'Kategorie als gelesen markieren',
'mark_feed_read' => 'Feed als gelesen markieren',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Neuere zuerst',
'non-starred' => 'Alle außer Favoriten zeigen',
'normal_view' => 'Normale Ansicht',
diff --git a/app/i18n/de/install.php b/app/i18n/de/install.php
index b747d1551..d28b22840 100644
--- a/app/i18n/de/install.php
+++ b/app/i18n/de/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'Ihnen fehlt eine empfohlene Bibliothek um JSON zu parsen.',
'ok' => 'Sie haben eine empfohlene Bibliothek um JSON zu parsen.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Ihnen fehlt das Minz-Framework.',
'ok' => 'Sie haben das Minz-Framework.',
diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php
index 1f857dbab..9db14978f 100644
--- a/app/i18n/en/admin.php
+++ b/app/i18n/en/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'File installation',
'json' => array(
- 'nok' => 'Cannot find JSON (php5-json package).',
+ 'nok' => 'Cannot find JSON (php-json package).',
'ok' => 'You have JSON extension.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.',
+ 'ok' => 'You have the recommended library mbstring for Unicode.',
+ ),
'minz' => array(
'nok' => 'Cannot find the Minz framework.',
'ok' => 'You have the Minz framework.',
diff --git a/app/i18n/en/feedback.php b/app/i18n/en/feedback.php
index a7fbda3a0..634b547f7 100644
--- a/app/i18n/en/feedback.php
+++ b/app/i18n/en/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Updating',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.',
+ 'marked_unread' => 'The articles have been marked as unread.',
+ ),
'category' => array(
'created' => 'Category %s has been created.',
'deleted' => 'Category has been deleted.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Feed cannot be updated',
'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.',
'invalid_url' => 'URL <em>%s</em> is invalid',
- 'marked_read' => 'Feeds have been marked as read',
'n_actualized' => '%d feeds have been updated',
'n_entries_deleted' => '%d articles have been deleted',
'no_refresh' => 'There is no feed to refresh…',
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index ceee25105..34e81af2e 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -168,6 +168,7 @@ return array(
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
'Known' => 'Known based sites',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php
index 29dccc9ed..1c13abdb7 100644
--- a/app/i18n/en/index.php
+++ b/app/i18n/en/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Mark all as read',
'mark_cat_read' => 'Mark category as read',
'mark_feed_read' => 'Mark feed as read',
+ 'mark_selection_unread' => 'Mark selection as unread',
'newer_first' => 'Newer first',
'non-starred' => 'Show non-favourites',
'normal_view' => 'Normal view',
diff --git a/app/i18n/en/install.php b/app/i18n/en/install.php
index 40fff37dd..53d2f9be0 100644
--- a/app/i18n/en/install.php
+++ b/app/i18n/en/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'Cannot find a recommended library to parse JSON.',
'ok' => 'You have a recommended library to parse JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Cannot find the Minz framework.',
'ok' => 'You have the Minz framework.',
diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php
index 2884721c7..db41057bf 100755
--- a/app/i18n/es/admin.php
+++ b/app/i18n/es/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Instalación de Archivos',
'json' => array(
- 'nok' => 'No se ha podido localizar JSON (paquete php5-json).',
+ 'nok' => 'No se ha podido localizar JSON (paquete php-json).',
'ok' => 'Dispones de la extensión JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'No se ha podido localizar el entorno Minz.',
'ok' => 'Dispones del entorno Minz.',
diff --git a/app/i18n/es/feedback.php b/app/i18n/es/feedback.php
index 627c86afc..38548e901 100755
--- a/app/i18n/es/feedback.php
+++ b/app/i18n/es/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Actualización',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Se ha creado la categoría %s.',
'deleted' => 'Se ha eliminado la categoría.',
@@ -74,7 +78,6 @@ return array(
'error' => 'No es posible actualizar la fuente',
'internal_problem' => 'No ha sido posible agregar la fuente RSS. <a href="%s">Revisa el registro de FreshRSS </a> para más información.', // @todo
'invalid_url' => 'La URL <em>%s</em> es inválida',
- 'marked_read' => 'Fuentes marcadas como leídas',
'n_actualized' => 'Se han actualiado %d fuentes',
'n_entries_deleted' => 'Se han eliminado %d artículos',
'no_refresh' => 'No hay fuente a actualizar…',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index a5957e12f..4dc1145b2 100755
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php
index 03054e23a..c88152459 100755
--- a/app/i18n/es/index.php
+++ b/app/i18n/es/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Marcar todo como leído',
'mark_cat_read' => 'Marcar categoría como leída',
'mark_feed_read' => 'Marcar fuente como leída',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Nuevos primero',
'non-starred' => 'Mostrar todos menos los favoritos',
'normal_view' => 'Vista normal',
diff --git a/app/i18n/es/install.php b/app/i18n/es/install.php
index cd6f63432..a9be807c7 100755
--- a/app/i18n/es/install.php
+++ b/app/i18n/es/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'No se ha podido localizar la librería para procesar JSON.',
'ok' => 'Dispones de la librería recomendada para procesar JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'No se ha podido localizar el entorno Minz.',
'ok' => 'Dispones del entorno Minz.',
diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php
index 6c582d719..1874f2c77 100644
--- a/app/i18n/fr/admin.php
+++ b/app/i18n/fr/admin.php
@@ -63,8 +63,12 @@ return array(
),
'files' => 'Installation des fichiers',
'json' => array(
- 'nok' => 'Vous ne disposez pas de JSON (paquet php5-json).',
- 'ok' => 'Vous disposez de l’extension JSON.',
+ 'nok' => 'Vous ne disposez pas de l’extension recommendée JSON (paquet php-json).',
+ 'ok' => 'Vous disposez de l’extension recommendée JSON.',
+ ),
+ 'mbstring' => array(
+ 'nok' => 'Impossible de trouver la librairie recommandée mbstring pour Unicode.',
+ 'ok' => 'Vouz disposez de la librairie recommandée mbstring pour Unicode.',
),
'minz' => array(
'nok' => 'Vous ne disposez pas de la librairie Minz.',
diff --git a/app/i18n/fr/feedback.php b/app/i18n/fr/feedback.php
index 2443ad30a..dafdd353d 100644
--- a/app/i18n/fr/feedback.php
+++ b/app/i18n/fr/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Actualiser',
+ 'articles' => array(
+ 'marked_read' => 'Les articles sélectionnés ont été marqués comme lus.',
+ 'marked_unread' => 'Les articles sélectionnés ont été marqués comme non-lus.',
+ ),
'category' => array(
'created' => 'La catégorie %s a été créée.',
'deleted' => 'La catégorie a été supprimée.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Une erreur est survenue',
'internal_problem' => 'Le flux ne peut pas être ajouté. <a href="%s">Consulter les logs de FreshRSS</a> pour plus de détails. Vous pouvez essayer de forcer l’ajout par addition de <code>#force_feed</code> à l’URL.',
'invalid_url' => 'L’url <em>%s</em> est invalide.',
- 'marked_read' => 'Les flux ont été marqués comme lus.',
'n_actualized' => '%d flux ont été mis à jour.',
'n_entries_deleted' => '%d articles ont été supprimés.',
'no_refresh' => 'Il n’y a aucun flux à actualiser…',
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index 24c4b82fb..13e19283f 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php
index 0a3a4abb3..bb0d14faf 100644
--- a/app/i18n/fr/index.php
+++ b/app/i18n/fr/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Tout marquer comme lu',
'mark_cat_read' => 'Marquer la catégorie comme lue',
'mark_feed_read' => 'Marquer le flux comme lu',
+ 'mark_selection_unread' => 'Marquer la sélection comme non-lue',
'newer_first' => 'Plus récents en premier',
'non-starred' => 'Afficher les non-favoris',
'normal_view' => 'Vue normale',
@@ -52,7 +53,7 @@ return array(
'starred' => 'Afficher les favoris',
'stats' => 'Statistiques',
'subscription' => 'Gestion des abonnements',
- 'unread' => 'Afficher les non lus',
+ 'unread' => 'Afficher les non-lus',
),
'share' => 'Partager',
'tag' => array(
diff --git a/app/i18n/fr/install.php b/app/i18n/fr/install.php
index 09625de78..9f2d90195 100644
--- a/app/i18n/fr/install.php
+++ b/app/i18n/fr/install.php
@@ -65,8 +65,12 @@ return array(
'ok' => 'Le HTTP REFERER est connu et semble correspondre à votre serveur.',
),
'json' => array(
- 'nok' => 'Impossible de trouver une librairie recommandée pour JSON.',
- 'ok' => 'Vouz disposez de la librairie recommandée pour JSON.',
+ 'nok' => 'Vous ne disposez pas de l’extension recommendée JSON (paquet php-json).',
+ 'ok' => 'Vous disposez de l’extension recommendée JSON.',
+ ),
+ 'mbstring' => array(
+ 'nok' => 'Impossible de trouver la librairie recommandée mbstring pour Unicode.',
+ 'ok' => 'Vouz disposez de la librairie recommandée mbstring pour Unicode.',
),
'minz' => array(
'nok' => 'Vous ne disposez pas de la librairie Minz.',
diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php
index 2840213c9..71f86357e 100644
--- a/app/i18n/he/admin.php
+++ b/app/i18n/he/admin.php
@@ -33,7 +33,7 @@ return array(
'ok' => 'הספרייה הנדרשת ל character type checking (ctype) מותקנת',
),
'curl' => array(
- 'nok' => 'בURL לא מותקן (php5-curl package)',
+ 'nok' => 'בURL לא מותקן (php-curl package)',
'ok' => 'You have cURL extension.', // @todo
),
'data' => array(
@@ -63,9 +63,13 @@ return array(
),
'files' => 'File installation', // @todo
'json' => array(
- 'nok' => 'You lack JSON (php5-json package).', // @todo
+ 'nok' => 'You lack JSON (php-json package).', // @todo
'ok' => 'You have JSON extension.', // @todo
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'You lack the Minz framework.', // @todo
'ok' => 'יש לכם את תשתית Minz',
@@ -97,7 +101,7 @@ return array(
'ok' => 'Permissions on users directory are good.', // @todo
),
'zip' => array(
- 'nok' => 'You lack ZIP extension (php5-zip package).', // @todo
+ 'nok' => 'You lack ZIP extension (php-zip package).', // @todo
'ok' => 'You have ZIP extension.', // @todo
),
),
diff --git a/app/i18n/he/feedback.php b/app/i18n/he/feedback.php
index 4b79b0d45..369714795 100644
--- a/app/i18n/he/feedback.php
+++ b/app/i18n/he/feedback.php
@@ -53,6 +53,10 @@ return array(
),
'sub' => array(
'actualize' => 'מימוש',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Category %s has been created.', // @todo
'deleted' => 'Category has been deleted.', // @todo
@@ -75,7 +79,6 @@ return array(
'error' => 'Feed cannot be updated', // @todo
'internal_problem' => 'אין אפשרות להוסיף את ההזנה. <a href="%s">בדקו את הלוגים</a> לפרטים.', // @todo
'invalid_url' => 'URL <em>%s</em> אינו תקין',
- 'marked_read' => 'הזנות סומנו כנקראו',
'n_actualized' => '%d הזנות עודכנו',
'n_entries_deleted' => '%d המאמרים נמחקו',
'no_refresh' => 'אין הזנה שניתן לרענן…',
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index 401e13620..a59f6b178 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -168,6 +168,7 @@ return array(
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
'Known' => 'Known based sites',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/he/index.php b/app/i18n/he/index.php
index cef07eaf8..8ca6e76f7 100644
--- a/app/i18n/he/index.php
+++ b/app/i18n/he/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'סימון הכל כנקרא',
'mark_cat_read' => 'סימון קטגוריה כנקראה',
'mark_feed_read' => 'סימון הזנה כנקראה',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'חדשים בראש',
'non-starred' => 'הצגת הכל פרט למועדפים',
'normal_view' => 'תצוגה רגילה',
diff --git a/app/i18n/he/install.php b/app/i18n/he/install.php
index 6d7cee661..93b8063b3 100644
--- a/app/i18n/he/install.php
+++ b/app/i18n/he/install.php
@@ -40,7 +40,7 @@ return array(
'ok' => 'הספרייה הנדרשת ל character type checking (ctype) מותקנת',
),
'curl' => array(
- 'nok' => 'בURL לא מותקן (php5-curl package)',
+ 'nok' => 'בURL לא מותקן (php-curl package)',
'ok' => 'יש לכם את גירסת %s של cURL',
),
'data' => array(
@@ -59,6 +59,14 @@ return array(
'nok' => 'נא לדבוק שאינך פוגעת ב HTTP REFERER שלך.',
'ok' => 'הHTTP REFERER ידוע ותאם לשרת שלך.',
),
+ 'json' => array(
+ 'nok' => 'Cannot find a recommended library to parse JSON.', //TODO
+ 'ok' => 'You have a recommended library to parse JSON.', //TODO
+ ),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'You lack the Minz framework.', // @todo
'ok' => 'יש לכם את תשתית Minz',
diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php
index a3034777f..5696ed571 100644
--- a/app/i18n/it/admin.php
+++ b/app/i18n/it/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Installazione files',
'json' => array(
- 'nok' => 'Manca il supoorto a JSON (pacchetto php5-json).',
+ 'nok' => 'Manca il supoorto a JSON (pacchetto php-json).',
'ok' => 'Estensione JSON presente.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Manca il framework Minz.',
'ok' => 'Framework Minz presente.',
diff --git a/app/i18n/it/feedback.php b/app/i18n/it/feedback.php
index 934666aa5..b0f3a814a 100644
--- a/app/i18n/it/feedback.php
+++ b/app/i18n/it/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Aggiorna',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Categoria %s creata.',
'deleted' => 'Categoria cancellata',
@@ -74,7 +78,6 @@ return array(
'error' => 'Feed non aggiornato',
'internal_problem' => 'RSS feed non aggiunto. <a href="%s">Verifica i logs</a> per dettagli.', // @todo
'invalid_url' => 'URL <em>%s</em> non valido',
- 'marked_read' => 'Feeds segnati come letti',
'n_actualized' => '%d feeds aggiornati',
'n_entries_deleted' => '%d articoli cancellati',
'no_refresh' => 'Nessun aggiornamento disponibile…',
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index b2e007bce..2a90693f9 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php
index d79502c79..718093327 100644
--- a/app/i18n/it/index.php
+++ b/app/i18n/it/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Segna tutto come letto',
'mark_cat_read' => 'Segna la categoria come letta',
'mark_feed_read' => 'Segna il feed come letto',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Mostra prima i recenti',
'non-starred' => 'Escludi preferiti',
'normal_view' => 'Vista elenco',
diff --git a/app/i18n/it/install.php b/app/i18n/it/install.php
index 18f8cc337..2d0a34885 100644
--- a/app/i18n/it/install.php
+++ b/app/i18n/it/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'You lack a recommended library to parse JSON.',
'ok' => 'You have a recommended library to parse JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Manca il framework Minz.',
'ok' => 'Framework Minz presente.',
diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php
index f9e9c9a8e..bc65b3fa2 100644
--- a/app/i18n/kr/admin.php
+++ b/app/i18n/kr/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => '파일 시스템 설치 요구사항',
'json' => array(
- 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json 패키지).',
+ 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
'ok' => 'JSON 확장 기능이 설치되어 있습니다.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Minz 프레임워크를 찾을 수 없습니다.',
'ok' => 'Minz 프레임워크가 설치되어 있습니다.',
@@ -175,15 +179,15 @@ return array(
'user' => array(
'articles_and_size' => '%s 개의 글 (%s)',
'create' => '새 사용자 생성',
- 'delete_users' => 'Delete user', // TODO
+ 'delete_users' => '사용자 삭제',
'language' => '언어',
'number' => '%d 개의 계정이 생성되었습니다',
'numbers' => '%d 개의 계정이 생성되었습니다',
'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
'password_format' => '7 글자 이상이어야 합니다',
- 'selected' => 'Selected user', // TODO
+ 'selected' => '선택된 사용자',
'title' => '사용자 관리',
- 'update_users' => 'Update user', // TODO
+ 'update_users' => '사용자 정보 변경',
'user_list' => '사용자 목록',
'username' => '사용자 이름',
'users' => '전체 사용자',
diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php
index 558505973..f618d6c96 100644
--- a/app/i18n/kr/conf.php
+++ b/app/i18n/kr/conf.php
@@ -37,12 +37,12 @@ return array(
'no_limit' => '제한 없음',
'thin' => '얇음',
),
- 'show_nav_buttons' => 'Show the navigation buttons', //TODO
+ 'show_nav_buttons' => '내비게이션 버튼 보이기',
),
'query' => array(
'_' => '사용자 쿼리',
'deprecated' => '이 쿼리는 더 이상 유효하지 않습니다. 해당하는 카테고리나 피드가 삭제되었습니다.',
- 'display' => 'Display user query results', // TODO
+ 'display' => '사용자 쿼리 결과 표시',
'filter' => '적용된 필터:',
'get_all' => '모든 글 표시',
'get_category' => '"%s" 카테고리 표시',
@@ -53,7 +53,7 @@ return array(
'number' => '쿼리 #%d',
'order_asc' => '오래된 글 먼저 표시',
'order_desc' => '최근 글 먼저 표시',
- 'remove' => 'Remove user query', // TODO
+ 'remove' => '사용자 쿼리 삭제',
'search' => '"%s"의 검색 결과',
'state_0' => '모든 글 표시',
'state_1' => '읽은 글 표시',
@@ -128,7 +128,7 @@ return array(
),
'sharing' => array(
'_' => '공유',
- 'add' => 'Add a sharing method', // TODO
+ 'add' => '공유 방법 추가',
'blogotext' => 'Blogotext',
'diaspora' => 'Diaspora*',
'email' => '메일',
@@ -136,7 +136,7 @@ return array(
'g+' => 'Google+',
'more_information' => '자세한 정보',
'print' => '인쇄',
- 'remove' => 'Remove sharing method', // TODO
+ 'remove' => '공유 방법 삭제',
'shaarli' => 'Shaarli',
'share_name' => '표시할 이름',
'share_url' => '사용할 공유 URL',
diff --git a/app/i18n/kr/feedback.php b/app/i18n/kr/feedback.php
index f13675778..12cd673ff 100644
--- a/app/i18n/kr/feedback.php
+++ b/app/i18n/kr/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => '피드를 가져오는 중입니다',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => '%s 카테고리가 생성되었습니다.',
'deleted' => '카테고리가 삭제되었습니다.',
@@ -72,9 +76,8 @@ return array(
'already_subscribed' => '이미 <em>%s</em> 피드를 구독 중입니다',
'deleted' => '피드가 삭제되었습니다',
'error' => '피드를 변경할 수 없습니다',
- 'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.', // @todo
+ 'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 <a href="%s">FreshRSS 로그</a>를 참고하세요.',
'invalid_url' => 'URL (<em>%s</em>)이 유효하지 않습니다',
- 'marked_read' => '피드가 읽음으로 표시되었습니다',
'n_actualized' => '%d 개의 피드에서 새 글을 가져왔습니다',
'n_entries_deleted' => '%d 개의 글을 삭제했습니다',
'no_refresh' => '새 글을 가져올 피드가 없습니다…',
@@ -102,8 +105,8 @@ return array(
'error' => '%s 사용자를 삭제할 수 없습니다',
),
'updated' => array(
- '_' => 'User %s has been updated', // TODO
- 'error' => 'User %s has not been updated', // TODO
+ '_' => '사용자 %s의 정보가 변경되었습니다',
+ 'error' => '사용자 %s의 정보가 변경되지 않았습니다',
),
),
'profile' => array(
diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php
index b40ab14c4..e664eaa42 100644
--- a/app/i18n/kr/gen.php
+++ b/app/i18n/kr/gen.php
@@ -19,7 +19,7 @@ return array(
'see_website' => '웹사이트 열기',
'submit' => '설정 저장',
'truncate' => '모든 글 삭제',
- 'update' => 'Update', // TODO
+ 'update' => '변경',
),
'auth' => array(
'email' => '메일 주소',
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php
index cc03f91c2..cb9684dff 100644
--- a/app/i18n/kr/index.php
+++ b/app/i18n/kr/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => '모두 읽음으로 표시',
'mark_cat_read' => '카테고리를 읽음으로 표시',
'mark_feed_read' => '피드를 읽음으로 표시',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => '최근 글 먼저',
'non-starred' => '즐겨찾기를 제외하고 표시',
'normal_view' => '일반 모드',
diff --git a/app/i18n/kr/install.php b/app/i18n/kr/install.php
index 2eea71ff9..03a8ccdbe 100644
--- a/app/i18n/kr/install.php
+++ b/app/i18n/kr/install.php
@@ -65,9 +65,13 @@ return array(
'ok' => 'HTTP REFERER가 서버와 일치하는 것을 확인했습니다.',
),
'json' => array(
- 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php5-json 패키지).',
+ 'nok' => 'JSON 확장 기능을 찾을 수 없습니다 (php-json 패키지).',
'ok' => 'JSON 확장 기능이 설치되어 있습니다.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Minz 프레임워크를 찾을 수 없습니다.',
'ok' => 'Minz 프레임워크가 설치되어 있습니다.',
diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php
index 464b64f70..de200c330 100644
--- a/app/i18n/kr/sub.php
+++ b/app/i18n/kr/sub.php
@@ -44,10 +44,10 @@ return array(
'main_stream' => '메인 스트림에 표시하기',
'normal' => '피드가 속한 카테고리에만 표시하기',
),
- 'ssl_verify' => 'Verify SSL security', //TODO
+ 'ssl_verify' => 'SSL 유효성 검사',
'stats' => '통계',
'think_to_add' => '피드를 추가할 수 있습니다.',
- 'timeout' => 'Timeout in seconds', //TODO
+ 'timeout' => '타임아웃 (초)',
'title' => '제목',
'title_add' => 'RSS 피드 추가',
'ttl' => '다음 시간이 지나기 전에 새로고침 금지',
diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php
index a1d975305..f40db7bcb 100644
--- a/app/i18n/nl/admin.php
+++ b/app/i18n/nl/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Bestanden installatie',
'json' => array(
- 'nok' => 'U mist JSON (php5-json package).',
+ 'nok' => 'U mist JSON (php-json package).',
'ok' => 'U hebt JSON uitbreiding.',
),
+ 'mbstring' => array(
+ 'nok' => 'De voor Unicode aanbevolen bibliotheek mbstring kan niet worden gevonden.',
+ 'ok' => 'De voor Unicode aanbevolen bibliotheek mbstring is gevonden.',
+ ),
'minz' => array(
'nok' => 'U mist Minz framework.',
'ok' => 'U hebt Minz framework.',
diff --git a/app/i18n/nl/feedback.php b/app/i18n/nl/feedback.php
index e73f2f7bd..b16232b84 100644
--- a/app/i18n/nl/feedback.php
+++ b/app/i18n/nl/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Actualiseren',
+ 'articles' => array(
+ 'marked_read' => 'De geselecteerde artikelen zijn als gelezen gemarkeerd.',
+ 'marked_unread' => 'De geselecteerde artikelen zijn als ongelezen gemarkeerd.',
+ ),
'category' => array(
'created' => 'Categorie %s is gemaakt.',
'deleted' => 'Categorie is verwijderd.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Feed kan niet worden vernieuwd',
'internal_problem' => 'De feed kon niet worden toegevoegd. <a href="%s">Controleer de FreshRSS-logbestanden</a> voor details. Toevoegen forceren kan worden geprobeerd door <code>#force_feed</code> aan de URL toe te voegen.',
'invalid_url' => 'URL <em>%s</em> is ongeldig',
- 'marked_read' => 'Feeds zijn gemarkeerd als gelezen',
'n_actualized' => '%d feeds zijn vernieuwd',
'n_entries_deleted' => '%d artikelen zijn verwijderd',
'no_refresh' => 'Er is geen feed om te vernieuwen…',
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index 683209cb9..ccbd86579 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php
index e0184a0d0..67b3886ea 100644
--- a/app/i18n/nl/index.php
+++ b/app/i18n/nl/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Markeer alles als gelezen',
'mark_cat_read' => 'Markeer categorie als gelezen',
'mark_feed_read' => 'Markeer feed als gelezen',
+ 'mark_selection_unread' => 'Markeer selectie als ongelezen',
'newer_first' => 'Nieuwste eerst',
'non-starred' => 'Laat alles zien behalve favorieten',
'normal_view' => 'Normale weergave',
diff --git a/app/i18n/nl/install.php b/app/i18n/nl/install.php
index 419ee4c9b..2d2f38913 100644
--- a/app/i18n/nl/install.php
+++ b/app/i18n/nl/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'U mist een benodigede bibliotheek om JSON te gebruiken.',
'ok' => 'U hebt de benodigde bibliotheek om JSON te gebruiken.',
),
+ 'mbstring' => array(
+ 'nok' => 'De voor Unicode aanbevolen bibliotheek mbstring kan niet worden gevonden.',
+ 'ok' => 'De voor Unicode aanbevolen bibliotheek mbstring is gevonden.',
+ ),
'minz' => array(
'nok' => 'U mist het Minz framework.',
'ok' => 'U hebt het Minz framework.',
diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php
index 16aa027a8..51c5d381f 100644
--- a/app/i18n/pt-br/admin.php
+++ b/app/i18n/pt-br/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Instalação de arquivos',
'json' => array(
- 'nok' => 'Não foi possível encontrar JSON (php5-json).',
+ 'nok' => 'Não foi possível encontrar JSON (php-json).',
'ok' => 'Você tem a extensão JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Não foi possível encontrar o framework Minz.',
'ok' => 'Você tem o framework Minz.',
diff --git a/app/i18n/pt-br/feedback.php b/app/i18n/pt-br/feedback.php
index 2057cf985..a2d66384e 100644
--- a/app/i18n/pt-br/feedback.php
+++ b/app/i18n/pt-br/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Atualizando',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Categoria %s foi criada.',
'deleted' => 'Categoria foi deletada.',
@@ -74,7 +78,6 @@ return array(
'error' => 'O feed não pode ser atualizado',
'internal_problem' => 'O RSS feed não pôde ser adicionado. <a href="%s">Verifique os FreshRSS logs</a> para detalhes.', // @todo
'invalid_url' => 'URL <em>%s</em> é inválida',
- 'marked_read' => 'Feeds foram marcados como lidos',
'n_actualized' => '%d feeds foram atualizados',
'n_entries_deleted' => '%d artigos foram deletados',
'no_refresh' => 'Não há feed para atualizar…',
diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php
index 932b6066d..558482f07 100644
--- a/app/i18n/pt-br/gen.php
+++ b/app/i18n/pt-br/gen.php
@@ -167,6 +167,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/pt-br/index.php b/app/i18n/pt-br/index.php
index 610f00840..2eff8d948 100644
--- a/app/i18n/pt-br/index.php
+++ b/app/i18n/pt-br/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Marcar todos como lidos',
'mark_cat_read' => 'Marcar categoria como lida',
'mark_feed_read' => 'Marcar feed com lido',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Novos primeiro',
'non-starred' => 'Mostrar todos, exceto favoritos',
'normal_view' => 'visualização normal',
diff --git a/app/i18n/pt-br/install.php b/app/i18n/pt-br/install.php
index 3ca5fb854..65bddf62c 100644
--- a/app/i18n/pt-br/install.php
+++ b/app/i18n/pt-br/install.php
@@ -65,9 +65,13 @@ return array(
'ok' => 'Seu HTTP REFERER é conhecido e corresponde ao seu servidor.',
),
'json' => array(
- 'nok' => 'Não foi possível encontrar JSON (php5-json).',
+ 'nok' => 'Não foi possível encontrar JSON (php-json).',
'ok' => 'Você tem a extensão JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Não foi possível encontrar o framework Minz.',
'ok' => 'Você tem o framework Minz.',
diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php
index 4f5e937d7..91da8adcf 100644
--- a/app/i18n/ru/admin.php
+++ b/app/i18n/ru/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Установка файлов',
'json' => array(
- 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php5-json).',
+ 'nok' => 'У вас не установлена библиотека для работы с JSON (пакет php-json).',
'ok' => 'У вас установлена библиотека для работы с JSON.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'У вас не установлен фрейворк Minz.',
'ok' => 'У вас установлен фрейворк Minz.',
diff --git a/app/i18n/ru/feedback.php b/app/i18n/ru/feedback.php
index 6d4e5e3fe..693a40b34 100644
--- a/app/i18n/ru/feedback.php
+++ b/app/i18n/ru/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Actualise', //TODO
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Category %s has been created.', //TODO
'deleted' => 'Category has been deleted.', //TODO
@@ -74,7 +78,6 @@ return array(
'error' => 'Feed cannot be updated', //TODO
'internal_problem' => 'The newsfeed could not be added. <a href="%s">Check FreshRSS logs</a> for details. You can try force adding by appending <code>#force_feed</code> to the URL.', //TODO
'invalid_url' => 'URL <em>%s</em> is invalid', //TODO
- 'marked_read' => 'Feeds have been marked as read', //TODO
'n_actualized' => '%d feeds have been updated', //TODO
'n_entries_deleted' => '%d articles have been deleted', //TODO
'no_refresh' => 'There is no feed to refresh…', //TODO
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index ef9217d73..911410a1c 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php
index eb6413e3c..9bb327786 100644
--- a/app/i18n/ru/index.php
+++ b/app/i18n/ru/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Mark all as read',
'mark_cat_read' => 'Mark category as read',
'mark_feed_read' => 'Mark feed as read',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Newer first',
'non-starred' => 'Show all but favorites',
'normal_view' => 'Normal view',
diff --git a/app/i18n/ru/install.php b/app/i18n/ru/install.php
index 1dea2cd66..c1d0e81e8 100644
--- a/app/i18n/ru/install.php
+++ b/app/i18n/ru/install.php
@@ -64,6 +64,10 @@ return array(
'nok' => 'Убедитесь, что вы не изменяете ваш HTTP REFERER.',
'ok' => 'Ваш HTTP REFERER известен и соотвествует вашему серверу.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'У вас не установлен фрейворк Minz.',
'ok' => 'У вас установлен фрейворк Minz.',
diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php
index f982bf644..f481bb294 100644
--- a/app/i18n/tr/admin.php
+++ b/app/i18n/tr/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => 'Dosya kurulumu',
'json' => array(
- 'nok' => 'JSON eklentisi eksik (php5-json package).',
+ 'nok' => 'JSON eklentisi eksik (php-json package).',
'ok' => 'JSON eklentisi sorunsuz.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Minz framework eksik.',
'ok' => 'Minz framework sorunsuz.',
diff --git a/app/i18n/tr/feedback.php b/app/i18n/tr/feedback.php
index df7d1b264..278abe978 100644
--- a/app/i18n/tr/feedback.php
+++ b/app/i18n/tr/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => 'Güncelleme',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => 'Kategori %s oluşturuldu.',
'deleted' => 'Kategori silindi.',
@@ -74,7 +78,6 @@ return array(
'error' => 'Akış güncellenemiyor',
'internal_problem' => 'RSS akışı eklenemiyor. Detaylar için <a href="%s">FreshRSS log kayıtlarını</a> kontrol edin.', // @todo
'invalid_url' => 'URL <em>%s</em> geçersiz',
- 'marked_read' => 'Akışlar okundu olarak işaretlendi',
'n_actualized' => '%d akışları güncellendi',
'n_entries_deleted' => '%d makaleleri silindi',
'no_refresh' => 'Yenilenecek akış yok…',
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index d99081396..2e1761517 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php
index cb36d6717..1357c05e7 100644
--- a/app/i18n/tr/index.php
+++ b/app/i18n/tr/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => 'Hepsini okundu olarak işaretle',
'mark_cat_read' => 'Kategoriyi okundu olarak işaretle',
'mark_feed_read' => 'Akışı okundu olarak işaretle',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => 'Önce yeniler',
'non-starred' => 'Favori dışındakileri göster',
'normal_view' => 'Normal görünüm',
diff --git a/app/i18n/tr/install.php b/app/i18n/tr/install.php
index 4ae0ad7e3..f90e43f1d 100644
--- a/app/i18n/tr/install.php
+++ b/app/i18n/tr/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => 'Tavsiye edilen JSON çözümleme kütüphanesi eksik.',
'ok' => 'Tavsiye edilen JSON çözümleme kütüphanesi sorunsuz.',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => 'Minz framework eksik.',
'ok' => 'Minz framework sorunsuz.',
diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php
index 1072dc972..1f007f964 100644
--- a/app/i18n/zh-cn/admin.php
+++ b/app/i18n/zh-cn/admin.php
@@ -63,9 +63,13 @@ return array(
),
'files' => '文件相关',
'json' => array(
- 'nok' => '找不到 JSON 扩展 (php5-json ) 。',
+ 'nok' => '找不到 JSON 扩展 (php-json ) 。',
'ok' => '已找到 JSON 扩展',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => '找不到 Minz 框架。',
'ok' => '已找到 Minz 框架。',
diff --git a/app/i18n/zh-cn/feedback.php b/app/i18n/zh-cn/feedback.php
index 1db879891..e9f7b4aac 100644
--- a/app/i18n/zh-cn/feedback.php
+++ b/app/i18n/zh-cn/feedback.php
@@ -52,6 +52,10 @@ return array(
),
'sub' => array(
'actualize' => '获取',
+ 'articles' => array(
+ 'marked_read' => 'The selected articles have been marked as read.', //TODO
+ 'marked_unread' => 'The articles have been marked as unread.', //TODO
+ ),
'category' => array(
'created' => '分类 %s 已创建。',
'deleted' => '分类已删除。',
@@ -74,7 +78,6 @@ return array(
'error' => 'RSS 源更新失败',
'internal_problem' => 'RSS 源添加失败。<a href="%s">检查 FreshRSS 日志</a> 查看详情。', // @todo
'invalid_url' => 'URL <em>%s</em> 无效',
- 'marked_read' => 'RSS 源已被设为已读',
'n_actualized' => '%d 个 RSS 源已更新',
'n_entries_deleted' => '%d 篇文章已删除',
'no_refresh' => '没有可刷新的 RSS 源…',
diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php
index 9289d8571..4ea2d73ab 100644
--- a/app/i18n/zh-cn/gen.php
+++ b/app/i18n/zh-cn/gen.php
@@ -168,6 +168,7 @@ return array(
'g+' => 'Google+',
'gnusocial' => 'GNU social',
'jdh' => 'Journal du hacker',
+ 'linkedin' => 'LinkedIn',
'mastodon' => 'Mastodon',
'movim' => 'Movim',
'pocket' => 'Pocket',
diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php
index 6729524f5..2b76961ef 100644
--- a/app/i18n/zh-cn/index.php
+++ b/app/i18n/zh-cn/index.php
@@ -40,6 +40,7 @@ return array(
'mark_all_read' => '全部设为已读',
'mark_cat_read' => '此分类设为已读',
'mark_feed_read' => '此源设为已读',
+ 'mark_selection_unread' => 'Mark selection as unread', //TODO
'newer_first' => '由新到旧',
'non-starred' => '显示未收藏',
'normal_view' => '普通视图',
diff --git a/app/i18n/zh-cn/install.php b/app/i18n/zh-cn/install.php
index 1e172f0d5..fe34a44c0 100644
--- a/app/i18n/zh-cn/install.php
+++ b/app/i18n/zh-cn/install.php
@@ -68,6 +68,10 @@ return array(
'nok' => '找不到推荐的 JSON 解析库。',
'ok' => '已找到推荐的 JSON 解析库。',
),
+ 'mbstring' => array(
+ 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO
+ 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO
+ ),
'minz' => array(
'nok' => '找不到 Minz 框架。',
'ok' => '已找到 Minz 框架。',
diff --git a/app/install.php b/app/install.php
index c30f8d583..eec65be9c 100644
--- a/app/install.php
+++ b/app/install.php
@@ -462,6 +462,12 @@ function printStep1() {
<p class="alert alert-error"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.xml.nok'); ?></p>
<?php } ?>
+ <?php if ($res['mbstring'] == 'ok') { ?>
+ <p class="alert alert-success"><span class="alert-head"><?php echo _t('gen.short.ok'); ?></span> <?php echo _t('install.check.mbstring.ok'); ?></p>
+ <?php } else { ?>
+ <p class="alert alert-warn"><span class="alert-head"><?php echo _t('gen.short.damn'); ?></span> <?php echo _t('install.check.mbstring.nok'); ?></p>
+ <?php } ?>
+
<?php if ($res['fileinfo'] == 'ok') { ?>
<p class="alert alert-success"><span class="alert-head"><?php echo _t('gen.short.ok'); ?></span> <?php echo _t('install.check.fileinfo.ok'); ?></p>
<?php } else { ?>
@@ -645,7 +651,7 @@ function printStep3() {
<div class="form-group">
<label class="group-name" for="base"><?php echo _t('install.bdd'); ?></label>
<div class="group-controls">
- <input type="text" id="base" name="base" maxlength="64" pattern="[0-9A-Za-z_]{1,64}" value="<?php echo isset($_SESSION['bd_base']) ? $_SESSION['bd_base'] : ''; ?>" tabindex="5" />
+ <input type="text" id="base" name="base" maxlength="64" pattern="[0-9A-Za-z_-]{1,64}" value="<?php echo isset($_SESSION['bd_base']) ? $_SESSION['bd_base'] : ''; ?>" tabindex="5" />
</div>
</div>
diff --git a/app/layout/header.phtml b/app/layout/header.phtml
index e589ed7ef..e75a25efa 100644
--- a/app/layout/header.phtml
+++ b/app/layout/header.phtml
@@ -25,7 +25,8 @@ if (FreshRSS_Auth::accessNeedsAction()) {
<?php if (FreshRSS_Auth::hasAccess() || FreshRSS_Context::$system_conf->allow_anonymous) { ?>
<form action="<?php echo _url('index', 'index'); ?>" method="get">
<div class="stick">
- <input type="search" name="search" id="search" class="extend" value="<?php echo FreshRSS_Context::$search; ?>" placeholder="<?php echo _t('gen.menu.search'); ?>" />
+ <input type="search" name="search" id="search" class="extend" value="<?php
+ echo htmlspecialchars(htmlspecialchars_decode(FreshRSS_Context::$search, ENT_QUOTES), ENT_COMPAT, 'UTF-8'); ?>" placeholder="<?php echo _t('gen.menu.search'); ?>" />
<?php $get = Minz_Request::param('get', ''); ?>
<?php if ($get != '') { ?>
diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml
index ab82c723f..88f882db9 100644
--- a/app/layout/nav_menu.phtml
+++ b/app/layout/nav_menu.phtml
@@ -62,9 +62,10 @@
<?php
$get = FreshRSS_Context::currentGet();
$string_mark = _t('index.menu.mark_all_read');
- if ($get[0] == 'f') {
+ $string_unmark = _t('index.menu.mark_selection_unread');
+ if ($get[0] === 'f') {
$string_mark = _t('index.menu.mark_feed_read');
- } elseif ($get[0] == 'c') {
+ } elseif ($get[0] === 'c') {
$string_mark = _t('index.menu.mark_cat_read');
}
@@ -75,10 +76,14 @@
'get' => $get,
'nextGet' => FreshRSS_Context::$next_get,
'idMax' => FreshRSS_Context::$id_max,
- 'search' => FreshRSS_Context::$search,
+ 'search' => htmlspecialchars_decode(FreshRSS_Context::$search, ENT_QUOTES),
'state' => FreshRSS_Context::$state,
- )
+ ),
);
+
+ $mark_unread_url = $mark_read_url;
+ $mark_unread_url['params']['is_read'] = false;
+ $mark_unread_url['params']['nextGet'] = $get;
?>
<div class="stick" id="nav_menu_read_all">
@@ -110,6 +115,7 @@
$mark_before_today['params']['idMax'] = $today . '000000';
$mark_before_one_week = $mark_read_url;
$mark_before_one_week['params']['idMax'] = ($today - 604800) . '000000';
+ $mark_unread_enabled = FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_READ) or !FreshRSS_Context::isStateEnabled(FreshRSS_Entry::STATE_NOT_READ);
?>
<li class="item">
<button class="as-link <?php echo $confirm; ?>"
@@ -123,6 +129,13 @@
formaction="<?php echo Minz_Url::display($mark_before_one_week); ?>"
type="submit"><?php echo _t('index.menu.before_one_week'); ?></button>
</li>
+ <li class="separator"></li>
+ <li class="item">
+ <button class="as-link <?php echo $mark_unread_enabled ? $confirm : '" disabled="disabled'; ?>"
+ form="mark-read-menu"
+ formaction="<?php echo Minz_Url::display($mark_unread_url); ?>"
+ type="submit"><?php echo $string_unmark; ?></button>
+ </li>
</ul>
</div>
</form>
@@ -162,7 +175,8 @@
<div class="item search">
<form action="<?php echo _url('index', 'index'); ?>" method="get">
- <input type="search" name="search" class="extend" value="<?php echo FreshRSS_Context::$search; ?>" placeholder="<?php echo _t('index.menu.search_short'); ?>" />
+ <input type="search" name="search" class="extend" value="<?php
+ echo htmlspecialchars(htmlspecialchars_decode(FreshRSS_Context::$search, ENT_QUOTES), ENT_COMPAT, 'UTF-8'); ?>" placeholder="<?php echo _t('index.menu.search_short'); ?>" />
<?php $get = Minz_Request::param('get', ''); ?>
<?php if($get != '') { ?>
diff --git a/app/shares.php b/app/shares.php
index 8c6b4eac6..55deed785 100644
--- a/app/shares.php
+++ b/app/shares.php
@@ -131,4 +131,10 @@ return array(
'form' => 'simple',
'method' => 'GET',
),
+ 'linkedin' => array(
+ 'url' => 'https://www.linkedin.com/shareArticle?url=~LINK~&amp;title=~TITLE~&amp;source=FreshRSS',
+ 'transform' => array('rawurlencode'),
+ 'form' => 'simple',
+ 'method' => 'GET',
+ ),
);
diff --git a/app/views/helpers/export/opml.phtml b/app/views/helpers/export/opml.phtml
index 236cca303..edb4d4eda 100644
--- a/app/views/helpers/export/opml.phtml
+++ b/app/views/helpers/export/opml.phtml
@@ -16,11 +16,11 @@ foreach ($this->categories as $key => $cat) {
foreach ($cat['feeds'] as $feed) {
$opml_array['body'][$key]['@outlines'][] = array(
- 'text' => htmlspecialchars_decode($feed->name()),
+ 'text' => htmlspecialchars_decode($feed->name(), ENT_QUOTES),
'type' => 'rss',
- 'xmlUrl' => htmlspecialchars_decode($feed->url()),
- 'htmlUrl' => htmlspecialchars_decode($feed->website()),
- 'description' => htmlspecialchars_decode($feed->description()),
+ 'xmlUrl' => htmlspecialchars_decode($feed->url(), ENT_QUOTES),
+ 'htmlUrl' => htmlspecialchars_decode($feed->website(), ENT_QUOTES),
+ 'description' => htmlspecialchars_decode($feed->description(), ENT_QUOTES),
);
}
}
diff --git a/app/views/helpers/index/normal/entry_bottom.phtml b/app/views/helpers/index/normal/entry_bottom.phtml
index 793c644f9..6417da4cb 100644
--- a/app/views/helpers/index/normal/entry_bottom.phtml
+++ b/app/views/helpers/index/normal/entry_bottom.phtml
@@ -81,7 +81,7 @@
<ul class="dropdown-menu">
<li class="dropdown-close"><a href="#close">❌</a></li><?php
foreach($tags as $tag) {
- ?><li class="item"><a href="<?php echo _url('index', 'index', 'search', '#' . htmlspecialchars_decode($tag)); ?>"><?php echo $tag; ?></a></li><?php
+ ?><li class="item"><a href="<?php echo _url('index', 'index', 'search', '#' . htmlspecialchars_decode($tag, ENT_QUOTES)); ?>"><?php echo $tag; ?></a></li><?php
} ?>
</ul>
</div>
diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml
index 1b9b614d2..d7b3e4360 100644
--- a/app/views/helpers/javascript_vars.phtml
+++ b/app/views/helpers/javascript_vars.phtml
@@ -56,4 +56,4 @@ echo htmlspecialchars(json_encode(array(
'icons' => array(
'close' => _i('close'),
),
-), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES);
+), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES, 'UTF-8');
diff --git a/app/views/helpers/pagination.phtml b/app/views/helpers/pagination.phtml
index 893451af9..fc37ce3f5 100755
--- a/app/views/helpers/pagination.phtml
+++ b/app/views/helpers/pagination.phtml
@@ -11,7 +11,7 @@
'get' => FreshRSS_Context::currentGet(),
'nextGet' => FreshRSS_Context::$next_get,
'idMax' => FreshRSS_Context::$id_max,
- 'search' => FreshRSS_Context::$search,
+ 'search' => htmlspecialchars_decode(FreshRSS_Context::$search, ENT_QUOTES),
'state' => FreshRSS_Context::$state,
)
);
diff --git a/app/views/stats/index.phtml b/app/views/stats/index.phtml
index a36f812a8..2ff3e6c52 100644
--- a/app/views/stats/index.phtml
+++ b/app/views/stats/index.phtml
@@ -88,6 +88,6 @@ echo htmlspecialchars(json_encode(array(
'dataCount' => $this->count,
'feedByCategory' => $this->feedByCategory,
'entryByCategory' => $this->entryByCategory,
-), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES);
+), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES, 'UTF-8');
?></script>
<script src="../scripts/stats.js?<?php echo @filemtime(PUBLIC_PATH . '/scripts/stats.js'); ?>"></script>
diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml
index 5ebcdce5a..4bce418c9 100644
--- a/app/views/stats/repartition.phtml
+++ b/app/views/stats/repartition.phtml
@@ -69,6 +69,6 @@ echo htmlspecialchars(json_encode(array(
'days' => $this->days,
'repartitionMonth' => $this->repartitionMonth,
'months' => $this->months,
-), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES);
+), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES, 'UTF-8');
?></script>
<script src="../scripts/repartition.js?<?php echo @filemtime(PUBLIC_PATH . '/scripts/repartition.js'); ?>"></script>