From 82ac9454ddf337b79b41fedae37eaf15e6e0cb12 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 8 Jul 2018 11:22:51 +0200 Subject: Fix check username in API (#1957) * Fix check username in API Fix https://github.com/FreshRSS/FreshRSS/issues/1955 * Changelog 1955 https://github.com/FreshRSS/FreshRSS/issues/1955 https://github.com/FreshRSS/FreshRSS/pull/1957 --- p/api/greader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'p') diff --git a/p/api/greader.php b/p/api/greader.php index 5ab6c8115..4affc2826 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -176,7 +176,7 @@ function authorizationToUser() { } function clientLogin($email, $pass) { //http://web.archive.org/web/20130604091042/http://undoc.in/clientLogin.html - if (ctype_alnum($email)) { + if (FreshRSS_user_Controller::checkUsername($email)) { if (!function_exists('password_verify')) { include_once(LIB_PATH . '/password_compat.php'); } -- cgit v1.2.3 From 763ceff7ca888a6a15d1edc46d01cd13e087fd5c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 23 Jul 2018 22:50:16 +0200 Subject: FeverAPI 32-bit fixes (#1964) * FeverAPI 32-bit fixes https://github.com/FreshRSS/FreshRSS/issues/1962 * Small fixes https://github.com/FreshRSS/FreshRSS/pull/1964#discussion_r204213613 --- p/api/fever.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'p') diff --git a/p/api/fever.php b/p/api/fever.php index d1482e8a1..55baa6d16 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -69,14 +69,16 @@ class FeverDAO extends Minz_ModelPdo if (!empty($entry_ids)) { $bindEntryIds = $this->bindParamArray('id', $entry_ids, $values); $sql .= " id IN($bindEntryIds)"; - } else if (!empty($max_id)) { + } elseif ($max_id != null) { $sql .= ' id < :id'; $values[':id'] = $max_id; $order = ' ORDER BY id DESC'; - } else { + } elseif ($since_id != null) { $sql .= ' id > :id'; $values[':id'] = $since_id; $order = ' ORDER BY id ASC'; + } else { + $sql .= ' 1=1'; } if (!empty($feed_ids)) { @@ -204,14 +206,14 @@ class FeverAPI $response_arr['saved_item_ids'] = $this->getSavedItemIds(); } - if (isset($_REQUEST['mark'], $_REQUEST['as'], $_REQUEST['id']) && is_numeric($_REQUEST['id'])) { + $id = isset($_REQUEST['id']) ? '' . $_REQUEST['id'] : ''; + if (isset($_REQUEST['mark'], $_REQUEST['as'], $_REQUEST['id']) && ctype_digit($id)) { $method_name = 'set' . ucfirst($_REQUEST['mark']) . 'As' . ucfirst($_REQUEST['as']); $allowedMethods = array( 'setFeedAsRead', 'setGroupAsRead', 'setItemAsRead', 'setItemAsSaved', 'setItemAsUnread', 'setItemAsUnsaved' ); if (in_array($method_name, $allowedMethods)) { - $id = intval($_REQUEST['id']); switch (strtolower($_REQUEST['mark'])) { case 'item': $this->{$method_name}($id); @@ -471,17 +473,18 @@ class FeverAPI if (isset($_REQUEST['max_id'])) { // use the max_id argument to request the previous $item_limit items - if (is_numeric($_REQUEST['max_id'])) { - $max = $_REQUEST['max_id'] > 0 ? intval($_REQUEST['max_id']) : 0; - if ($max) { - $max_id = $max; - } + $max_id = '' . $_REQUEST['max_id']; + if (!ctype_digit($max_id)) { + $max_id = null; } } else if (isset($_REQUEST['with_ids'])) { $entry_ids = explode(',', $_REQUEST['with_ids']); } else { // use the since_id argument to request the next $item_limit items - $since_id = isset($_REQUEST['since_id']) && is_numeric($_REQUEST['since_id']) ? intval($_REQUEST['since_id']) : 0; + $since_id = '' . $_REQUEST['since_id']; + if (!ctype_digit($since_id)) { + $since_id = null; + } } $items = array(); -- cgit v1.2.3 From 34d8be086c19cef6cbe236d4d541f460449852da Mon Sep 17 00:00:00 2001 From: ColonelMoutarde <4697568+ColonelMoutarde@users.noreply.github.com> Date: Thu, 23 Aug 2018 19:57:08 +0200 Subject: Better rand() (#1977) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit http://php.net/manual/en/function.mt-rand.php from php Doc "Many random number generators of older libcs have dubious or unknown characteristics and are slow. The mt_rand() function is a drop-in replacement for the older rand(). It uses a random number generator with known characteristics using the » Mersenne Twister, which will produce random numbers four times faster than what the average libc rand() provides. " --- p/f.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'p') diff --git a/p/f.php b/p/f.php index 81df8984b..b68109cd5 100644 --- a/p/f.php +++ b/p/f.php @@ -28,7 +28,7 @@ $txt_mtime = @filemtime($txt); header('Content-Type: image/x-icon'); -if ($ico_mtime == false || $ico_mtime < $txt_mtime || ($ico_mtime < time() - (rand(15, 20) * 86400))) { +if ($ico_mtime == false || $ico_mtime < $txt_mtime || ($ico_mtime < time() - (mt_rand(15, 20) * 86400))) { if ($txt_mtime == false) { show_default_favicon(1800); exit(); @@ -49,6 +49,6 @@ if ($ico_mtime == false || $ico_mtime < $txt_mtime || ($ico_mtime < time() - (ra header('Content-Disposition: inline; filename="' . $id . '.ico"'); -if (!httpConditional($ico_mtime, rand(14, 21) * 86400, 2)) { +if (!httpConditional($ico_mtime, mt_rand(14, 21) * 86400, 2)) { readfile($ico); } -- cgit v1.2.3 From 043d30c2da961d88fd041dcea7c50817dee44f15 Mon Sep 17 00:00:00 2001 From: primaeval Date: Thu, 23 Aug 2018 20:29:27 +0200 Subject: bottom padding to enable scroll to mark all as read (#1980) * bottom padding to enable scroll to mark all as read * 100vh fallback for mobile --- p/themes/base-theme/template.css | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'p') diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 9b8ad902b..7f2e7e828 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -630,7 +630,8 @@ br + br + br { #bigMarkAsRead { display: block; width: 100%; - padding: 1em 0; + padding: 1em 0 100% 0; + padding: 1em 0 100vh 0; text-align: center; font-size: 1.4em; } -- cgit v1.2.3 From e003ccaf5734f726e14b3061ecc1df16e1322032 Mon Sep 17 00:00:00 2001 From: Uncovery Date: Wed, 29 Aug 2018 20:51:50 +0800 Subject: remove section for font-face (#1992) --- p/themes/Origine-compact/origine-compact.css | 6 ------ 1 file changed, 6 deletions(-) (limited to 'p') diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 8447e2486..26129415a 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -1,11 +1,5 @@ @charset "UTF-8"; -/*=== FONTS */ -@font-face { - font-family: "OpenSans"; - src: url("../fonts/openSans.woff") format("woff"); -} - /*=== GENERAL */ /*============*/ html, body { -- cgit v1.2.3 From d3f5bd840d513bc4820a919ef9e0f02b0263ff9c Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Mon, 3 Sep 2018 20:48:04 +0200 Subject: Add mark-as-unread (#1995) * Add mark-as-unread https://github.com/FreshRSS/FreshRSS/issues/1966 * Change sentence https://github.com/FreshRSS/FreshRSS/pull/1995#discussion_r214515954 * Enable mark-as-unread only when unread articles are shown In order to prevent erroneous marking-as-unread. We might find a better logic later. * Disable instead of hide mark-as-unread option To make it easier to discover --- app/Controllers/entryController.php | 18 +++++++++--------- app/Models/EntryDAO.php | 24 ++++++++++++------------ app/i18n/cz/feedback.php | 5 ++++- app/i18n/cz/index.php | 1 + app/i18n/de/feedback.php | 5 ++++- app/i18n/de/index.php | 1 + app/i18n/en/feedback.php | 5 ++++- app/i18n/en/index.php | 1 + app/i18n/es/feedback.php | 5 ++++- app/i18n/es/index.php | 1 + app/i18n/fr/feedback.php | 5 ++++- app/i18n/fr/index.php | 3 ++- app/i18n/he/feedback.php | 5 ++++- app/i18n/he/index.php | 1 + app/i18n/it/feedback.php | 5 ++++- app/i18n/it/index.php | 1 + app/i18n/kr/feedback.php | 5 ++++- app/i18n/kr/index.php | 1 + app/i18n/nl/feedback.php | 5 ++++- app/i18n/nl/index.php | 1 + app/i18n/pt-br/feedback.php | 5 ++++- app/i18n/pt-br/index.php | 1 + app/i18n/ru/feedback.php | 5 ++++- app/i18n/ru/index.php | 1 + app/i18n/tr/feedback.php | 5 ++++- app/i18n/tr/index.php | 1 + app/i18n/zh-cn/feedback.php | 5 ++++- app/i18n/zh-cn/index.php | 1 + app/layout/nav_menu.phtml | 19 ++++++++++++++++--- p/themes/BlueLagoon/BlueLagoon.css | 3 +++ p/themes/Dark/dark.css | 3 +++ p/themes/Screwdriver/screwdriver.css | 3 +++ p/themes/base-theme/template.css | 3 +++ 33 files changed, 115 insertions(+), 38 deletions(-) (limited to 'p') diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index 838ad56ce..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, diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 73651187f..e17f6ff34 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -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); 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 zkontrolujte logy FreshRSS.', // @todo 'invalid_url' => 'URL %s 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/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/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 prüfen Sie die FreshRSS-Protokolle.', // @todo 'invalid_url' => 'Die URL %s 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/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/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. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', 'invalid_url' => 'URL %s 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/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/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. Revisa el registro de FreshRSS para más información.', // @todo 'invalid_url' => 'La URL %s 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/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/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é. Consulter les logs de FreshRSS pour plus de détails. Vous pouvez essayer de forcer l’ajout par addition de #force_feed à l’URL.', 'invalid_url' => 'L’url %s 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/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/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' => 'אין אפשרות להוסיף את ההזנה. בדקו את הלוגים לפרטים.', // @todo 'invalid_url' => 'URL %s אינו תקין', - 'marked_read' => 'הזנות סומנו כנקראו', 'n_actualized' => '%d הזנות עודכנו', 'n_entries_deleted' => '%d המאמרים נמחקו', 'no_refresh' => 'אין הזנה שניתן לרענן…', 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/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. Verifica i logs per dettagli.', // @todo 'invalid_url' => 'URL %s 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/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/kr/feedback.php b/app/i18n/kr/feedback.php index ec2c812b9..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' => '카테고리가 삭제되었습니다.', @@ -74,7 +78,6 @@ return array( 'error' => '피드를 변경할 수 없습니다', 'internal_problem' => 'RSS 피드를 추가할 수 없습니다. 자세한 내용은 FreshRSS 로그를 참고하세요.', 'invalid_url' => 'URL (%s)이 유효하지 않습니다', - 'marked_read' => '피드가 읽음으로 표시되었습니다', 'n_actualized' => '%d 개의 피드에서 새 글을 가져왔습니다', 'n_entries_deleted' => '%d 개의 글을 삭제했습니다', 'no_refresh' => '새 글을 가져올 피드가 없습니다…', 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/nl/feedback.php b/app/i18n/nl/feedback.php index e73f2f7bd..756cfa9a2 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' => 'The selected articles have been marked as read.', //TODO + 'marked_unread' => 'The articles have been marked as unread.', //TODO + ), '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. Controleer de FreshRSS-logbestanden voor details. Toevoegen forceren kan worden geprobeerd door #force_feed aan de URL toe te voegen.', 'invalid_url' => 'URL %s 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/index.php b/app/i18n/nl/index.php index e0184a0d0..7b81a00e2 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' => 'Mark selection as unread', //TODO 'newer_first' => 'Nieuwste eerst', 'non-starred' => 'Laat alles zien behalve favorieten', 'normal_view' => 'Normale weergave', 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. Verifique os FreshRSS logs para detalhes.', // @todo 'invalid_url' => 'URL %s é 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/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/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. Check FreshRSS logs for details. You can try force adding by appending #force_feed to the URL.', //TODO 'invalid_url' => 'URL %s 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/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/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 FreshRSS log kayıtlarını kontrol edin.', // @todo 'invalid_url' => 'URL %s 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/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/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 源添加失败。检查 FreshRSS 日志 查看详情。', // @todo 'invalid_url' => 'URL %s 无效', - 'marked_read' => 'RSS 源已被设为已读', 'n_actualized' => '%d 个 RSS 源已更新', 'n_entries_deleted' => '%d 篇文章已删除', 'no_refresh' => '没有可刷新的 RSS 源…', 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/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index d1f3bed43..88f882db9 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -62,9 +62,10 @@ FreshRSS_Context::$id_max, '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; ?> diff --git a/p/themes/BlueLagoon/BlueLagoon.css b/p/themes/BlueLagoon/BlueLagoon.css index 186258752..424970501 100644 --- a/p/themes/BlueLagoon/BlueLagoon.css +++ b/p/themes/BlueLagoon/BlueLagoon.css @@ -115,6 +115,9 @@ form th { } /*=== Buttons */ +button.as-link[disabled] { + color:#555 !important; +} .dropdown-menu .input select, .dropdown-menu .input input { background:#444; diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 348b00009..38a78a277 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -113,6 +113,9 @@ form th { } /*=== Buttons */ +button.as-link[disabled] { + color:#445 !important; +} .stick { vertical-align: middle; font-size: 0; diff --git a/p/themes/Screwdriver/screwdriver.css b/p/themes/Screwdriver/screwdriver.css index 969695f13..a142c3860 100644 --- a/p/themes/Screwdriver/screwdriver.css +++ b/p/themes/Screwdriver/screwdriver.css @@ -115,6 +115,9 @@ form th { } /*=== Buttons */ +button.as-link[disabled] { + color:#555 !important; +} .dropdown-menu .input select, .dropdown-menu .input input { background:#444; diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 7f2e7e828..26143a5d5 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -118,6 +118,9 @@ button.as-link:active { font-size: 1.1em; text-align: left; } +button.as-link[disabled] { + color:#DDD !important; +} /*=== Tables */ table { -- cgit v1.2.3