diff options
| author | 2024-10-20 14:51:49 -0400 | |
|---|---|---|
| committer | 2024-10-20 20:51:49 +0200 | |
| commit | ad2c6e6fbf3658f08295fb437a0f97e10498eb11 (patch) | |
| tree | 2207fef4ee921450ac3b25d217711fe16173b6a0 | |
| parent | a766ebfb68298cfd2a268d87443c5e2586e93243 (diff) | |
Add privacy settings on extension list retrieval (#4603)
* Add privacy settings on extension list retrieval
There is a new privacy page to handle all configuration related to privacy. At
the moment, only privacy related to extensions can be configured.
The new settings allow to change the location of the extension list file and to
choose if the selected file is cached for a day or retrieved for each request.
Fix #4570
* Update code to pass PHPStan
* make fix-all
---------
Co-authored-by: maTh <math-home@web.de>
Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
80 files changed, 212 insertions, 1 deletions
diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index cc31430b0..6d25493cf 100644 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -503,4 +503,20 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { Minz_Request::good(_t('feedback.conf.updated'), [ 'c' => 'configure', 'a' => 'system' ]); } } + + public function privacyAction(): void { + if (!FreshRSS_Auth::hasAccess('admin')) { + Minz_Error::error(403); + } + + if (Minz_Request::isPost()) { + FreshRSS_Context::userConf()->retrieve_extension_list = Minz_Request::paramBoolean('retrieve_extension_list'); + FreshRSS_Context::userConf()->save(); + invalidateHttpCache(); + + Minz_Request::good(_t('feedback.conf.updated'), array('c' => 'configure', 'a' => 'privacy')); + } + + FreshRSS_View::prependTitle(_t('conf.privacy') . ' · '); + } } diff --git a/app/Controllers/extensionController.php b/app/Controllers/extensionController.php index bf1f01c59..42538153d 100644 --- a/app/Controllers/extensionController.php +++ b/app/Controllers/extensionController.php @@ -44,7 +44,18 @@ class FreshRSS_extension_Controller extends FreshRSS_ActionController { */ protected function getAvailableExtensionList(): array { $extensionListUrl = 'https://raw.githubusercontent.com/FreshRSS/Extensions/master/extensions.json'; - $json = httpGet($extensionListUrl, CACHE_PATH . '/extension_list.json', 'json'); + + $cacheFile = CACHE_PATH . '/extension_list.json'; + if (FreshRSS_Context::userConf()->retrieve_extension_list === true) { + if (!file_exists($cacheFile) || (time() - (filemtime($cacheFile) ?: 0) > 86400)) { + $json = httpGet($extensionListUrl, $cacheFile, 'json'); + } else { + $json = @file_get_contents($cacheFile) ?: ''; + } + } else { + Minz_Log::warning('The extension list retrieval is disabled in privacy configuration'); + return []; + } // we ran into problems, simply ignore them if ($json === '') { diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index b46df4d78..8c08d0bd7 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -73,6 +73,7 @@ declare(strict_types=1); * @property string $view_mode * @property array<string,bool|int|string> $volatile * @property array<string,array<string,mixed>> $extensions + * @property bool $retrieve_extension_list */ final class FreshRSS_UserConfiguration extends Minz_Configuration { use FreshRSS_FilterActionsTrait; diff --git a/app/i18n/cs/admin.php b/app/i18n/cs/admin.php index c62e37697..911957ed8 100644 --- a/app/i18n/cs/admin.php +++ b/app/i18n/cs/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Popis', 'disabled' => 'Zakázáno', 'empty_list' => 'Nejsou naistalována žádná rozšíření', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Povoleno', 'latest' => 'Nainstalováno', 'name' => 'Název', diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php index 158259374..ff856cb28 100644 --- a/app/i18n/cs/conf.php +++ b/app/i18n/cs/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Předchozí', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Správa profilu', 'api' => 'Správa API', diff --git a/app/i18n/cs/gen.php b/app/i18n/cs/gen.php index bea67222d..aab07bd1b 100644 --- a/app/i18n/cs/gen.php +++ b/app/i18n/cs/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Zobrazení', 'extensions' => 'Rozšíření', 'logs' => 'Protokoly', + 'privacy' => 'Privacy', // TODO 'queries' => 'Uživatelské dotazy', 'reading' => 'Čtení', 'search' => 'Hledat slova nebo #štítky', diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php index 314be6ef7..c6669845f 100644 --- a/app/i18n/de/admin.php +++ b/app/i18n/de/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Beschreibungen', 'disabled' => 'Deaktiviert', 'empty_list' => 'Es gibt keine installierte Erweiterung.', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Aktiviert', 'latest' => 'Installiert', 'name' => 'Name', // IGNORE diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 4743fd4ad..2fc75a964 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Vorherige', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profil-Verwaltung', 'api' => 'API-Verwaltung', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index e56851652..548c60a20 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Anzeige', 'extensions' => 'Erweiterungen', 'logs' => 'Protokolle', + 'privacy' => 'Privacy', // TODO 'queries' => 'Benutzerabfragen', 'reading' => 'Lesen', 'search' => 'Suche Worte oder #Tags', diff --git a/app/i18n/el/admin.php b/app/i18n/el/admin.php index 0c5f490e5..59098f09f 100644 --- a/app/i18n/el/admin.php +++ b/app/i18n/el/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Περιγραφή', 'disabled' => 'Απενεργοποιημένες', 'empty_list' => 'Δεν υπάρχουν εγκατεστημένες επεκτάσεις', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Ενεργοποιημένες', 'latest' => 'Εγκατεστημένες', 'name' => 'Όνομα', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index 843884970..a9fbad830 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Previous', // TODO ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profile management', // TODO 'api' => 'API management', // TODO diff --git a/app/i18n/el/gen.php b/app/i18n/el/gen.php index db6716680..973856c12 100644 --- a/app/i18n/el/gen.php +++ b/app/i18n/el/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Display', // TODO 'extensions' => 'Extensions', // TODO 'logs' => 'Logs', // TODO + 'privacy' => 'Privacy', // TODO 'queries' => 'User queries', // TODO 'reading' => 'Reading', // TODO 'search' => 'Search words or #tags', // TODO diff --git a/app/i18n/en-us/admin.php b/app/i18n/en-us/admin.php index 9671b71d3..5f3bb2546 100644 --- a/app/i18n/en-us/admin.php +++ b/app/i18n/en-us/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Description', // IGNORE 'disabled' => 'Disabled', // IGNORE 'empty_list' => 'There are no installed extensions', // IGNORE + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Enabled', // IGNORE 'latest' => 'Installed', // IGNORE 'name' => 'Name', // IGNORE diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index f241163ba..89464482d 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Previous', // IGNORE ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profile management', // IGNORE 'api' => 'API management', // IGNORE diff --git a/app/i18n/en-us/gen.php b/app/i18n/en-us/gen.php index da7ce15d4..3b8e0cfd9 100644 --- a/app/i18n/en-us/gen.php +++ b/app/i18n/en-us/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Display', // IGNORE 'extensions' => 'Extensions', // IGNORE 'logs' => 'Logs', // IGNORE + 'privacy' => 'Privacy', // IGNORE 'queries' => 'User queries', // IGNORE 'reading' => 'Reading', // IGNORE 'search' => 'Search words or #tags', // IGNORE diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php index cae4837d5..81d4ff09e 100644 --- a/app/i18n/en/admin.php +++ b/app/i18n/en/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Description', 'disabled' => 'Disabled', 'empty_list' => 'There are no installed extensions', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Enabled', 'latest' => 'Installed', 'name' => 'Name', diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 72d7ad4fe..0fde3d3ac 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Previous', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profile management', 'api' => 'API management', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index e331284f6..e8d276349 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Display', 'extensions' => 'Extensions', 'logs' => 'Logs', + 'privacy' => 'Privacy', // TODO 'queries' => 'User queries', 'reading' => 'Reading', 'search' => 'Search words or #tags', diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php index 85dfd928f..7e522d6a1 100644 --- a/app/i18n/es/admin.php +++ b/app/i18n/es/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Descripción', 'disabled' => 'Desactivado', 'empty_list' => 'No hay extensiones instaladas', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Activado', 'latest' => 'Instalado', 'name' => 'Nombre', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 0a4dc635b..f5d95eec1 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Anterior', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Administración de perfiles', 'api' => 'Administración de API', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 856fb7133..e05a23235 100644 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Visualización', 'extensions' => 'Extensiones', 'logs' => 'Registros', + 'privacy' => 'Privacy', // TODO 'queries' => 'Peticiones de usuario', 'reading' => 'Lectura', 'search' => 'Buscar palabras o #etiquetas', diff --git a/app/i18n/fa/admin.php b/app/i18n/fa/admin.php index 6c6f6cd3c..e35f513f3 100644 --- a/app/i18n/fa/admin.php +++ b/app/i18n/fa/admin.php @@ -116,6 +116,7 @@ return array( 'description' => ' توضیحات', 'disabled' => ' معلول', 'empty_list' => ' هیچ برنامه افزودنی نصب شده ای وجود ندارد', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => ' فعال است', 'latest' => ' نصب شده است', 'name' => ' نام', diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php index 0c2be1a34..614ad6e00 100644 --- a/app/i18n/fa/conf.php +++ b/app/i18n/fa/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => ' قبلی', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => ' مدیریت پروفایل', 'api' => ' مدیریت API', diff --git a/app/i18n/fa/gen.php b/app/i18n/fa/gen.php index a0f74c2c1..460934d87 100644 --- a/app/i18n/fa/gen.php +++ b/app/i18n/fa/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'نمایش', 'extensions' => ' برنامه های افزودنی', 'logs' => ' سیاهههای مربوط', + 'privacy' => 'Privacy', // TODO 'queries' => ' پرس و جوهای کاربر', 'reading' => ' خواندن', 'search' => ' کلمات یا #برچسب ها را جستجو کنید', diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php index 29b1142c3..2a9f139e6 100644 --- a/app/i18n/fr/admin.php +++ b/app/i18n/fr/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Description', // IGNORE 'disabled' => 'Désactivée', 'empty_list' => 'Aucune extension installée', + 'empty_list_help' => 'Vérifiez les logs pour déterminer pourquoi la liste des extensions est vide.', 'enabled' => 'Activée', 'latest' => 'Installée', 'name' => 'Nom', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 129bbde43..46166a637 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Précédent', ), ), + 'privacy' => array( + '_' => 'Vie privée', + 'retrieve_extension_list' => 'Récupération de la liste des extensions', + ), 'profile' => array( '_' => 'Gestion du profil', 'api' => 'Gestion de l’API', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 2468e7127..f62c73a5e 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Affichage', 'extensions' => 'Extensions', // IGNORE 'logs' => 'Logs', // IGNORE + 'privacy' => 'Vie privée', 'queries' => 'Filtres utilisateurs', 'reading' => 'Lecture', 'search' => 'Rechercher des mots ou des #tags', diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php index 37694ca22..cd79ca0db 100644 --- a/app/i18n/he/admin.php +++ b/app/i18n/he/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Description', // TODO 'disabled' => 'Disabled', // TODO 'empty_list' => 'There is no installed extension', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Enabled', // TODO 'latest' => 'Installed', // TODO 'name' => 'Name', // TODO diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index cb2f5b152..bb88da752 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'הקודם', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profile management', // TODO 'api' => 'API management', // TODO diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index df5f12272..853e614f0 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'תצוגה', 'extensions' => 'Extensions', // TODO 'logs' => 'לוגים', + 'privacy' => 'Privacy', // TODO 'queries' => 'שאילתות', 'reading' => 'קריאה', 'search' => 'חיפוש מילים או #תגים', diff --git a/app/i18n/hu/admin.php b/app/i18n/hu/admin.php index 9307f2090..ded0094ba 100644 --- a/app/i18n/hu/admin.php +++ b/app/i18n/hu/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Leírás', 'disabled' => 'Kikapcsolva', 'empty_list' => 'Nincsenek telepített kiegészítők', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Bekapcsolva', 'latest' => 'Telepítve', 'name' => 'Név', diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php index df34c9bea..6c3a62545 100644 --- a/app/i18n/hu/conf.php +++ b/app/i18n/hu/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Előző', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profil kezelés', 'api' => 'API menedzsment', diff --git a/app/i18n/hu/gen.php b/app/i18n/hu/gen.php index 8ceed27a6..95e56c480 100644 --- a/app/i18n/hu/gen.php +++ b/app/i18n/hu/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Megjelenítés', 'extensions' => 'Kiegészítők', 'logs' => 'Log-ok', + 'privacy' => 'Privacy', // TODO 'queries' => 'Felhasználói lekérdezések', 'reading' => 'Olvasás', 'search' => 'Szavak vagy #címkék keresése', diff --git a/app/i18n/id/admin.php b/app/i18n/id/admin.php index ca8afdb1d..545adc0a7 100644 --- a/app/i18n/id/admin.php +++ b/app/i18n/id/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Keterangan', 'disabled' => 'Dinonaktifkan', 'empty_list' => 'Tidak ada ekstensi terpasang', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Diaktifkan', 'latest' => 'Terinstal', 'name' => 'Nama', diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index e3dc3e390..61296316e 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Sebelumnya', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Manajemen Profil', 'api' => 'Manajemen API', diff --git a/app/i18n/id/gen.php b/app/i18n/id/gen.php index 426089b5b..c012a445f 100644 --- a/app/i18n/id/gen.php +++ b/app/i18n/id/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Display', // TODO 'extensions' => 'Extensions', // TODO 'logs' => 'Logs', // TODO + 'privacy' => 'Privacy', // TODO 'queries' => 'User queries', // TODO 'reading' => 'Reading', // TODO 'search' => 'Search words or #tags', // TODO diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php index 2012e1db5..4a22fcaa4 100644 --- a/app/i18n/it/admin.php +++ b/app/i18n/it/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Descrizione', 'disabled' => 'Disabilitata', 'empty_list' => 'Non ci sono estensioni installate', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Abilitata', 'latest' => 'Installato', 'name' => 'Nome', diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index c55d87147..791958c9a 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Precedente', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Gestione profili', 'api' => 'Gestione API', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index bfa0ca56e..fa04ecae0 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Visualizzazione', 'extensions' => 'Estensioni', 'logs' => 'Log', + 'privacy' => 'Privacy', // TODO 'queries' => 'Ricerche personali', 'reading' => 'Lettura', 'search' => 'Ricerca parole o #tags', diff --git a/app/i18n/ja/admin.php b/app/i18n/ja/admin.php index 7b6d06d3f..800ad8b69 100644 --- a/app/i18n/ja/admin.php +++ b/app/i18n/ja/admin.php @@ -116,6 +116,7 @@ return array( 'description' => '説明', 'disabled' => '無効', 'empty_list' => 'インストールされている拡張機能はありません', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => '有効', 'latest' => 'インストール済み', 'name' => '名前', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 38cd74655..89530d12e 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => '前へ', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'プロフィール', 'api' => 'API管理', diff --git a/app/i18n/ja/gen.php b/app/i18n/ja/gen.php index 2822e0f57..9bcce07ba 100644 --- a/app/i18n/ja/gen.php +++ b/app/i18n/ja/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'ディスプレイ', 'extensions' => '拡張機能', 'logs' => 'ログ', + 'privacy' => 'Privacy', // TODO 'queries' => 'ユーザークエリ', 'reading' => 'リーディング', 'search' => '単語で検索するかハッシュタグで検索する', diff --git a/app/i18n/ko/admin.php b/app/i18n/ko/admin.php index 06076af7a..4c7ef8a7a 100644 --- a/app/i18n/ko/admin.php +++ b/app/i18n/ko/admin.php @@ -116,6 +116,7 @@ return array( 'description' => '설명', 'disabled' => '비활성화됨', 'empty_list' => '설치된 확장 기능이 없습니다', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => '활성화됨', 'latest' => '설치됨', 'name' => '이름', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 66f690f71..29c39186b 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => '이전', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => '프로필 관리', 'api' => 'API 관리', diff --git a/app/i18n/ko/gen.php b/app/i18n/ko/gen.php index 3dccb3189..ffd3f8db1 100644 --- a/app/i18n/ko/gen.php +++ b/app/i18n/ko/gen.php @@ -183,6 +183,7 @@ return array( 'display' => '표시', 'extensions' => '확장 기능', 'logs' => '로그', + 'privacy' => 'Privacy', // TODO 'queries' => '사용자 쿼리', 'reading' => '읽기', 'search' => '단어 또는 #태그 검색', diff --git a/app/i18n/lv/admin.php b/app/i18n/lv/admin.php index b2d9b8a3f..f501f0f14 100644 --- a/app/i18n/lv/admin.php +++ b/app/i18n/lv/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Apraksts', 'disabled' => 'Atspējots', 'empty_list' => 'Nav instalētu paplašinājumu', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Ieslēgts', 'latest' => 'Instalēts', 'name' => 'Vārds', diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php index 30de855c6..b56f6e37a 100644 --- a/app/i18n/lv/conf.php +++ b/app/i18n/lv/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Iepriekšējais', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profila pārvalde', 'api' => 'API pārvalde', diff --git a/app/i18n/lv/gen.php b/app/i18n/lv/gen.php index 6330f8d85..c4f78962d 100644 --- a/app/i18n/lv/gen.php +++ b/app/i18n/lv/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Display', // TODO 'extensions' => 'Paplašinājumi', 'logs' => 'Žurnāls', + 'privacy' => 'Privacy', // TODO 'queries' => 'Lietotāja pieprasījumi', 'reading' => 'Lasīšana', 'search' => 'Meklēt vārdus vai #birkas', diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php index daeabdfdc..f3f33771d 100644 --- a/app/i18n/nl/admin.php +++ b/app/i18n/nl/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Beschrijving', 'disabled' => 'Uitgeschakeld', 'empty_list' => 'Er zijn geïnstalleerde uitbreidingen', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Ingeschakeld', 'latest' => 'Geïnstalleerd', 'name' => 'Naam', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 46115fc39..f2bf351ab 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Vorige', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profielbeheer', 'api' => 'API-beheer', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index a63d50cfb..df106c866 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Opmaak', 'extensions' => 'Uitbreidingen', 'logs' => 'Log boeken', + 'privacy' => 'Privacy', // TODO 'queries' => 'Gebruikers informatie', 'reading' => 'Lezen', 'search' => 'Zoek woorden of #labels', diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php index 9cbd2a9ab..c74e4dcc1 100644 --- a/app/i18n/oc/admin.php +++ b/app/i18n/oc/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Descripcion', 'disabled' => 'Desactivada', 'empty_list' => 'Cap d’extensions pas installadas', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Activada', 'latest' => 'Installada', 'name' => 'Nom', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 30e9eeef0..134c51e64 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Precedent', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Gestion del perfil', 'api' => 'Gestion API', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index f3d11ba02..29468c587 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Afichatge', 'extensions' => 'Extensions', // IGNORE 'logs' => 'Jornals d’audit', // IGNORE + 'privacy' => 'Privacy', // TODO 'queries' => 'Filtres utilizaire', 'reading' => 'Lectura', 'search' => 'Recercar de mots o d’#etiquetas', diff --git a/app/i18n/pl/admin.php b/app/i18n/pl/admin.php index c22671a38..68ddd8b55 100644 --- a/app/i18n/pl/admin.php +++ b/app/i18n/pl/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Opis', 'disabled' => 'Wyłączone', 'empty_list' => 'Brak zainstalowanych rozszerzeń', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Włączone', 'latest' => 'Zainstalowane', 'name' => 'Nazwa', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index 071eef8b3..1ec98a61a 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Poprzednie', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Zarządzanie profilem', 'api' => 'Zarządzanie API', diff --git a/app/i18n/pl/gen.php b/app/i18n/pl/gen.php index 0f67641be..bdd0d172f 100644 --- a/app/i18n/pl/gen.php +++ b/app/i18n/pl/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Wyświetlanie', 'extensions' => 'Rozszerzenia', 'logs' => 'Dziennik', + 'privacy' => 'Privacy', // TODO 'queries' => 'Zapisane zapytania', 'reading' => 'Czytanie', 'search' => 'Wyszukaj wyrazy lub #tagi', diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php index eb509b545..f10a30fc9 100644 --- a/app/i18n/pt-br/admin.php +++ b/app/i18n/pt-br/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Descrição', 'disabled' => 'Desabilitado', 'empty_list' => 'Não há extensões instaladas', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Habilitada', 'latest' => 'Instalado', 'name' => 'Nome', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index 0bfc5cf6c..1dd98d627 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Anterior', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Gerenciamento de perfil', 'api' => 'Administração da API', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index cc96ccb85..d2abe1351 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Visualização', 'extensions' => 'Extensões', 'logs' => 'Logs', // IGNORE + 'privacy' => 'Privacy', // TODO 'queries' => 'Queries de usuário', 'reading' => 'Leitura', 'search' => 'Procurar por palavras ou #tags', diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php index 0951a0725..71c1a4bb2 100644 --- a/app/i18n/ru/admin.php +++ b/app/i18n/ru/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Описание', 'disabled' => 'Отключены', 'empty_list' => 'Нет установленных расширений', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Включены', 'latest' => 'Установлено', 'name' => 'Название', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 7b5b49f8b..246bb0b88 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Предыдущая', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Настройки профиля', 'api' => 'Настройки API', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index 188703457..f3ab54dbe 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Отображение', 'extensions' => 'Расширения', 'logs' => 'Журнал', + 'privacy' => 'Privacy', // TODO 'queries' => 'Пользовательские запросы', 'reading' => 'Чтение', 'search' => 'Искать слова или #теги', diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php index 98860b971..962a54457 100644 --- a/app/i18n/sk/admin.php +++ b/app/i18n/sk/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Popis', 'disabled' => 'Zakázané', 'empty_list' => 'Žiadne nainštalované rozšírenia', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Povolené', 'latest' => 'Nainštalované', 'name' => 'Názov', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index 193c3bb88..255916e58 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Predošlý', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Správca profilu', 'api' => 'Správa API', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index e0c94fb0e..a6f84ed3f 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Zobrazenie', 'extensions' => 'Rozšírenia', 'logs' => 'Záznamy', + 'privacy' => 'Privacy', // TODO 'queries' => 'Používateľské dopyty', 'reading' => 'Čítanie', 'search' => 'Hľadajte slová alebo #značky', diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php index fc3d3edda..906146d69 100644 --- a/app/i18n/tr/admin.php +++ b/app/i18n/tr/admin.php @@ -116,6 +116,7 @@ return array( 'description' => 'Açıklama', 'disabled' => 'Pasif', 'empty_list' => 'Yüklenmiş eklenti bulunmamaktadır', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => 'Aktif', 'latest' => 'Kuruldu', 'name' => 'İsim', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 0825551f3..87f709350 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => 'Önceki', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => 'Profil yönetimi', 'api' => 'API yönetimi', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 34e136096..e430f6376 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -183,6 +183,7 @@ return array( 'display' => 'Görünüm', 'extensions' => 'Eklentiler', 'logs' => 'Log kayıtları', + 'privacy' => 'Privacy', // TODO 'queries' => 'Kullanıcı sorguları', 'reading' => 'Okuma', 'search' => 'Kelime veya #etiket ara', diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php index dca56f65f..2006c6829 100644 --- a/app/i18n/zh-cn/admin.php +++ b/app/i18n/zh-cn/admin.php @@ -116,6 +116,7 @@ return array( 'description' => '描述', 'disabled' => '已禁用', 'empty_list' => '没有已安装的扩展', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => '已启用', 'latest' => '已安装', 'name' => '名称', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index a39024ffb..e2931dc47 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => '上一页', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => '账户管理', 'api' => 'API 管理', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 3377cb6f6..7b9d5a27d 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -183,6 +183,7 @@ return array( 'display' => '显示', 'extensions' => '扩展', 'logs' => '日志', + 'privacy' => 'Privacy', // TODO 'queries' => '自定义查询', 'reading' => '阅读', 'search' => '搜索内容或#文章标签', diff --git a/app/i18n/zh-tw/admin.php b/app/i18n/zh-tw/admin.php index 4c63f9bf6..f35fa4b5c 100644 --- a/app/i18n/zh-tw/admin.php +++ b/app/i18n/zh-tw/admin.php @@ -116,6 +116,7 @@ return array( 'description' => '描述', 'disabled' => '已禁用', 'empty_list' => '沒有已安裝的擴充功能', + 'empty_list_help' => 'Check the logs to determine the reason behind the empty extension list.', // TODO 'enabled' => '已啟用', 'latest' => '已安裝', 'name' => '名稱', diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index d75755373..90a1ab910 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -99,6 +99,10 @@ return array( 'previous' => '上一頁', ), ), + 'privacy' => array( + '_' => 'Privacy', // TODO + 'retrieve_extension_list' => 'Retrieve extension list', // TODO + ), 'profile' => array( '_' => '個人資料管理', 'api' => 'API 管理', diff --git a/app/i18n/zh-tw/gen.php b/app/i18n/zh-tw/gen.php index dcc82edba..b2b1fc67e 100644 --- a/app/i18n/zh-tw/gen.php +++ b/app/i18n/zh-tw/gen.php @@ -183,6 +183,7 @@ return array( 'display' => '顯示', 'extensions' => '擴充功能', 'logs' => '日誌', + 'privacy' => 'Privacy', // TODO 'queries' => '自定義查詢', 'reading' => '閱讀', 'search' => '搜尋內容或#標簽', diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index 06c5efa83..af366005c 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -43,6 +43,9 @@ <li class="item<?= Minz_Request::controllerName() === 'extension' ? ' active' : '' ?>"> <a href="<?= _url('extension', 'index') ?>"><?= _t('gen.menu.extensions') ?></a> </li> + <li class="item<?= Minz_Request::controllerName() === 'privacy' ? ' active' : '' ?>"> + <a href="<?= _url('configure', 'privacy') ?>"><?= _t('gen.menu.privacy') ?></a> + </li> <?php if (!FreshRSS_Auth::hasAccess('admin')) { ?> <li class="item<?= Minz_Request::actionName() === 'logs' ? ' active' : '' ?>"> <a href="<?= _url('index', 'logs') ?>"><?= _t('gen.menu.logs') ?></a> diff --git a/app/layout/header.phtml b/app/layout/header.phtml index 2e884add5..ad0a5e8e2 100644 --- a/app/layout/header.phtml +++ b/app/layout/header.phtml @@ -79,6 +79,7 @@ <li class="item"><a href="<?= _url('configure', 'shortcut') ?>"><?= _t('gen.menu.shortcuts') ?></a></li> <li class="item"><a href="<?= _url('configure', 'queries') ?>"><?= _t('gen.menu.queries') ?></a></li> <li class="item"><a href="<?= _url('extension', 'index') ?>"><?= _t('gen.menu.extensions') ?></a></li> + <li class="item"><a href="<?= _url('configure', 'privacy') ?>"><?= _t('gen.menu.privacy') ?></a></li> <?= Minz_ExtensionManager::callHookString('menu_configuration_entry') ?> </ul> </li> diff --git a/app/views/configure/privacy.phtml b/app/views/configure/privacy.phtml new file mode 100644 index 000000000..d64358382 --- /dev/null +++ b/app/views/configure/privacy.phtml @@ -0,0 +1,32 @@ +<?php + /** @var FreshRSS_View $this */ + $this->partial('aside_configure'); +?> + +<main class="post"> + <div class="link-back-wrapper"> + <a class="link-back" href="<?= _url('index', 'index') ?>"><?= _t('gen.action.back_to_rss_feeds') ?></a> + </div> + + <h1><?= _t('conf.privacy') ?></h1> + + <form method="post" action="<?= _url('configure', 'privacy') ?>"> + <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" /> + + <div class="form-group"> + <label class="group-name" for="retrieve_extension_list"><?= _t('conf.privacy.retrieve_extension_list') ?></label> + <div class="group-controls"> + <input type="checkbox" id="retrieve_extension_list" name="retrieve_extension_list" value="1"<?= + FreshRSS_Context::userConf()->retrieve_extension_list !== false ? ' checked="checked"' : '' ?> + data-leave-validation="<?= FreshRSS_Context::userConf()->retrieve_extension_list !== false ? 1 : 0 ?>"/> + </div> + </div> + + <div class="form-group form-actions"> + <div class="group-controls"> + <button type="submit" class="btn btn-important"><?= _t('gen.action.submit') ?></button> + <button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button> + </div> + </div> + </form> +</main> diff --git a/app/views/extension/index.phtml b/app/views/extension/index.phtml index 328b4bdd5..9f5bf821b 100644 --- a/app/views/extension/index.phtml +++ b/app/views/extension/index.phtml @@ -76,6 +76,8 @@ <?php } ?> </table> </div> + <?php } else { ?> + <p class="alert alert-warn"><?= _t('admin.extensions.empty_list_help') ?></p> <?php } ?> </main> diff --git a/config-user.default.php b/config-user.default.php index af48f61b8..964ef8860 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -124,6 +124,7 @@ return array ( 'show_nav_buttons' => true, # List of enabled FreshRSS extensions. 'extensions_enabled' => [], + 'retrieve_extension_list' => true, # Extensions configurations 'extensions' => [], ); |
