diff options
| author | 2020-01-06 20:28:04 +0100 | |
|---|---|---|
| committer | 2020-01-06 20:28:04 +0100 | |
| commit | 3c099c78537020eae3b6fe060fbe86088e996c83 (patch) | |
| tree | 647ee7313f609577f98b8477e814f2e7743c06f7 | |
| parent | d455783a63e77c3abce76b85f68c51338c1b81d1 (diff) | |
Add an admin flag on users (#2709)
Now FRSS supports more than one admin. Admins have the same rights as
the default user. Admins can promote or demote other users. The default
user is considered as an admin even if it does not have the admin flag
enabled.
See #2096
36 files changed, 190 insertions, 57 deletions
diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php index 7d3c010c4..b5725e6b5 100644 --- a/app/Controllers/userController.php +++ b/app/Controllers/userController.php @@ -175,12 +175,22 @@ class FreshRSS_user_Controller extends Minz_ActionController { if (Minz_Request::isPost()) { $action = Minz_Request::param('action'); - if ('delete' === $action) { - $this->deleteAction(); - } elseif ('update' === $action) { - $this->updateAction(); - } elseif ('purge' === $action) { - $this->purgeAction(); + switch ($action) { + case 'delete': + $this->deleteAction(); + break; + case 'update': + $this->updateAction(); + break; + case 'purge': + $this->purgeAction(); + break; + case 'promote': + $this->promoteAction(); + break; + case 'demote': + $this->demoteAction(); + break; } } @@ -273,7 +283,6 @@ class FreshRSS_user_Controller extends Minz_ActionController { $new_user_name = Minz_Request::param('new_user_name'); $email = Minz_Request::param('new_user_email', ''); $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); @@ -299,7 +308,10 @@ class FreshRSS_user_Controller extends Minz_ActionController { ); } - $ok = self::createUser($new_user_name, $email, $passwordPlain, array('language' => $new_user_language)); + $ok = self::createUser($new_user_name, $email, $passwordPlain, array( + 'language' => Minz_Request::param('new_user_language', FreshRSS_Context::$user_conf->language), + 'is_admin' => Minz_Request::paramBoolean('new_user_is_admin'), + )); Minz_Request::_param('new_user_passwordPlain'); //Discard plain-text password ASAP $_POST['new_user_passwordPlain'] = ''; invalidateHttpCache(); @@ -516,6 +528,44 @@ class FreshRSS_user_Controller extends Minz_ActionController { Minz_Request::forward($redirect_url, true); } + public function promoteAction() { + $this->switchAdminAction(true); + } + + public function demoteAction() { + $this->switchAdminAction(false); + } + + private function switchAdminAction($isAdmin) { + if (!FreshRSS_Auth::hasAccess('admin')) { + Minz_Error::error(403); + } + + if (!Minz_Request::isPost()) { + Minz_Error::error(403); + } + + $username = Minz_Request::param('username'); + if (!FreshRSS_UserDAO::exists($username)) { + Minz_Error::error(404); + } + + if (null === $userConfig = get_user_configuration($username)) { + Minz_Error::error(500); + } + + $userConfig->_param('is_admin', $isAdmin); + + $ok = $userConfig->save(); + + if ($ok) { + Minz_Request::good(_t('feedback.user.updated', $username), array('c' => 'user', 'a' => 'manage')); + } else { + Minz_Request::bad(_t('feedback.user.updated.error', $username), + array('c' => 'user', 'a' => 'manage')); + } + } + public function detailsAction() { if (!FreshRSS_Auth::hasAccess('admin')) { Minz_Error::error(403); @@ -526,6 +576,7 @@ class FreshRSS_user_Controller extends Minz_ActionController { Minz_Error::error(404); } + $this->view->isDefaultUser = $username === FreshRSS_Context::$system_conf->default_user; $this->view->username = $username; $this->view->details = $this->retrieveUserDetails($username); } @@ -543,6 +594,7 @@ class FreshRSS_user_Controller extends Minz_ActionController { 'database_size' => $databaseDAO->size(), 'language' => $userConfiguration->language, 'mail_login' => $userConfiguration->mail_login, + 'is_admin' => $userConfiguration->is_admin, ); } } diff --git a/app/Models/Auth.php b/app/Models/Auth.php index b7fb0e6d6..3eb57a877 100644 --- a/app/Models/Auth.php +++ b/app/Models/Auth.php @@ -115,14 +115,15 @@ class FreshRSS_Auth { * @return boolean true if user has corresponding access, false else. */ public static function hasAccess($scope = 'general') { - $conf = Minz_Configuration::get('system'); - $default_user = $conf->default_user; + $systemConfiguration = Minz_Configuration::get('system'); + $userConfiguration = Minz_Configuration::get('user'); + $default_user = $systemConfiguration->default_user; $ok = self::$login_ok; switch ($scope) { case 'general': break; case 'admin': - $ok &= Minz_Session::param('currentUser') === $default_user; + $ok &= $default_user === Minz_Session::param('currentUser') || $userConfiguration->is_admin; break; default: $ok = false; diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php index 18f7520a7..ebf8b1a90 100644 --- a/app/i18n/cz/admin.php +++ b/app/i18n/cz/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Aktualizace systému', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s článků (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Jazyk', 'list' => 'User list', // TODO - Translation 'number' => 'Zatím je vytvořen %d účet', diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php index c67583f5c..d21958b9c 100644 --- a/app/i18n/cz/gen.php +++ b/app/i18n/cz/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Zpět na seznam RSS kanálů', 'cancel' => 'Zrušit', 'create' => 'Vytvořit', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Zakázat', 'empty' => 'Vyprázdnit', 'enable' => 'Povolit', @@ -16,6 +17,7 @@ return array( 'manage' => 'Spravovat', 'mark_favorite' => 'Označit jako oblíbené', 'mark_read' => 'Označit jako přečtené', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Odstranit', 'see_website' => 'Navštívit WWW stránku', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\D\\u\\b\\e\\n', 'apr' => 'dub', + 'Apr' => '\\D\\u\\b\\e\\n', 'april' => 'Dub', 'Aug' => '\\S\\r\\p\\e\\n', 'aug' => 'srp', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Minulý měsíc', 'last_week' => 'Minulý týden', 'last_year' => 'Minulý rok', - 'mar' => 'bře', 'Mar' => '\\B\\ř\\e\\z\\e\\n', + 'mar' => 'bře', 'march' => 'Bře', - 'May' => '\\K\\v\\ě\\t\\e\\n', 'may' => 'Květen', + 'May' => '\\K\\v\\ě\\t\\e\\n', 'may_' => 'Kvě', 'mon' => 'Po', 'month' => 'měsíce', diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php index 443a9b380..058661602 100644 --- a/app/i18n/de/admin.php +++ b/app/i18n/de/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'System aktualisieren', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s Artikel (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Lösche Benutzer', 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Sprache', 'list' => 'User list', // TODO - Translation 'number' => 'Es wurde bis jetzt %d Account erstellt', diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php index a0e366ab7..52b2b85a7 100644 --- a/app/i18n/de/gen.php +++ b/app/i18n/de/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen', 'cancel' => 'Abbrechen', 'create' => 'Erstellen', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Deaktivieren', 'empty' => 'Leeren', 'enable' => 'Aktivieren', @@ -16,6 +17,7 @@ return array( 'manage' => 'Verwalten', 'mark_favorite' => 'Als Favorit markieren', 'mark_read' => 'Als gelesen markieren', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Entfernen', 'see_website' => 'Webseite ansehen', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'apr' => 'Apr', + 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'april' => 'April', // TODO - Translation 'Aug' => '\\A\\u\\g\\u\\s\\t', // TODO - Translation 'aug' => 'Aug', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Letzter Monat', 'last_week' => 'Letzte Woche', 'last_year' => 'Letztes Jahr', - 'mar' => 'Mär', 'Mar' => '\\M\\ä\\r\\z', + 'mar' => 'Mär', 'march' => 'März', - 'May' => '\\M\\a\\i', 'may' => 'Mai', + 'May' => '\\M\\a\\i', 'may_' => 'Mai', 'mon' => 'Mo', 'month' => 'Monat(en)', diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php index 497a7051c..02a8a8b58 100644 --- a/app/i18n/en/admin.php +++ b/app/i18n/en/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Update system', ), 'user' => array( + 'admin' => 'Administrator', 'articles_and_size' => '%s articles (%s)', 'article_count' => 'Articles', 'back_to_manage' => '← Return to user list', @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', 'email' => 'Email address', 'feed_count' => 'Feeds', + 'is_admin' => 'Is admin', 'language' => 'Language', 'list' => 'User list', 'number' => 'There is %d account created', diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php index ea595b5ed..1a470668f 100644 --- a/app/i18n/en/gen.php +++ b/app/i18n/en/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Go back to your RSS feeds', 'cancel' => 'Cancel', 'create' => 'Create', + 'demote' => 'Demote', 'disable' => 'Disable', 'empty' => 'Empty', 'enable' => 'Enable', @@ -16,6 +17,7 @@ return array( 'manage' => 'Manage', 'mark_favorite' => 'Mark as favourite', 'mark_read' => 'Mark as read', + 'promote' => 'Promote', 'purge' => 'Purge', 'remove' => 'Remove', 'see_website' => 'See website', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', 'apr' => 'Apr.', + 'Apr' => '\\A\\p\\r\\i\\l', 'april' => 'April', 'Aug' => '\\A\\u\\g\\u\\s\\t', 'aug' => 'Aug.', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Last month', 'last_week' => 'Last week', 'last_year' => 'Last year', - 'mar' => 'Mar.', 'Mar' => '\\M\\a\\r\\c\\h', + 'mar' => 'Mar.', 'march' => 'March', - 'May' => '\\M\\a\\y', 'may' => 'May', + 'May' => '\\M\\a\\y', 'may_' => 'May', 'mon' => 'Mon', 'month' => 'months', diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php index a8dcac86e..d036f2362 100755 --- a/app/i18n/es/admin.php +++ b/app/i18n/es/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Actualizar sistema', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s articles (%s)', // TODO - Translation 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Idioma', 'list' => 'User list', // TODO - Translation 'number' => 'Hay %d cuenta creada', diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php index 45ba47ec1..13c8c3a86 100755 --- a/app/i18n/es/gen.php +++ b/app/i18n/es/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← regresar a tus fuentes RSS', 'cancel' => 'Cancelar', 'create' => 'Crear', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Desactivar', 'empty' => 'Vaciar', 'enable' => 'Activar', @@ -16,6 +17,7 @@ return array( 'manage' => 'Administrar', 'mark_favorite' => 'Marcar como favorita', 'mark_read' => 'Marcar como leído', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Borrar', 'see_website' => 'Ver web', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\b\\r\\i\\l', 'apr' => 'abr', + 'Apr' => '\\A\\b\\r\\i\\l', 'april' => 'abril', 'Aug' => '\\A\\g\\o\\s\\t\\o', 'aug' => 'ago', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Mes pasado', 'last_week' => 'Semana pasada', 'last_year' => 'Año pasado', - 'mar' => 'mar', 'Mar' => '\\M\\a\\r\\z\\o', + 'mar' => 'mar', 'march' => 'marzo', - 'May' => '\\M\\a\\y\\o', 'may' => 'mayo', + 'May' => '\\M\\a\\y\\o', 'may_' => 'may', 'mon' => 'Lun', 'month' => 'meses', diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php index 2cf6adc89..25fa9fabb 100644 --- a/app/i18n/fr/admin.php +++ b/app/i18n/fr/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Système de mise à jour', ), 'user' => array( + 'admin' => 'Administrateur', 'articles_and_size' => '%s articles (%s)', 'article_count' => 'Articles', 'back_to_manage' => '← Revenir à la liste des utilisateurs', @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Supprimer un utilisateur', 'email' => 'Adresse email', 'feed_count' => 'Flux', + 'is_admin' => 'Admin ?', 'language' => 'Langue', 'list' => 'Liste des utilisateurs', 'number' => '%d compte a déjà été créé', diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php index 1f25220da..5ed6cef02 100644 --- a/app/i18n/fr/gen.php +++ b/app/i18n/fr/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Retour à vos flux RSS', 'cancel' => 'Annuler', 'create' => 'Créer', + 'demote' => 'Rétrograder', 'disable' => 'Désactiver', 'empty' => 'Vider', 'enable' => 'Activer', @@ -16,6 +17,7 @@ return array( 'manage' => 'Gérer', 'mark_favorite' => 'Mettre en favori', 'mark_read' => 'Marquer comme lu', + 'promote' => 'Promouvoir', 'purge' => 'Purger', 'remove' => 'Supprimer', 'see_website' => 'Voir le site', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\a\\v\\r\\i\\l', 'apr' => 'avr.', + 'Apr' => '\\a\\v\\r\\i\\l', 'april' => 'avril', 'Aug' => '\\a\\o\\û\\t', 'aug' => 'août', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Depuis le mois dernier', 'last_week' => 'Depuis la semaine dernière', 'last_year' => 'Depuis l’année dernière', - 'mar' => 'mars', 'Mar' => '\\m\\a\\r\\s', + 'mar' => 'mars', 'march' => 'mars', - 'May' => '\\m\\a\\i', 'may' => 'mai', + 'May' => '\\m\\a\\i', 'may_' => 'mai', 'mon' => 'lun.', 'month' => 'mois', diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php index 55ee9fc5d..bc679bf60 100644 --- a/app/i18n/he/admin.php +++ b/app/i18n/he/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'מערכת העדכון', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s articles (%s)', // TODO - Translation 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'שפה', 'list' => 'User list', // TODO - Translation 'number' => 'There is %d account created', // TODO - Translation diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php index 5622690e4..258799cd3 100644 --- a/app/i18n/he/gen.php +++ b/app/i18n/he/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך', 'cancel' => 'ביטול', 'create' => 'יצירה', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Disable', // TODO - Translation 'empty' => 'Empty', // TODO - Translation 'enable' => 'Enable', // TODO - Translation @@ -16,6 +17,7 @@ return array( 'manage' => 'ניהול', 'mark_favorite' => 'סימון כמועדף', 'mark_read' => 'סימון כנקרא', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Remove', // TODO - Translation 'see_website' => 'ראו אתר', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'apr' => 'apr', + 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'april' => 'Apr', 'Aug' => '\\A\\u\\g\\u\\s\\t', // TODO - Translation 'aug' => 'aug', @@ -76,11 +78,11 @@ return array( 'last_month' => 'בחודש שעבר', 'last_week' => 'בשבוע שעבר', 'last_year' => 'בשנה האחרונה', - 'mar' => 'mar', 'Mar' => '\\M\\a\\r\\c\\h', // TODO - Translation + 'mar' => 'mar', 'march' => 'Mar', - 'May' => '\\M\\a\\y', // TODO - Translation 'may' => 'May', // TODO - Translation + 'May' => '\\M\\a\\y', // TODO - Translation 'may_' => 'May', // TODO - Translation 'mon' => 'Mon', // TODO - Translation 'month' => 'חודשים', diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php index 7a0f2e47e..78253d756 100644 --- a/app/i18n/it/admin.php +++ b/app/i18n/it/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Aggiornamento sistema', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s articoli (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Lingua', 'list' => 'User list', // TODO - Translation 'number' => ' %d profilo utente creato', diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php index de670e44d..06b61bf08 100644 --- a/app/i18n/it/gen.php +++ b/app/i18n/it/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Indietro', 'cancel' => 'Annulla', 'create' => 'Crea', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Disabilita', 'empty' => 'Vuoto', 'enable' => 'Abilita', @@ -16,6 +17,7 @@ return array( 'manage' => 'Gestisci', 'mark_favorite' => 'Segna come preferito', 'mark_read' => 'Segna come letto', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Rimuovi', 'see_website' => 'Vai al sito', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l\\e', 'apr' => 'apr.', + 'Apr' => '\\A\\p\\r\\i\\l\\e', 'april' => 'aprile', 'Aug' => '\\A\\g\\o\\s\\t\\o', 'aug' => 'ag.', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Ultimo mese', 'last_week' => 'Ultima settimana', 'last_year' => 'Ultimo anno', - 'mar' => 'mar.', 'Mar' => '\\M\\a\\r\\z\\o', + 'mar' => 'mar.', 'march' => 'marzo', - 'May' => '\\M\\a\\g\\g\\i\\o', 'may' => 'maggio', + 'May' => '\\M\\a\\g\\g\\i\\o', 'may_' => 'May', // TODO - Translation 'mon' => 'Mon', // TODO - Translation 'month' => 'mesi', diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php index 9c41430eb..9980a5335 100644 --- a/app/i18n/kr/admin.php +++ b/app/i18n/kr/admin.php @@ -182,6 +182,7 @@ return array( '_' => '업데이트', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s 개의 글 (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => '사용자 삭제', 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => '언어', 'list' => 'User list', // TODO - Translation 'number' => '%d 개의 계정이 생성되었습니다', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 45a053386..f85af4950 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← RSS 피드로 돌아가기', 'cancel' => '취소', 'create' => '생성', + 'demote' => 'Demote', // TODO - Translation 'disable' => '비활성화', 'empty' => '비우기', 'enable' => '활성화', @@ -16,6 +17,7 @@ return array( 'manage' => '관리', 'mark_favorite' => '즐겨찾기에 등록', 'mark_read' => '읽음으로 표시', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => '삭제', 'see_website' => '웹사이트 열기', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', 'apr' => '4월', + 'Apr' => '\\A\\p\\r\\i\\l', 'april' => '4월', 'Aug' => '\\A\\u\\g\\u\\s\\t', 'aug' => '8월', @@ -76,11 +78,11 @@ return array( 'last_month' => '최근 한 달', 'last_week' => '최근 한 주', 'last_year' => '최근 일 년', - 'mar' => '3월', 'Mar' => '\\M\\a\\r\\c\\h', + 'mar' => '3월', 'march' => '3월', - 'May' => '\\M\\a\\y', 'may' => '5월', + 'May' => '\\M\\a\\y', 'may_' => '5월', 'mon' => '월', 'month' => '개월', diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php index b6ffee16a..34524e566 100644 --- a/app/i18n/nl/admin.php +++ b/app/i18n/nl/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Versie controle', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s artikelen (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Verwijder gebruiker', 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Taal', 'list' => 'User list', // TODO - Translation 'number' => 'Er is %d accounts gemaakt', diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php index 55937b378..8fcd385a3 100644 --- a/app/i18n/nl/gen.php +++ b/app/i18n/nl/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Ga terug naar je RSS feeds', 'cancel' => 'Annuleren', 'create' => 'Opslaan', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Uitzetten', 'empty' => 'Leeg', 'enable' => 'Aanzetten', @@ -16,6 +17,7 @@ return array( 'manage' => 'Beheren', 'mark_favorite' => 'Markeer als favoriet', 'mark_read' => 'Markeer als gelezen', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Verwijder', 'see_website' => 'Bekijk website', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', 'apr' => 'apr', + 'Apr' => '\\A\\p\\r\\i\\l', 'april' => 'Apr', 'Aug' => '\\A\\u\\g\\u\\s\\t\\u\\s', 'aug' => 'aug', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Vorige maand', 'last_week' => 'Vorige week', 'last_year' => 'Vorig jaar', - 'mar' => 'mrt', 'Mar' => '\\M\\a\\a\\r\\t', + 'mar' => 'mrt', 'march' => 'Mrt', - 'May' => '\\M\\e\\i', 'may' => 'Mei', + 'May' => '\\M\\e\\i', 'may_' => 'Mei', 'mon' => 'Ma', 'month' => 'maanden', diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php index f27014fca..d04a94e59 100644 --- a/app/i18n/oc/admin.php +++ b/app/i18n/oc/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Sistèma de mesa a jorn', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s articles (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Suprimir un utilizaire', 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Lenga', 'list' => 'User list', // TODO - Translation 'number' => '%d compte ja creat', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 7bf851e59..bc8cc54ca 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS', 'cancel' => 'Anullar', 'create' => 'Crear', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Desactivar', 'empty' => 'Voidar', 'enable' => 'Activar', @@ -16,6 +17,7 @@ return array( 'manage' => 'Gerir', 'mark_favorite' => 'Ajustar als favorits', 'mark_read' => 'Marcar coma legit', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Levar', 'see_website' => 'Veire lo site', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\a\\b\\r\\i\\a\\l', 'apr' => 'abr.', + 'Apr' => '\\a\\b\\r\\i\\a\\l', 'april' => 'abrial', 'Aug' => '\\a\\g\\o\\s\\t', 'aug' => 'agost', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Dempuèi lo mes passat', 'last_week' => 'Dempuèi la setmana passada', 'last_year' => 'Dempuèi l’annada passada', - 'mar' => 'març', 'Mar' => '\\m\\a\\r\\ç', + 'mar' => 'març', 'march' => 'març', - 'May' => '\\m\\a\\i', 'may' => 'mai', + 'May' => '\\m\\a\\i', 'may_' => 'mai', 'mon' => 'dl', 'month' => 'meses', diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php index 83639c01b..53744ef73 100644 --- a/app/i18n/pt-br/admin.php +++ b/app/i18n/pt-br/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Atualização do sistema', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s artigos (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Idioma', 'list' => 'User list', // TODO - Translation 'number' => 'Há %d conta criada', diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php index a65c87b6c..d064fdd6c 100644 --- a/app/i18n/pt-br/gen.php +++ b/app/i18n/pt-br/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Volte para o seu feeds RSS', 'cancel' => 'Cancelar', 'create' => 'Criar', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Desabilitar', 'empty' => 'Vazio', 'enable' => 'Habilitar', @@ -16,6 +17,7 @@ return array( 'manage' => 'Gerenciar', 'mark_favorite' => 'Marcar como favorito', 'mark_read' => 'Marcar como lido', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Remover', 'see_website' => 'Ver o site', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\b\\r\\i\\l', 'apr' => 'abr', + 'Apr' => '\\A\\b\\r\\i\\l', 'april' => 'Abr', 'Aug' => '\\A\\g\\o\\s\\t\\o', 'aug' => 'ago', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Últimos mês', 'last_week' => 'Última semana', 'last_year' => 'Último ano', - 'mar' => 'mar', 'Mar' => '\\M\\a\\r\\ç\\o', + 'mar' => 'mar', 'march' => 'Mar', - 'May' => '\\M\\a\\i\\o', 'may' => 'Mai', + 'May' => '\\M\\a\\i\\o', 'may_' => 'Mai', 'mon' => 'Seg', 'month' => 'meses', diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php index 3fcf151dd..ffb0b662c 100644 --- a/app/i18n/ru/admin.php +++ b/app/i18n/ru/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Обновление системы', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s статей (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Язык', 'list' => 'User list', // TODO - Translation 'number' => 'На данный момент создан %d аккаунт', diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php index dc3baf7c5..606983db2 100644 --- a/app/i18n/ru/gen.php +++ b/app/i18n/ru/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Go back to your RSS feeds', // TODO - Translation 'cancel' => 'Cancel', // TODO - Translation 'create' => 'Create', // TODO - Translation + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Disable', // TODO - Translation 'empty' => 'Empty', // TODO - Translation 'enable' => 'Enable', // TODO - Translation @@ -16,6 +17,7 @@ return array( 'manage' => 'Manage', // TODO - Translation 'mark_favorite' => 'Mark as favourite', // TODO - Translation 'mark_read' => 'Mark as read', // TODO - Translation + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Remove', // TODO - Translation 'see_website' => 'See website', // TODO - Translation @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'apr' => 'apr', + 'Apr' => '\\A\\p\\r\\i\\l', // TODO - Translation 'april' => 'Apr', 'Aug' => '\\A\\u\\g\\u\\s\\t', // TODO - Translation 'aug' => 'aug', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Last month', // TODO - Translation 'last_week' => 'Last week', // TODO - Translation 'last_year' => 'Last year', // TODO - Translation - 'mar' => 'mar', 'Mar' => '\\M\\a\\r\\c\\h', // TODO - Translation + 'mar' => 'mar', 'march' => 'Mar', - 'May' => '\\M\\a\\y', // TODO - Translation 'may' => 'May', // TODO - Translation + 'May' => '\\M\\a\\y', // TODO - Translation 'may_' => 'May', // TODO - Translation 'mon' => 'Mon', // TODO - Translation 'month' => 'months', // TODO - Translation diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php index 1e06c40b9..eeb2fd3d4 100644 --- a/app/i18n/sk/admin.php +++ b/app/i18n/sk/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Aktualizácia systému', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s článkov (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Zmazať používateľa', 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Jazyk', 'list' => 'User list', // TODO - Translation 'number' => 'Je vytvorený používateľ: %d', diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php index d6548e72a..4791901af 100644 --- a/app/i18n/sk/gen.php +++ b/app/i18n/sk/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← Späť na vaše RSS kanály', 'cancel' => 'Zrušiť', 'create' => 'Vytvoriť', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Zakázať', 'empty' => 'Vyprázdniť', 'enable' => 'Povoliť', @@ -16,6 +17,7 @@ return array( 'manage' => 'Spravovať', 'mark_favorite' => 'Označiť ako obľúbené', 'mark_read' => 'Označiť ako prečítané', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Odstrániť', 'see_website' => 'Zobraziť webovú stránku', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\A\\p\\r\\í\\l', 'apr' => 'Apr.', + 'Apr' => '\\A\\p\\r\\í\\l', 'april' => 'Apríl', 'Aug' => '\\A\\u\\g\\u\\s\\t', 'aug' => 'Aug.', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Posledný mesiac', 'last_week' => 'Posledný týždeň', 'last_year' => 'Posledný rok', - 'mar' => 'Mar.', 'Mar' => '\\M\\a\\r\\e\\c', + 'mar' => 'Mar.', 'march' => 'Marec', - 'May' => '\\M\\á\\j', 'may' => 'Máj', + 'May' => '\\M\\á\\j', 'may_' => 'Máj', 'mon' => 'Po', 'month' => 'mesiace', diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php index bb097d5e8..de30a0d50 100644 --- a/app/i18n/tr/admin.php +++ b/app/i18n/tr/admin.php @@ -182,6 +182,7 @@ return array( '_' => 'Sistem güncelleme', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s makale (%s)', 'article_count' => 'Articles', // TODO - Translation 'back_to_manage' => '← Return to user list', // TODO - Translation @@ -190,6 +191,7 @@ return array( 'delete_users' => 'Delete user', // TODO - Translation 'email' => 'Email address', // TODO - Translation 'feed_count' => 'Feeds', // TODO - Translation + 'is_admin' => 'Is admin', // TODO - Translation 'language' => 'Dil', 'list' => 'User list', // TODO - Translation 'number' => 'Oluşturulmuş %d hesap var', diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php index 681fd5e74..e80eb8e59 100644 --- a/app/i18n/tr/gen.php +++ b/app/i18n/tr/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin', 'cancel' => 'İptal', 'create' => 'Oluştur', + 'demote' => 'Demote', // TODO - Translation 'disable' => 'Pasif', 'empty' => 'Boş', 'enable' => 'Aktif', @@ -16,6 +17,7 @@ return array( 'manage' => 'Yönet', 'mark_favorite' => 'Favoriye ekle', 'mark_read' => 'Okundu olarak işaretle', + 'promote' => 'Promote', // TODO - Translation 'purge' => 'Purge', // TODO - Translation 'remove' => 'Sil', 'see_website' => 'Siteyi gör', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\N\\i\\s\\a\\n', 'apr' => 'nis', + 'Apr' => '\\N\\i\\s\\a\\n', 'april' => 'Nis', 'Aug' => '\\A\\ğ\\u\\s\\t\\o\\s', 'aug' => 'ağu', @@ -76,11 +78,11 @@ return array( 'last_month' => 'Geçen ay', 'last_week' => 'Geçen hafta', 'last_year' => 'Geçen yıl', - 'mar' => 'mar', 'Mar' => '\\M\\a\\r\\t', + 'mar' => 'mar', 'march' => 'Mar', - 'May' => '\\M\\a\\y\\ı\\s', 'may' => 'Mayıs', + 'May' => '\\M\\a\\y\\ı\\s', 'may_' => 'May', // TODO - Translation 'mon' => 'Pzt', 'month' => 'ay', diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php index f0b33e889..6ba32efc5 100644 --- a/app/i18n/zh-cn/admin.php +++ b/app/i18n/zh-cn/admin.php @@ -182,6 +182,7 @@ return array( '_' => '更新系统', ), 'user' => array( + 'admin' => 'Administrator', // TODO - Translation 'articles_and_size' => '%s 篇文章(%s)', 'article_count' => '文章数', 'back_to_manage' => '← 返回用户列表', @@ -190,6 +191,7 @@ return array( 'delete_users' => '删除用户', 'email' => '邮箱地址', 'feed_count' => '订阅源数', + 'is_admin' => 'Is admin', // TODO - Translation 'language' => '语言', 'list' => '用户列表', 'number' => '已有 %d 个用户', diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 3043e0d0c..b3bb6273e 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -7,6 +7,7 @@ return array( 'back_to_rss_feeds' => '← 返回订阅源', 'cancel' => '取消', 'create' => '创建', + 'demote' => 'Demote', // TODO - Translation 'disable' => '禁用', 'empty' => '清空', 'enable' => '启用', @@ -16,6 +17,7 @@ return array( 'manage' => '管理', 'mark_favorite' => '标记收藏', 'mark_read' => '标记已读', + 'promote' => 'Promote', // TODO - Translation 'purge' => '清理', 'remove' => '删除', 'see_website' => '网站中查看', @@ -46,8 +48,8 @@ return array( ), ), 'date' => array( - 'Apr' => '\\四\\月', 'apr' => '四月', + 'Apr' => '\\四\\月', 'april' => '四月', 'Aug' => '\\八\\月', 'aug' => '八月', @@ -76,11 +78,11 @@ return array( 'last_month' => '上月', 'last_week' => '上周', 'last_year' => '去年', - 'mar' => '三月', 'Mar' => '\\三\\月', + 'mar' => '三月', 'march' => '三月', - 'May' => '\\五\\月', 'may' => '五月', + 'May' => '\\五\\月', 'may_' => '五月', 'mon' => '周一', 'month' => '个月', diff --git a/app/install.php b/app/install.php index 3158ffc6f..e5847cc5a 100644 --- a/app/install.php +++ b/app/install.php @@ -223,6 +223,7 @@ function saveStep3() { $password_plain, [ 'language' => $_SESSION['language'], + 'is_admin' => true, ] ); } catch (Exception $e) { diff --git a/app/views/user/details.phtml b/app/views/user/details.phtml index 7a4687184..e23e645ae 100644 --- a/app/views/user/details.phtml +++ b/app/views/user/details.phtml @@ -1,9 +1,11 @@ <?php $this->partial('aside_configure'); ?> +<?php $isAdmin = $this->details['is_admin']; ?> + <div class="post"> <a href="<?= _url('user', 'manage'); ?>"><?= _t('admin.user.back_to_manage'); ?></a> - <legend><?= $this->username; ?></legend> + <legend><?= $this->username ?><?php if ($isAdmin) echo ' ― ', _t('admin.user.admin'); ?></legend> <form method="post" action="<?= _url('user', 'manage', 'username', $this->username); ?>"> <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" /> @@ -59,6 +61,11 @@ <button type="submit" class="btn btn-important" name="action" value="update"><?= _t('gen.action.update') ?></button> <button type="submit" class="btn btn-attention confirm" name="action" value="purge"><?= _t('gen.action.purge') ?></button> <button type="submit" class="btn btn-attention confirm" name="action" value="delete"><?= _t('gen.action.remove') ?></button> + <?php if ($isAdmin && !$this->isDefaultUser): ?> + <button type="submit" class="btn btn-attention confirm" name="action" value="demote"><?= _t('gen.action.demote') ?></button> + <?php elseif (!$isAdmin): ?> + <button type="submit" class="btn btn-attention confirm" name="action" value="promote"><?= _t('gen.action.promote') ?></button> + <?php endif; ?> <div> </div> </form> diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml index 951544248..6ab31e6c6 100644 --- a/app/views/user/manage.phtml +++ b/app/views/user/manage.phtml @@ -26,6 +26,15 @@ </div> </div> + <div class="form-group"> + <div class="group-controls"> + <label for="new_user_is_admin" class="checkbox"> + <input type="checkbox" name="new_user_is_admin" id="new_user_is_admin"> + <?= _t('admin.user.is_admin') ?> + </label> + </div> + </div> + <?php if ($this->show_email_field) { ?> <div class="form-group"> <label class="group-name" for="new_user_email"> @@ -62,6 +71,7 @@ <thead> <tr> <th><?= _t('admin.user.username') ?></th> + <th><?= _t('admin.user.is_admin') ?></th> <th><?= _t('admin.user.email') ?></th> <th><?= _t('admin.user.language') ?></th> <th><?= _t('admin.user.feed_count') ?></th> @@ -74,6 +84,7 @@ <?php foreach ($this->users as $username => $values) : ?> <tr> <td><?= $username ?></td> + <td><?= $values['is_admin'] ? '✔' : ' ' ?></td> <td><?= $values['mail_login'] ?></td> <td><?= _t("gen.lang.{$values['language']}") ?></td> <td><?= format_number($values['feed_count']) ?></td> diff --git a/config-user.default.php b/config-user.default.php index 5b49d689a..27f330c82 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -4,6 +4,7 @@ # `./data/config-user.custom.php` file instead, containing the keys you want to # override. return array ( + 'is_admin' => false, 'language' => 'en', 'archiving' => [ 'keep_period' => 'P3M', |
