aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Controllers/configureController.php16
-rw-r--r--app/Controllers/extensionController.php13
-rw-r--r--app/Models/UserConfiguration.php1
-rw-r--r--app/i18n/cs/admin.php1
-rw-r--r--app/i18n/cs/conf.php4
-rw-r--r--app/i18n/cs/gen.php1
-rw-r--r--app/i18n/de/admin.php1
-rw-r--r--app/i18n/de/conf.php4
-rw-r--r--app/i18n/de/gen.php1
-rw-r--r--app/i18n/el/admin.php1
-rw-r--r--app/i18n/el/conf.php4
-rw-r--r--app/i18n/el/gen.php1
-rw-r--r--app/i18n/en-us/admin.php1
-rw-r--r--app/i18n/en-us/conf.php4
-rw-r--r--app/i18n/en-us/gen.php1
-rw-r--r--app/i18n/en/admin.php1
-rw-r--r--app/i18n/en/conf.php4
-rw-r--r--app/i18n/en/gen.php1
-rw-r--r--app/i18n/es/admin.php1
-rw-r--r--app/i18n/es/conf.php4
-rw-r--r--app/i18n/es/gen.php1
-rw-r--r--app/i18n/fa/admin.php1
-rw-r--r--app/i18n/fa/conf.php4
-rw-r--r--app/i18n/fa/gen.php1
-rw-r--r--app/i18n/fr/admin.php1
-rw-r--r--app/i18n/fr/conf.php4
-rw-r--r--app/i18n/fr/gen.php1
-rw-r--r--app/i18n/he/admin.php1
-rw-r--r--app/i18n/he/conf.php4
-rw-r--r--app/i18n/he/gen.php1
-rw-r--r--app/i18n/hu/admin.php1
-rw-r--r--app/i18n/hu/conf.php4
-rw-r--r--app/i18n/hu/gen.php1
-rw-r--r--app/i18n/id/admin.php1
-rw-r--r--app/i18n/id/conf.php4
-rw-r--r--app/i18n/id/gen.php1
-rw-r--r--app/i18n/it/admin.php1
-rw-r--r--app/i18n/it/conf.php4
-rw-r--r--app/i18n/it/gen.php1
-rw-r--r--app/i18n/ja/admin.php1
-rw-r--r--app/i18n/ja/conf.php4
-rw-r--r--app/i18n/ja/gen.php1
-rw-r--r--app/i18n/ko/admin.php1
-rw-r--r--app/i18n/ko/conf.php4
-rw-r--r--app/i18n/ko/gen.php1
-rw-r--r--app/i18n/lv/admin.php1
-rw-r--r--app/i18n/lv/conf.php4
-rw-r--r--app/i18n/lv/gen.php1
-rw-r--r--app/i18n/nl/admin.php1
-rw-r--r--app/i18n/nl/conf.php4
-rw-r--r--app/i18n/nl/gen.php1
-rw-r--r--app/i18n/oc/admin.php1
-rw-r--r--app/i18n/oc/conf.php4
-rw-r--r--app/i18n/oc/gen.php1
-rw-r--r--app/i18n/pl/admin.php1
-rw-r--r--app/i18n/pl/conf.php4
-rw-r--r--app/i18n/pl/gen.php1
-rw-r--r--app/i18n/pt-br/admin.php1
-rw-r--r--app/i18n/pt-br/conf.php4
-rw-r--r--app/i18n/pt-br/gen.php1
-rw-r--r--app/i18n/ru/admin.php1
-rw-r--r--app/i18n/ru/conf.php4
-rw-r--r--app/i18n/ru/gen.php1
-rw-r--r--app/i18n/sk/admin.php1
-rw-r--r--app/i18n/sk/conf.php4
-rw-r--r--app/i18n/sk/gen.php1
-rw-r--r--app/i18n/tr/admin.php1
-rw-r--r--app/i18n/tr/conf.php4
-rw-r--r--app/i18n/tr/gen.php1
-rw-r--r--app/i18n/zh-cn/admin.php1
-rw-r--r--app/i18n/zh-cn/conf.php4
-rw-r--r--app/i18n/zh-cn/gen.php1
-rw-r--r--app/i18n/zh-tw/admin.php1
-rw-r--r--app/i18n/zh-tw/conf.php4
-rw-r--r--app/i18n/zh-tw/gen.php1
-rw-r--r--app/layout/aside_configure.phtml3
-rw-r--r--app/layout/header.phtml1
-rw-r--r--app/views/configure/privacy.phtml32
-rw-r--r--app/views/extension/index.phtml2
-rw-r--r--config-user.default.php1
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' => [],
);