From 49e1a2c579757994ae4ed5994339bd58a09238db Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Fri, 2 Aug 2019 11:40:57 +0200 Subject: Allow to change the view layout (#2467) The `_useLayout` function is marked as deprecated, replaced by a more powerful `_layout` function. --- app/Controllers/indexController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/Controllers/indexController.php') diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index f536113dd..4023492d2 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -155,7 +155,7 @@ class FreshRSS_index_Controller extends Minz_ActionController { // No layout for RSS output. $this->view->url = PUBLIC_TO_INDEX_PATH . '/' . (empty($_SERVER['QUERY_STRING']) ? '' : '?' . $_SERVER['QUERY_STRING']); $this->view->rss_title = FreshRSS_Context::$name . ' | ' . Minz_View::title(); - $this->view->_useLayout(false); + $this->view->_layout(false); header('Content-Type: application/rss+xml; charset=utf-8'); } -- cgit v1.2.3 From a2ed6626c2f4e85878f775abcac897a1fd3a1f42 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Fri, 13 Sep 2019 17:33:18 +0200 Subject: Add support for terms of service This feature is optional. It is based on the presence of a `data/tos.html` file that an administrator can create. If this file exists, FreshRSS will automatically add a "ToS" checkbox on the registration page that users must check to be able to create their account. --- app/Controllers/authController.php | 1 + app/Controllers/indexController.php | 17 +++++++++++ app/Controllers/userController.php | 10 +++++++ app/i18n/cz/gen.php | 1 + app/i18n/cz/index.php | 3 ++ app/i18n/cz/user.php | 5 ++++ app/i18n/de/gen.php | 1 + app/i18n/de/index.php | 3 ++ app/i18n/de/user.php | 5 ++++ app/i18n/en/gen.php | 1 + app/i18n/en/index.php | 3 ++ app/i18n/en/user.php | 5 ++++ app/i18n/es/gen.php | 1 + app/i18n/es/index.php | 3 ++ app/i18n/es/user.php | 5 ++++ app/i18n/fr/gen.php | 1 + app/i18n/fr/index.php | 3 ++ app/i18n/fr/user.php | 5 ++++ app/i18n/he/gen.php | 1 + app/i18n/he/index.php | 3 ++ app/i18n/he/user.php | 5 ++++ app/i18n/it/gen.php | 1 + app/i18n/it/index.php | 3 ++ app/i18n/it/user.php | 5 ++++ app/i18n/kr/gen.php | 1 + app/i18n/kr/index.php | 3 ++ app/i18n/kr/user.php | 5 ++++ app/i18n/nl/gen.php | 1 + app/i18n/nl/index.php | 3 ++ app/i18n/nl/user.php | 5 ++++ app/i18n/oc/gen.php | 1 + app/i18n/oc/index.php | 3 ++ app/i18n/oc/user.php | 5 ++++ app/i18n/pt-br/gen.php | 1 + app/i18n/pt-br/index.php | 3 ++ app/i18n/pt-br/user.php | 5 ++++ app/i18n/ru/gen.php | 1 + app/i18n/ru/index.php | 3 ++ app/i18n/ru/user.php | 5 ++++ app/i18n/sk/gen.php | 1 + app/i18n/sk/index.php | 3 ++ app/i18n/sk/user.php | 37 ++++++++++++++++++++++++ app/i18n/tr/gen.php | 1 + app/i18n/tr/index.php | 3 ++ app/i18n/tr/user.php | 5 ++++ app/i18n/zh-cn/gen.php | 1 + app/i18n/zh-cn/index.php | 3 ++ app/i18n/zh-cn/user.php | 5 ++++ app/views/auth/register.phtml | 9 ++++++ app/views/index/tos.phtml | 13 +++++++++ data/.gitignore | 1 + data/tos.example.html | 56 +++++++++++++++++++++++++++++++++++++ 52 files changed, 274 insertions(+) create mode 100644 app/i18n/sk/user.php create mode 100644 app/views/index/tos.phtml create mode 100644 data/tos.example.html (limited to 'app/Controllers/indexController.php') diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index a8b21b886..70adaa5d3 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -205,6 +205,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController { Minz_Error::error(403); } + $this->view->show_tos_checkbox = file_exists(join_path(DATA_PATH, 'tos.html')); $this->view->show_email_field = FreshRSS_Context::$system_conf->force_email_validation; Minz_View::prependTitle(_t('gen.auth.registration.title') . ' · '); } diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 4023492d2..2d791ce1d 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -259,6 +259,23 @@ class FreshRSS_index_Controller extends Minz_ActionController { Minz_View::prependTitle(_t('index.about.title') . ' · '); } + /** + * This action displays the EULA page of FreshRSS. + * This page is enabled only if admin created a data/tos.html file. + * The content of the page is the content of data/tos.html. + * It returns 404 if there is no EULA. + */ + public function tosAction() { + $terms_of_service = file_get_contents(join_path(DATA_PATH, 'tos.html')); + if (!$terms_of_service) { + Minz_Error::error(404); + } + + $this->view->terms_of_service = $terms_of_service; + $this->view->can_register = !max_registrations_reached(); + Minz_View::prependTitle(_t('index.tos.title') . ' · '); + } + /** * This action displays logs of FreshRSS for the current user. */ diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php index 69c1820e5..ab8dfb0b2 100644 --- a/app/Controllers/userController.php +++ b/app/Controllers/userController.php @@ -281,6 +281,9 @@ class FreshRSS_user_Controller extends Minz_ActionController { $passwordPlain = Minz_Request::param('new_user_passwordPlain', '', true); $new_user_language = Minz_Request::param('new_user_language', FreshRSS_Context::$user_conf->language); + $tos_enabled = file_exists(join_path(DATA_PATH, 'tos.html')); + $accept_tos = Minz_Request::param('accept_tos', false); + if ($system_conf->force_email_validation && empty($email)) { Minz_Request::bad( _t('user.email.feedback.required'), @@ -295,6 +298,13 @@ class FreshRSS_user_Controller extends Minz_ActionController { ); } + if ($tos_enabled && !$accept_tos) { + Minz_Request::bad( + _t('user.tos.feedback.invalid'), + array('c' => 'auth', 'a' => 'register') + ); + } + $ok = self::createUser($new_user_name, $email, $passwordPlain, '', array('language' => $new_user_language)); Minz_Request::_param('new_user_passwordPlain'); //Discard plain-text password ASAP $_POST['new_user_passwordPlain'] = ''; diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index 78229afaa..c6dabd555 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email', 'keep_logged_in' => 'Zapamatovat přihlášení (%s dny)', 'login' => 'Login', diff --git a/app/i18n/cz/index.php b/app/i18n/cz/index.php index 00f424fe8..b20a75c79 100644 --- a/app/i18n/cz/index.php +++ b/app/i18n/cz/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Verze', 'website' => 'Webové stránka', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Můžete přidat kanály.', 'empty' => 'Žádné články k zobrazení.', diff --git a/app/i18n/cz/user.php b/app/i18n/cz/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/cz/user.php +++ b/app/i18n/cz/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index a4108775d..6cc791d5e 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Aktualisieren', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'E-Mail-Adresse', 'keep_logged_in' => 'Eingeloggt bleiben (%s Tage)', 'login' => 'Anmelden', diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php index 10172e6f5..11fa370a3 100644 --- a/app/i18n/de/index.php +++ b/app/i18n/de/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Version', 'website' => 'Webseite', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Sie können Feeds hinzufügen.', 'empty' => 'Es gibt keinen Artikel zum Anzeigen.', diff --git a/app/i18n/de/user.php b/app/i18n/de/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/de/user.php +++ b/app/i18n/de/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index 8f1d8d19e..a6ddcbb60 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', 'email' => 'Email address', 'keep_logged_in' => 'Keep me logged in (%s days)', 'login' => 'Login', diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php index 46c415816..ea2c6620b 100644 --- a/app/i18n/en/index.php +++ b/app/i18n/en/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Version', 'website' => 'Website', ), + 'tos' => array( + 'title' => 'Terms of Service', + ), 'feed' => array( 'add' => 'You may add some feeds.', 'empty' => 'There is no article to show.', diff --git a/app/i18n/en/user.php b/app/i18n/en/user.php index 5b4cd4fcb..54d8dfa4d 100644 --- a/app/i18n/en/user.php +++ b/app/i18n/en/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index b394d292e..4affecc51 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Correo electrónico', 'keep_logged_in' => 'Mantenerme identificado (%s días)', 'login' => 'Conectar', diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php index d7a42537b..5142ae1f5 100755 --- a/app/i18n/es/index.php +++ b/app/i18n/es/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Versión', 'website' => 'Web', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Puedes añadir fuentes.', 'empty' => 'No hay artículos a mostrar.', diff --git a/app/i18n/es/user.php b/app/i18n/es/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/es/user.php +++ b/app/i18n/es/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 4c4070685..01b66d316 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Mettre à jour', ), 'auth' => array( + 'accept_tos' => 'Accepter les Conditions Générales d’Utilisation.', 'email' => 'Adresse courriel', 'keep_logged_in' => 'Rester connecté (%s jours)', 'login' => 'Connexion', diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php index c9595e449..f8f451473 100644 --- a/app/i18n/fr/index.php +++ b/app/i18n/fr/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Version', 'website' => 'Site Internet', ), + 'tos' => array( + 'title' => 'Conditions Générales d’Utilisation', + ), 'feed' => array( 'add' => 'Vous pouvez ajouter des flux.', 'empty' => 'Il n’y a aucun article à afficher.', diff --git a/app/i18n/fr/user.php b/app/i18n/fr/user.php index 01d3ad1af..7b531c749 100644 --- a/app/i18n/fr/user.php +++ b/app/i18n/fr/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Validation de l’adresse email', ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'Vous devez accepter les conditions générales d’utilisation pour pouvoir vous inscrire.', + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'Vous devez valider votre compte', diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 1aee24742..158f11e5b 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email address', //TODO - Translation 'keep_logged_in' => 'השאר מחובר חודש', 'login' => 'כניסה לחשבון', diff --git a/app/i18n/he/index.php b/app/i18n/he/index.php index e01a02773..b4b99e583 100644 --- a/app/i18n/he/index.php +++ b/app/i18n/he/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'גרסה', 'website' => 'אתר', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'ניתן להוסיף הזנות חדשות.', 'empty' => 'אין מאמר להצגה.', diff --git a/app/i18n/he/user.php b/app/i18n/he/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/he/user.php +++ b/app/i18n/he/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index 1d4fa4cdc..604cc6941 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', // TODO ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Indirizzo email', 'keep_logged_in' => 'Ricorda i dati (%s giorni)', 'login' => 'Accedi', diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php index 8162b1639..b4f7bc8d7 100644 --- a/app/i18n/it/index.php +++ b/app/i18n/it/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Versione', 'website' => 'Sito', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Aggiungi un Feed RSS', 'empty' => 'Non ci sono articoli da mostrare.', diff --git a/app/i18n/it/user.php b/app/i18n/it/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/it/user.php +++ b/app/i18n/it/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index cd38bc9f8..55fea3d66 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -23,6 +23,7 @@ return array( 'update' => '변경', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => '메일 주소', 'keep_logged_in' => '로그인 유지 (%s 일)', 'login' => '로그인', diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php index bebc8bdec..cc8df32f6 100644 --- a/app/i18n/kr/index.php +++ b/app/i18n/kr/index.php @@ -15,6 +15,9 @@ return array( 'version' => '버전', 'website' => '웹사이트', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => '피드를 추가하세요.', 'empty' => '글이 없습니다.', diff --git a/app/i18n/kr/user.php b/app/i18n/kr/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/kr/user.php +++ b/app/i18n/kr/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 419d8b36c..0dcb3010a 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Updaten', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email adres', 'keep_logged_in' => 'Ingelogd blijven voor (%s dagen)', 'login' => 'Log in', diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php index 5f71a180f..115e31b5d 100644 --- a/app/i18n/nl/index.php +++ b/app/i18n/nl/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Versie', 'website' => 'Website', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'U kunt wat feeds toevoegen.', 'empty' => 'Er is geen artikel om te laten zien.', diff --git a/app/i18n/nl/user.php b/app/i18n/nl/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/nl/user.php +++ b/app/i18n/nl/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 8bbe04aec..57e783395 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Actualizar', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Adreça de corrièl', 'keep_logged_in' => 'Demorar connectat (%s jorns) ', 'login' => 'Connexion', diff --git a/app/i18n/oc/index.php b/app/i18n/oc/index.php index 5cc71c9a9..338d13a8e 100644 --- a/app/i18n/oc/index.php +++ b/app/i18n/oc/index.php @@ -15,6 +15,9 @@ return array( 'website' => 'Site internet', 'version' => 'Version', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Podètz ajustar de fluxes.', 'empty' => 'I a pas cap de flux de mostrar.', diff --git a/app/i18n/oc/user.php b/app/i18n/oc/user.php index 4bcfebaf9..8f948e61d 100644 --- a/app/i18n/oc/user.php +++ b/app/i18n/oc/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Validacion de l’adreça electronica', ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'Vos cal validar vòstra adreça electronica', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index d6d0d9b33..b327937d5 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Endereço de e-mail', 'keep_logged_in' => 'Mantenha logado por (%s days)', 'login' => 'Login', diff --git a/app/i18n/pt-br/index.php b/app/i18n/pt-br/index.php index e5807ed95..17c80f4fc 100644 --- a/app/i18n/pt-br/index.php +++ b/app/i18n/pt-br/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Versão', 'website' => 'Site', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Você pode adicionar alguns feeds.', 'empty' => 'Não há nenhum artigo para mostrar.', diff --git a/app/i18n/pt-br/user.php b/app/i18n/pt-br/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/pt-br/user.php +++ b/app/i18n/pt-br/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index dec454eae..cc1d7e00e 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email address', //TODO - Translation 'keep_logged_in' => 'Keep me logged in (%s дней)', //TODO - Translation 'login' => 'Login', //TODO - Translation diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php index 977777178..185350432 100644 --- a/app/i18n/ru/index.php +++ b/app/i18n/ru/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Version', //TODO - Translation 'website' => 'Website', //TODO - Translation ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'You may add some feeds.', //TODO - Translation 'empty' => 'There is no article to show.', //TODO - Translation diff --git a/app/i18n/ru/user.php b/app/i18n/ru/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/ru/user.php +++ b/app/i18n/ru/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index 00a03736e..7303ffa9f 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -22,6 +22,7 @@ return array( 'update' => 'Aktualizovať', ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'E-mailová adresa', 'keep_logged_in' => 'Zostať prihlásený (počet dní: %s)', 'login' => 'Prihlásiť', diff --git a/app/i18n/sk/index.php b/app/i18n/sk/index.php index 19e63e720..5bbcbdc21 100644 --- a/app/i18n/sk/index.php +++ b/app/i18n/sk/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Verzia', 'website' => 'Webová stránka', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Môžete pridať kanály.', 'empty' => 'Žiadne články.', diff --git a/app/i18n/sk/user.php b/app/i18n/sk/user.php new file mode 100644 index 000000000..3a8343c11 --- /dev/null +++ b/app/i18n/sk/user.php @@ -0,0 +1,37 @@ + array( + 'feedback' => array( + 'invalid' => 'The email address is invalid.', //TODO - Translation + 'required' => 'The email address is required.', //TODO - Translation + ), + 'validation' => array( + 'change_email' => 'You can change your email address on the profile page.', //TODO - Translation + 'email_sent_to' => 'We sent you an email at %s, please follow its indications to validate your address.', //TODO - Translation + 'feedback' => array( + 'email_failed' => 'We couldn’t send you an email because of a misconfiguration of the server.', //TODO - Translation + 'email_sent' => 'An email has been sent to your address.', //TODO - Translation + 'error' => 'The email address failed to be validated.', //TODO - Translation + 'ok' => 'The email address has been validated.', //TODO - Translation + 'unneccessary' => 'The email address was already validated.', //TODO - Translation + 'wrong_token' => 'The email address failed to be validated due to a wrong token.', //TODO - Translation + ), + 'need_to' => 'You need to validate your email address before being able to use %s.', //TODO - Translation + 'resend_email' => 'Resend the email', //TODO - Translation + 'title' => 'Email address validation', //TODO - Translation + ), + ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), + 'mailer' => array( + 'email_need_validation' => array( + 'title' => 'You need to validate your account', //TODO - Translation + 'welcome' => 'Welcome %s,', //TODO - Translation + 'body' => 'You’ve just registered on %s but you still need to validate your email. For that, just follow the link:', //TODO - Translation + ), + ), +); diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 561cee7cd..5e361affb 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -23,6 +23,7 @@ return array( 'update' => 'Update', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email adresleri', 'keep_logged_in' => '(%s günler) oturumu açık tut', 'login' => 'Giriş', diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php index d6db514dd..6f1b596cf 100644 --- a/app/i18n/tr/index.php +++ b/app/i18n/tr/index.php @@ -15,6 +15,9 @@ return array( 'version' => 'Versiyon', 'website' => 'Website', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => 'Akış ekleyebilirsin.', 'empty' => 'Gösterilecek makale yok.', diff --git a/app/i18n/tr/user.php b/app/i18n/tr/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/tr/user.php +++ b/app/i18n/tr/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 863917f54..7ae156573 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -23,6 +23,7 @@ return array( 'update' => '更新', //TODO - Translation ), 'auth' => array( + 'accept_tos' => 'I accept the Terms of Service.', // TODO - Translation 'email' => 'Email 地址', 'keep_logged_in' => '自动登录(%s 天)', 'login' => '登录', diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php index 018813c3e..659f16b7c 100644 --- a/app/i18n/zh-cn/index.php +++ b/app/i18n/zh-cn/index.php @@ -15,6 +15,9 @@ return array( 'version' => '版本', 'website' => '网站', ), + 'tos' => array( + 'title' => 'Terms of Service', // TODO - Translation + ), 'feed' => array( 'add' => '你可以添加一些 RSS 源。', 'empty' => '暂时没有文章可显示。', diff --git a/app/i18n/zh-cn/user.php b/app/i18n/zh-cn/user.php index 4f2cfcda2..3a8343c11 100644 --- a/app/i18n/zh-cn/user.php +++ b/app/i18n/zh-cn/user.php @@ -22,6 +22,11 @@ return array( 'title' => 'Email address validation', //TODO - Translation ), ), + 'tos' => array( + 'feedback' => array( + 'invalid' => 'You must accept the Terms of Service to be able to register.', // TODO - Translation + ), + ), 'mailer' => array( 'email_need_validation' => array( 'title' => 'You need to validate your account', //TODO - Translation diff --git a/app/views/auth/register.phtml b/app/views/auth/register.phtml index 87582a2d0..b90950510 100644 --- a/app/views/auth/register.phtml +++ b/app/views/auth/register.phtml @@ -26,6 +26,15 @@ + show_tos_checkbox) { ?> +
+ +
+ +
+ can_register) { ?> + + + + + + + + + + terms_of_service; ?> +
diff --git a/data/.gitignore b/data/.gitignore index 1d2d8db89..862bf4ad1 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -6,3 +6,4 @@ force-https.txt last_update.txt no-cache.txt update.php +tos.html diff --git a/data/tos.example.html b/data/tos.example.html new file mode 100644 index 000000000..370302b16 --- /dev/null +++ b/data/tos.example.html @@ -0,0 +1,56 @@ +

Terms of Service

+ +

Article 1: Lorem ipsum

+ +

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla, + magna non luctus lobortis, ipsum quam bibendum ipsum, ac rhoncus ipsum + velit in dolor. Vivamus quis ultrices sapien. Maecenas imperdiet massa + felis, ut ullamcorper arcu fermentum at. Mauris vitae tempor mi. Nullam ut + fermentum tortor, a luctus neque. Aenean imperdiet, leo vel blandit + molestie, lorem risus suscipit sem, et facilisis tellus elit ut magna. Ut + mattis blandit quam vitae interdum. Vestibulum quis pharetra ex, nec + efficitur erat. Vivamus hendrerit quam non facilisis lacinia. Sed tincidunt + consectetur maximus. Quisque eleifend risus vel felis hendrerit vulputate. + Nulla quis dapibus sapien, eget egestas quam. Nulla facilisi. Pellentesque + tincidunt elementum ultricies. Praesent mauris ante, ultrices quis dui ut, + ornare lacinia lectus. Etiam neque massa, congue in gravida et, mollis + egestas eros. +

+ +

Article 2: Nunc Vel Diam

+ +

+ Nunc vel diam sollicitudin turpis pharetra lobortis. Donec id mattis ipsum, + non porta sem. Maecenas fermentum velit quis sem lacinia egestas. Praesent + vulputate nulla in lectus tempus, maximus suscipit felis molestie. Sed ac + suscipit mi. Maecenas at pretium nibh, a elementum elit. Ut pretium turpis + tempor maximus ullamcorper. Vivamus ipsum velit, volutpat vitae varius ut, + dignissim eget mi. Nunc id erat facilisis, vestibulum lacus in, ultricies + purus. Mauris id ligula tempor, venenatis dolor at, mattis magna. Duis + luctus dui ut est porttitor, id pulvinar enim tempus. +

+ +

Article 3: Ut Non Leo Commodo

+ +

+ Ut non leo commodo, tempus mauris ac, pulvinar nunc. Fusce facilisis purus + et est ornare, eget tempor purus porttitor. Donec ut leo in diam sodales + ullamcorper. Sed efficitur nisl sit amet ante euismod, id dapibus dui + mollis. In sagittis eget dolor id pharetra. Suspendisse pellentesque + ultricies volutpat. Pellentesque pretium quam quis ligula lobortis + convallis. Donec vel erat elementum, varius metus a, egestas turpis. + Aliquam porttitor ut dolor et volutpat. Aliquam pretium, enim quis suscipit + bibendum, risus diam convallis tellus, et cursus odio felis quis nibh. + Vivamus fringilla hendrerit massa, eget varius odio ultrices vestibulum. Ut + vehicula eget tortor quis sodales. +

+ +

+ Pellentesque pulvinar ex vel metus volutpat, a pretium libero aliquet. In + fringilla nisi ac lorem hendrerit, non volutpat elit condimentum. + Pellentesque congue luctus purus id porta. Suspendisse nec elementum urna. + Maecenas sollicitudin a tortor nec finibus. Donec malesuada, lectus + blandit sodales egestas, tortor ipsum cursus eros, eget pellentesque erat + nunc ut nulla. Vivamus porttitor consectetur felis at luctus. +

-- cgit v1.2.3 From f6e10579f2e78dc6403141351e41e2db9a2b6e97 Mon Sep 17 00:00:00 2001 From: Alexis Degrugillier Date: Sat, 26 Oct 2019 13:16:15 +0200 Subject: Add category order (#2592) * Add category order Each category has a new 'priority' attribute. It is used to sort categories in views. Categories with the same priority are sorted alphabetically. Categories with no priority are displayed after those with one. For example, if we have the following categories: - A (priority: 2) - B (no priority) - C (priority: 1) - D (priority: 2) - E (no priority) - F (priority: 1) They will be displayed in the following order: - C - F - A - D - B - E See #190 * Shorten help text It took too much room and will not be so necessary once we have drag & drop --- app/Controllers/indexController.php | 2 +- app/Controllers/subscriptionController.php | 5 ++++- app/Models/Category.php | 4 ++-- app/Models/CategoryDAO.php | 25 +++++++++++++++++++++++++ app/i18n/cz/sub.php | 2 ++ app/i18n/de/sub.php | 2 ++ app/i18n/en/sub.php | 2 ++ app/i18n/es/sub.php | 2 ++ app/i18n/fr/sub.php | 2 ++ app/i18n/he/sub.php | 2 ++ app/i18n/it/sub.php | 2 ++ app/i18n/kr/sub.php | 2 ++ app/i18n/nl/sub.php | 2 ++ app/i18n/oc/sub.php | 2 ++ app/i18n/pt-br/sub.php | 2 ++ app/i18n/ru/sub.php | 2 ++ app/i18n/sk/sub.php | 2 ++ app/i18n/tr/sub.php | 2 ++ app/i18n/zh-cn/sub.php | 2 ++ app/layout/aside_feed.phtml | 3 ++- app/views/helpers/category/update.phtml | 7 +++++++ 21 files changed, 71 insertions(+), 5 deletions(-) (limited to 'app/Controllers/indexController.php') diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 2d791ce1d..967029fd1 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -173,7 +173,7 @@ class FreshRSS_index_Controller extends Minz_ActionController { private function updateContext() { if (empty(FreshRSS_Context::$categories)) { $catDAO = FreshRSS_Factory::createCategoryDao(); - FreshRSS_Context::$categories = $catDAO->listCategories(); + FreshRSS_Context::$categories = $catDAO->listSortedCategories(); } // Update number of read / unread variables. diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index f9497f0be..b4520c8e6 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -19,7 +19,7 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { $catDAO->checkDefault(); $feedDAO->updateTTL(); - $this->view->categories = $catDAO->listCategories(false); + $this->view->categories = $catDAO->listSortedCategories(false); $this->view->default_category = $catDAO->getDefault(); } @@ -216,6 +216,9 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { ]); } + $position = Minz_Request::param('position'); + $category->_attributes('position', '' === $position ? null : (int) $position); + $values = [ 'name' => Minz_Request::param('name', ''), 'attributes' => $category->attributes(), diff --git a/app/Models/Category.php b/app/Models/Category.php index a0ee1ddaa..a195c88b3 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -98,14 +98,14 @@ class FreshRSS_Category extends Minz_Model { } public function _attributes($key, $value) { - if ($key == '') { + if ('' == $key) { if (is_string($value)) { $value = json_decode($value, true); } if (is_array($value)) { $this->attributes = $value; } - } elseif ($value === null) { + } elseif (null === $value) { unset($this->attributes[$key]); } else { $this->attributes[$key] = $value; diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index 210830640..a0eda89e7 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -201,6 +201,29 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable } } + public function listSortedCategories($prePopulateFeeds = true, $details = false) { + $categories = $this->listCategories($prePopulateFeeds, $details); + + if (!is_array($categories)) { + return $categories; + } + + usort($categories, function ($a, $b) { + $aPosition = $a->attributes('position'); + $bPosition = $b->attributes('position'); + if ($aPosition === $bPosition) { + return ($a->name() < $b->name()) ? -1 : 1; + } elseif (null === $aPosition) { + return 1; + } elseif (null === $bPosition) { + return -1; + } + return ($aPosition < $bPosition) ? -1 : 1; + }); + + return $categories; + } + public function listCategories($prePopulateFeeds = true, $details = false) { if ($prePopulateFeeds) { $sql = 'SELECT c.id AS c_id, c.name AS c_name, c.attributes AS c_attributes, ' @@ -343,6 +366,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable $feedDao->daoToFeed($feedsDao, $previousLine['c_id']) ); $cat->_id($previousLine['c_id']); + $cat->_attributes('', $previousLine['c_attributes']); $list[$previousLine['c_id']] = $cat; $feedsDao = array(); //Prepare for next category @@ -359,6 +383,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable $feedDao->daoToFeed($feedsDao, $previousLine['c_id']) ); $cat->_id($previousLine['c_id']); + $cat->_attributes('', $previousLine['c_attributes']); $list[$previousLine['c_id']] = $cat; } diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index eaaff9acd..fefc05699 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Vyprázdit kategorii', 'information' => 'Informace', 'new' => 'Nová kategorie', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Název', ), 'feed' => array( diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index 1227b5559..6feb1d6e1 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Leere Kategorie', 'information' => 'Information', 'new' => 'Neue Kategorie', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Titel', ), 'feed' => array( diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 04ca793ec..765cbf964 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Empty category', 'information' => 'Information', 'new' => 'New category', + 'position' => 'Display position', + 'position_help' => 'To control category sort order', 'title' => 'Title', ), 'feed' => array( diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index 96be76c6c..f2986ee5d 100755 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Vaciar categoría', 'information' => 'Información', 'new' => 'Nueva categoría', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Título', ), 'feed' => array( diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index d09a19e5a..ff0d72a11 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Catégorie vide', 'information' => 'Informations', 'new' => 'Nouvelle catégorie', + 'position' => 'Position d’affichage', + 'position_help' => 'Pour contrôler l’ordre de tri des catégories', 'title' => 'Titre', ), 'feed' => array( diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index 15965d9e2..2b806f6ff 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Empty category', //TODO - Translation 'information' => 'מידע', 'new' => 'קטגוריה חדשה', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'כותרת', ), 'feed' => array( diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index 22cd36986..400a0d259 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Categoria vuota', 'information' => 'Informazioni', 'new' => 'Nuova categoria', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Titolo', ), 'feed' => array( diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 2586395f2..eba732e22 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => '빈 카테고리', 'information' => '정보', 'new' => '새 카테고리', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => '제목', ), 'feed' => array( diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index 6b498132f..e4a0c7fdf 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Lege categorie', 'information' => 'Informatie', 'new' => 'Nieuwe categorie', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Titel', ), 'feed' => array( diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index 0f465d7ca..ad3a10935 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -16,6 +16,8 @@ return array( 'empty' => 'Categoria voida', 'information' => 'Informacions', 'new' => 'Nòva categoria', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Títol', ), 'feed' => array( diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index c4c28bd6c..08ffc9a40 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Categoria vazia', 'information' => 'Informações', 'new' => 'Nova categoria', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Título', ), 'feed' => array( diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index f4bda385d..47c7846e8 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Empty category', //TODO - Translation 'information' => 'Information', //TODO - Translation 'new' => 'New category', //TODO - Translation + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Title', //TODO - Translation ), 'feed' => array( diff --git a/app/i18n/sk/sub.php b/app/i18n/sk/sub.php index 2167e1817..971cfb683 100644 --- a/app/i18n/sk/sub.php +++ b/app/i18n/sk/sub.php @@ -16,6 +16,8 @@ return array( 'empty' => 'Prázdna kategória', 'information' => 'Informácia', 'new' => 'Nová kategória', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Názov', ), 'feed' => array( diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index f6f40d3f7..45b84fe89 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => 'Boş kategori', 'information' => 'Bilgi', 'new' => 'Yeni kategori', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => 'Başlık', ), 'feed' => array( diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index f6f3a0f7a..bd00bacc6 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -17,6 +17,8 @@ return array( 'empty' => '空分类', 'information' => '信息', 'new' => '新分类', + 'position' => 'Display position', //TODO - Translation + 'position_help' => 'To control category sort order', //TODO - Translation 'title' => '标题', ), 'feed' => array( diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 4d5682001..e0c90282f 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -63,11 +63,12 @@ categories as $cat) { $feeds = $cat->feeds(); + $position = $cat->attributes('position'); if (!empty($feeds)) { $c_active = FreshRSS_Context::isCurrentGet('c_' . $cat->id()); $c_show = $c_active || FreshRSS_Context::$user_conf->display_categories; ?> -
  • +
  • data-unread="nbNotRead() ?>">
    name() ?> diff --git a/app/views/helpers/category/update.phtml b/app/views/helpers/category/update.phtml index 6a4c041ba..9e55e613d 100644 --- a/app/views/helpers/category/update.phtml +++ b/app/views/helpers/category/update.phtml @@ -17,6 +17,13 @@ ?> />
    +
    + +
    + + +
    +
    -- cgit v1.2.3