Bladeren bron

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
Alexis Degrugillier 6 jaren geleden
bovenliggende
commit
3c099c7853

+ 60 - 8
app/Controllers/userController.php

@@ -175,12 +175,22 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 
 
 		if (Minz_Request::isPost()) {
 		if (Minz_Request::isPost()) {
 			$action = Minz_Request::param('action');
 			$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');
 			$new_user_name = Minz_Request::param('new_user_name');
 			$email = Minz_Request::param('new_user_email', '');
 			$email = Minz_Request::param('new_user_email', '');
 			$passwordPlain = Minz_Request::param('new_user_passwordPlain', '', true);
 			$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'));
 			$tos_enabled = file_exists(join_path(DATA_PATH, 'tos.html'));
 			$accept_tos = Minz_Request::param('accept_tos', false);
 			$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
 			Minz_Request::_param('new_user_passwordPlain');	//Discard plain-text password ASAP
 			$_POST['new_user_passwordPlain'] = '';
 			$_POST['new_user_passwordPlain'] = '';
 			invalidateHttpCache();
 			invalidateHttpCache();
@@ -516,6 +528,44 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 		Minz_Request::forward($redirect_url, true);
 		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() {
 	public function detailsAction() {
 		if (!FreshRSS_Auth::hasAccess('admin')) {
 		if (!FreshRSS_Auth::hasAccess('admin')) {
 			Minz_Error::error(403);
 			Minz_Error::error(403);
@@ -526,6 +576,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 			Minz_Error::error(404);
 			Minz_Error::error(404);
 		}
 		}
 
 
+		$this->view->isDefaultUser = $username === FreshRSS_Context::$system_conf->default_user;
 		$this->view->username = $username;
 		$this->view->username = $username;
 		$this->view->details = $this->retrieveUserDetails($username);
 		$this->view->details = $this->retrieveUserDetails($username);
 	}
 	}
@@ -543,6 +594,7 @@ class FreshRSS_user_Controller extends Minz_ActionController {
 			'database_size' => $databaseDAO->size(),
 			'database_size' => $databaseDAO->size(),
 			'language' => $userConfiguration->language,
 			'language' => $userConfiguration->language,
 			'mail_login' => $userConfiguration->mail_login,
 			'mail_login' => $userConfiguration->mail_login,
+			'is_admin' => $userConfiguration->is_admin,
 		);
 		);
 	}
 	}
 }
 }

+ 4 - 3
app/Models/Auth.php

@@ -115,14 +115,15 @@ class FreshRSS_Auth {
 	 * @return boolean true if user has corresponding access, false else.
 	 * @return boolean true if user has corresponding access, false else.
 	 */
 	 */
 	public static function hasAccess($scope = 'general') {
 	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;
 		$ok = self::$login_ok;
 		switch ($scope) {
 		switch ($scope) {
 		case 'general':
 		case 'general':
 			break;
 			break;
 		case 'admin':
 		case 'admin':
-			$ok &= Minz_Session::param('currentUser') === $default_user;
+			$ok &= $default_user === Minz_Session::param('currentUser') || $userConfiguration->is_admin;
 			break;
 			break;
 		default:
 		default:
 			$ok = false;
 			$ok = false;

+ 2 - 0
app/i18n/cz/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Aktualizace systému',
 		'_' => 'Aktualizace systému',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s článků (%s)',
 		'articles_and_size' => '%s článků (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Jazyk',
 		'language' => 'Jazyk',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Zatím je vytvořen %d účet',
 		'number' => 'Zatím je vytvořen %d účet',

+ 5 - 3
app/i18n/cz/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Zpět na seznam RSS kanálů',
 		'back_to_rss_feeds' => '← Zpět na seznam RSS kanálů',
 		'cancel' => 'Zrušit',
 		'cancel' => 'Zrušit',
 		'create' => 'Vytvořit',
 		'create' => 'Vytvořit',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Zakázat',
 		'disable' => 'Zakázat',
 		'empty' => 'Vyprázdnit',
 		'empty' => 'Vyprázdnit',
 		'enable' => 'Povolit',
 		'enable' => 'Povolit',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Spravovat',
 		'manage' => 'Spravovat',
 		'mark_favorite' => 'Označit jako oblíbené',
 		'mark_favorite' => 'Označit jako oblíbené',
 		'mark_read' => 'Označit jako přečtené',
 		'mark_read' => 'Označit jako přečtené',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Odstranit',
 		'remove' => 'Odstranit',
 		'see_website' => 'Navštívit WWW stránku',
 		'see_website' => 'Navštívit WWW stránku',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\D\\u\\b\\e\\n',
 		'apr' => 'dub',
 		'apr' => 'dub',
+		'Apr' => '\\D\\u\\b\\e\\n',
 		'april' => 'Dub',
 		'april' => 'Dub',
 		'Aug' => '\\S\\r\\p\\e\\n',
 		'Aug' => '\\S\\r\\p\\e\\n',
 		'aug' => 'srp',
 		'aug' => 'srp',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Minulý měsíc',
 		'last_month' => 'Minulý měsíc',
 		'last_week' => 'Minulý týden',
 		'last_week' => 'Minulý týden',
 		'last_year' => 'Minulý rok',
 		'last_year' => 'Minulý rok',
-		'mar' => 'bře',
 		'Mar' => '\\B\\ř\\e\\z\\e\\n',
 		'Mar' => '\\B\\ř\\e\\z\\e\\n',
+		'mar' => 'bře',
 		'march' => 'Bře',
 		'march' => 'Bře',
-		'May' => '\\K\\v\\ě\\t\\e\\n',
 		'may' => 'Květen',
 		'may' => 'Květen',
+		'May' => '\\K\\v\\ě\\t\\e\\n',
 		'may_' => 'Kvě',
 		'may_' => 'Kvě',
 		'mon' => 'Po',
 		'mon' => 'Po',
 		'month' => 'měsíce',
 		'month' => 'měsíce',

+ 2 - 0
app/i18n/de/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'System aktualisieren',
 		'_' => 'System aktualisieren',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s Artikel (%s)',
 		'articles_and_size' => '%s Artikel (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Lösche Benutzer',
 		'delete_users' => 'Lösche Benutzer',
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Sprache',
 		'language' => 'Sprache',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Es wurde bis jetzt %d Account erstellt',
 		'number' => 'Es wurde bis jetzt %d Account erstellt',

+ 5 - 3
app/i18n/de/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen',
 		'back_to_rss_feeds' => '← Zurück zu Ihren RSS-Feeds gehen',
 		'cancel' => 'Abbrechen',
 		'cancel' => 'Abbrechen',
 		'create' => 'Erstellen',
 		'create' => 'Erstellen',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Deaktivieren',
 		'disable' => 'Deaktivieren',
 		'empty' => 'Leeren',
 		'empty' => 'Leeren',
 		'enable' => 'Aktivieren',
 		'enable' => 'Aktivieren',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Verwalten',
 		'manage' => 'Verwalten',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_favorite' => 'Als Favorit markieren',
 		'mark_read' => 'Als gelesen markieren',
 		'mark_read' => 'Als gelesen markieren',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Entfernen',
 		'remove' => 'Entfernen',
 		'see_website' => 'Webseite ansehen',
 		'see_website' => 'Webseite ansehen',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'apr' => 'Apr',
 		'apr' => 'Apr',
+		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'april' => 'April',	// TODO - Translation
 		'april' => 'April',	// TODO - Translation
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'aug' => 'Aug',
 		'aug' => 'Aug',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Letzter Monat',
 		'last_month' => 'Letzter Monat',
 		'last_week' => 'Letzte Woche',
 		'last_week' => 'Letzte Woche',
 		'last_year' => 'Letztes Jahr',
 		'last_year' => 'Letztes Jahr',
-		'mar' => 'Mär',
 		'Mar' => '\\M\\ä\\r\\z',
 		'Mar' => '\\M\\ä\\r\\z',
+		'mar' => 'Mär',
 		'march' => 'März',
 		'march' => 'März',
-		'May' => '\\M\\a\\i',
 		'may' => 'Mai',
 		'may' => 'Mai',
+		'May' => '\\M\\a\\i',
 		'may_' => 'Mai',
 		'may_' => 'Mai',
 		'mon' => 'Mo',
 		'mon' => 'Mo',
 		'month' => 'Monat(en)',
 		'month' => 'Monat(en)',

+ 2 - 0
app/i18n/en/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Update system',
 		'_' => 'Update system',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
 		'article_count' => 'Articles',
 		'article_count' => 'Articles',
 		'back_to_manage' => '← Return to user list',
 		'back_to_manage' => '← Return to user list',
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',
 		'delete_users' => 'Delete user',
 		'email' => 'Email address',
 		'email' => 'Email address',
 		'feed_count' => 'Feeds',
 		'feed_count' => 'Feeds',
+		'is_admin' => 'Is admin',
 		'language' => 'Language',
 		'language' => 'Language',
 		'list' => 'User list',
 		'list' => 'User list',
 		'number' => 'There is %d account created',
 		'number' => 'There is %d account created',

+ 5 - 3
app/i18n/en/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Go back to your RSS feeds',
 		'back_to_rss_feeds' => '← Go back to your RSS feeds',
 		'cancel' => 'Cancel',
 		'cancel' => 'Cancel',
 		'create' => 'Create',
 		'create' => 'Create',
+		'demote' => 'Demote',
 		'disable' => 'Disable',
 		'disable' => 'Disable',
 		'empty' => 'Empty',
 		'empty' => 'Empty',
 		'enable' => 'Enable',
 		'enable' => 'Enable',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Manage',
 		'manage' => 'Manage',
 		'mark_favorite' => 'Mark as favourite',
 		'mark_favorite' => 'Mark as favourite',
 		'mark_read' => 'Mark as read',
 		'mark_read' => 'Mark as read',
+		'promote' => 'Promote',
 		'purge' => 'Purge',
 		'purge' => 'Purge',
 		'remove' => 'Remove',
 		'remove' => 'Remove',
 		'see_website' => 'See website',
 		'see_website' => 'See website',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',
 		'apr' => 'Apr.',
 		'apr' => 'Apr.',
+		'Apr' => '\\A\\p\\r\\i\\l',
 		'april' => 'April',
 		'april' => 'April',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'aug' => 'Aug.',
 		'aug' => 'Aug.',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Last month',
 		'last_month' => 'Last month',
 		'last_week' => 'Last week',
 		'last_week' => 'Last week',
 		'last_year' => 'Last year',
 		'last_year' => 'Last year',
-		'mar' => 'Mar.',
 		'Mar' => '\\M\\a\\r\\c\\h',
 		'Mar' => '\\M\\a\\r\\c\\h',
+		'mar' => 'Mar.',
 		'march' => 'March',
 		'march' => 'March',
-		'May' => '\\M\\a\\y',
 		'may' => 'May',
 		'may' => 'May',
+		'May' => '\\M\\a\\y',
 		'may_' => 'May',
 		'may_' => 'May',
 		'mon' => 'Mon',
 		'mon' => 'Mon',
 		'month' => 'months',
 		'month' => 'months',

+ 2 - 0
app/i18n/es/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Actualizar sistema',
 		'_' => 'Actualizar sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
 		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Idioma',
 		'language' => 'Idioma',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Hay %d cuenta creada',
 		'number' => 'Hay %d cuenta creada',

+ 5 - 3
app/i18n/es/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← regresar a tus fuentes RSS',
 		'back_to_rss_feeds' => '← regresar a tus fuentes RSS',
 		'cancel' => 'Cancelar',
 		'cancel' => 'Cancelar',
 		'create' => 'Crear',
 		'create' => 'Crear',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Desactivar',
 		'disable' => 'Desactivar',
 		'empty' => 'Vaciar',
 		'empty' => 'Vaciar',
 		'enable' => 'Activar',
 		'enable' => 'Activar',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Administrar',
 		'manage' => 'Administrar',
 		'mark_favorite' => 'Marcar como favorita',
 		'mark_favorite' => 'Marcar como favorita',
 		'mark_read' => 'Marcar como leído',
 		'mark_read' => 'Marcar como leído',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Borrar',
 		'remove' => 'Borrar',
 		'see_website' => 'Ver web',
 		'see_website' => 'Ver web',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\b\\r\\i\\l',
 		'apr' => 'abr',
 		'apr' => 'abr',
+		'Apr' => '\\A\\b\\r\\i\\l',
 		'april' => 'abril',
 		'april' => 'abril',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'aug' => 'ago',
 		'aug' => 'ago',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Mes pasado',
 		'last_month' => 'Mes pasado',
 		'last_week' => 'Semana pasada',
 		'last_week' => 'Semana pasada',
 		'last_year' => 'Año pasado',
 		'last_year' => 'Año pasado',
-		'mar' => 'mar',
 		'Mar' => '\\M\\a\\r\\z\\o',
 		'Mar' => '\\M\\a\\r\\z\\o',
+		'mar' => 'mar',
 		'march' => 'marzo',
 		'march' => 'marzo',
-		'May' => '\\M\\a\\y\\o',
 		'may' => 'mayo',
 		'may' => 'mayo',
+		'May' => '\\M\\a\\y\\o',
 		'may_' => 'may',
 		'may_' => 'may',
 		'mon' => 'Lun',
 		'mon' => 'Lun',
 		'month' => 'meses',
 		'month' => 'meses',

+ 2 - 0
app/i18n/fr/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Système de mise à jour',
 		'_' => 'Système de mise à jour',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrateur',
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
 		'article_count' => 'Articles',
 		'article_count' => 'Articles',
 		'back_to_manage' => '← Revenir à la liste des utilisateurs',
 		'back_to_manage' => '← Revenir à la liste des utilisateurs',
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Supprimer un utilisateur',
 		'delete_users' => 'Supprimer un utilisateur',
 		'email' => 'Adresse email',
 		'email' => 'Adresse email',
 		'feed_count' => 'Flux',
 		'feed_count' => 'Flux',
+		'is_admin' => 'Admin ?',
 		'language' => 'Langue',
 		'language' => 'Langue',
 		'list' => 'Liste des utilisateurs',
 		'list' => 'Liste des utilisateurs',
 		'number' => '%d compte a déjà été créé',
 		'number' => '%d compte a déjà été créé',

+ 5 - 3
app/i18n/fr/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Retour à vos flux RSS',
 		'back_to_rss_feeds' => '← Retour à vos flux RSS',
 		'cancel' => 'Annuler',
 		'cancel' => 'Annuler',
 		'create' => 'Créer',
 		'create' => 'Créer',
+		'demote' => 'Rétrograder',
 		'disable' => 'Désactiver',
 		'disable' => 'Désactiver',
 		'empty' => 'Vider',
 		'empty' => 'Vider',
 		'enable' => 'Activer',
 		'enable' => 'Activer',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Gérer',
 		'manage' => 'Gérer',
 		'mark_favorite' => 'Mettre en favori',
 		'mark_favorite' => 'Mettre en favori',
 		'mark_read' => 'Marquer comme lu',
 		'mark_read' => 'Marquer comme lu',
+		'promote' => 'Promouvoir',
 		'purge' => 'Purger',
 		'purge' => 'Purger',
 		'remove' => 'Supprimer',
 		'remove' => 'Supprimer',
 		'see_website' => 'Voir le site',
 		'see_website' => 'Voir le site',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\a\\v\\r\\i\\l',
 		'apr' => 'avr.',
 		'apr' => 'avr.',
+		'Apr' => '\\a\\v\\r\\i\\l',
 		'april' => 'avril',
 		'april' => 'avril',
 		'Aug' => '\\a\\o\\û\\t',
 		'Aug' => '\\a\\o\\û\\t',
 		'aug' => 'août',
 		'aug' => 'août',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Depuis le mois dernier',
 		'last_month' => 'Depuis le mois dernier',
 		'last_week' => 'Depuis la semaine dernière',
 		'last_week' => 'Depuis la semaine dernière',
 		'last_year' => 'Depuis l’année dernière',
 		'last_year' => 'Depuis l’année dernière',
-		'mar' => 'mars',
 		'Mar' => '\\m\\a\\r\\s',
 		'Mar' => '\\m\\a\\r\\s',
+		'mar' => 'mars',
 		'march' => 'mars',
 		'march' => 'mars',
-		'May' => '\\m\\a\\i',
 		'may' => 'mai',
 		'may' => 'mai',
+		'May' => '\\m\\a\\i',
 		'may_' => 'mai',
 		'may_' => 'mai',
 		'mon' => 'lun.',
 		'mon' => 'lun.',
 		'month' => 'mois',
 		'month' => 'mois',

+ 2 - 0
app/i18n/he/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'מערכת העדכון',
 		'_' => 'מערכת העדכון',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
 		'articles_and_size' => '%s articles (%s)',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'שפה',
 		'language' => 'שפה',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'There is %d account created',	// TODO - Translation
 		'number' => 'There is %d account created',	// TODO - Translation

+ 5 - 3
app/i18n/he/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך',
 		'back_to_rss_feeds' => '← חזרה להזנות הRSS שלך',
 		'cancel' => 'ביטול',
 		'cancel' => 'ביטול',
 		'create' => 'יצירה',
 		'create' => 'יצירה',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Disable',	// TODO - Translation
 		'disable' => 'Disable',	// TODO - Translation
 		'empty' => 'Empty',	// TODO - Translation
 		'empty' => 'Empty',	// TODO - Translation
 		'enable' => 'Enable',	// TODO - Translation
 		'enable' => 'Enable',	// TODO - Translation
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'ניהול',
 		'manage' => 'ניהול',
 		'mark_favorite' => 'סימון כמועדף',
 		'mark_favorite' => 'סימון כמועדף',
 		'mark_read' => 'סימון כנקרא',
 		'mark_read' => 'סימון כנקרא',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Remove',	// TODO - Translation
 		'remove' => 'Remove',	// TODO - Translation
 		'see_website' => 'ראו אתר',
 		'see_website' => 'ראו אתר',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'apr' => 'apr',
 		'apr' => 'apr',
+		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'april' => 'Apr',
 		'april' => 'Apr',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'aug' => 'aug',
 		'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',	// TODO - Translation
 		'Mar' => '\\M\\a\\r\\c\\h',	// TODO - Translation
+		'mar' => 'mar',
 		'march' => 'Mar',
 		'march' => 'Mar',
-		'May' => '\\M\\a\\y',	// TODO - Translation
 		'may' => 'May',	// TODO - Translation
 		'may' => 'May',	// TODO - Translation
+		'May' => '\\M\\a\\y',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'month' => 'חודשים',
 		'month' => 'חודשים',

+ 2 - 0
app/i18n/it/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Aggiornamento sistema',
 		'_' => 'Aggiornamento sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s articoli (%s)',
 		'articles_and_size' => '%s articoli (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Lingua',
 		'language' => 'Lingua',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => ' %d profilo utente creato',
 		'number' => ' %d profilo utente creato',

+ 5 - 3
app/i18n/it/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Indietro',
 		'back_to_rss_feeds' => '← Indietro',
 		'cancel' => 'Annulla',
 		'cancel' => 'Annulla',
 		'create' => 'Crea',
 		'create' => 'Crea',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Disabilita',
 		'disable' => 'Disabilita',
 		'empty' => 'Vuoto',
 		'empty' => 'Vuoto',
 		'enable' => 'Abilita',
 		'enable' => 'Abilita',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Gestisci',
 		'manage' => 'Gestisci',
 		'mark_favorite' => 'Segna come preferito',
 		'mark_favorite' => 'Segna come preferito',
 		'mark_read' => 'Segna come letto',
 		'mark_read' => 'Segna come letto',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Rimuovi',
 		'remove' => 'Rimuovi',
 		'see_website' => 'Vai al sito',
 		'see_website' => 'Vai al sito',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l\\e',
 		'apr' => 'apr.',
 		'apr' => 'apr.',
+		'Apr' => '\\A\\p\\r\\i\\l\\e',
 		'april' => 'aprile',
 		'april' => 'aprile',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'aug' => 'ag.',
 		'aug' => 'ag.',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Ultimo mese',
 		'last_month' => 'Ultimo mese',
 		'last_week' => 'Ultima settimana',
 		'last_week' => 'Ultima settimana',
 		'last_year' => 'Ultimo anno',
 		'last_year' => 'Ultimo anno',
-		'mar' => 'mar.',
 		'Mar' => '\\M\\a\\r\\z\\o',
 		'Mar' => '\\M\\a\\r\\z\\o',
+		'mar' => 'mar.',
 		'march' => 'marzo',
 		'march' => 'marzo',
-		'May' => '\\M\\a\\g\\g\\i\\o',
 		'may' => 'maggio',
 		'may' => 'maggio',
+		'May' => '\\M\\a\\g\\g\\i\\o',
 		'may_' => 'May',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'month' => 'mesi',
 		'month' => 'mesi',

+ 2 - 0
app/i18n/kr/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => '업데이트',
 		'_' => '업데이트',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s 개의 글 (%s)',
 		'articles_and_size' => '%s 개의 글 (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => '사용자 삭제',
 		'delete_users' => '사용자 삭제',
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => '언어',
 		'language' => '언어',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => '%d 개의 계정이 생성되었습니다',
 		'number' => '%d 개의 계정이 생성되었습니다',

+ 5 - 3
app/i18n/kr/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← RSS 피드로 돌아가기',
 		'back_to_rss_feeds' => '← RSS 피드로 돌아가기',
 		'cancel' => '취소',
 		'cancel' => '취소',
 		'create' => '생성',
 		'create' => '생성',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => '비활성화',
 		'disable' => '비활성화',
 		'empty' => '비우기',
 		'empty' => '비우기',
 		'enable' => '활성화',
 		'enable' => '활성화',
@@ -16,6 +17,7 @@ return array(
 		'manage' => '관리',
 		'manage' => '관리',
 		'mark_favorite' => '즐겨찾기에 등록',
 		'mark_favorite' => '즐겨찾기에 등록',
 		'mark_read' => '읽음으로 표시',
 		'mark_read' => '읽음으로 표시',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => '삭제',
 		'remove' => '삭제',
 		'see_website' => '웹사이트 열기',
 		'see_website' => '웹사이트 열기',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',
 		'apr' => '4월',
 		'apr' => '4월',
+		'Apr' => '\\A\\p\\r\\i\\l',
 		'april' => '4월',
 		'april' => '4월',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'aug' => '8월',
 		'aug' => '8월',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => '최근 한 달',
 		'last_month' => '최근 한 달',
 		'last_week' => '최근 한 주',
 		'last_week' => '최근 한 주',
 		'last_year' => '최근 일 년',
 		'last_year' => '최근 일 년',
-		'mar' => '3월',
 		'Mar' => '\\M\\a\\r\\c\\h',
 		'Mar' => '\\M\\a\\r\\c\\h',
+		'mar' => '3월',
 		'march' => '3월',
 		'march' => '3월',
-		'May' => '\\M\\a\\y',
 		'may' => '5월',
 		'may' => '5월',
+		'May' => '\\M\\a\\y',
 		'may_' => '5월',
 		'may_' => '5월',
 		'mon' => '월',
 		'mon' => '월',
 		'month' => '개월',
 		'month' => '개월',

+ 2 - 0
app/i18n/nl/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Versie controle',
 		'_' => 'Versie controle',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s artikelen (%s)',
 		'articles_and_size' => '%s artikelen (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Verwijder gebruiker',
 		'delete_users' => 'Verwijder gebruiker',
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Taal',
 		'language' => 'Taal',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Er is %d accounts gemaakt',
 		'number' => 'Er is %d accounts gemaakt',

+ 5 - 3
app/i18n/nl/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Ga terug naar je RSS feeds',
 		'back_to_rss_feeds' => '← Ga terug naar je RSS feeds',
 		'cancel' => 'Annuleren',
 		'cancel' => 'Annuleren',
 		'create' => 'Opslaan',
 		'create' => 'Opslaan',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Uitzetten',
 		'disable' => 'Uitzetten',
 		'empty' => 'Leeg',
 		'empty' => 'Leeg',
 		'enable' => 'Aanzetten',
 		'enable' => 'Aanzetten',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Beheren',
 		'manage' => 'Beheren',
 		'mark_favorite' => 'Markeer als favoriet',
 		'mark_favorite' => 'Markeer als favoriet',
 		'mark_read' => 'Markeer als gelezen',
 		'mark_read' => 'Markeer als gelezen',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Verwijder',
 		'remove' => 'Verwijder',
 		'see_website' => 'Bekijk website',
 		'see_website' => 'Bekijk website',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',
 		'apr' => 'apr',
 		'apr' => 'apr',
+		'Apr' => '\\A\\p\\r\\i\\l',
 		'april' => 'Apr',
 		'april' => 'Apr',
 		'Aug' => '\\A\\u\\g\\u\\s\\t\\u\\s',
 		'Aug' => '\\A\\u\\g\\u\\s\\t\\u\\s',
 		'aug' => 'aug',
 		'aug' => 'aug',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Vorige maand',
 		'last_month' => 'Vorige maand',
 		'last_week' => 'Vorige week',
 		'last_week' => 'Vorige week',
 		'last_year' => 'Vorig jaar',
 		'last_year' => 'Vorig jaar',
-		'mar' => 'mrt',
 		'Mar' => '\\M\\a\\a\\r\\t',
 		'Mar' => '\\M\\a\\a\\r\\t',
+		'mar' => 'mrt',
 		'march' => 'Mrt',
 		'march' => 'Mrt',
-		'May' => '\\M\\e\\i',
 		'may' => 'Mei',
 		'may' => 'Mei',
+		'May' => '\\M\\e\\i',
 		'may_' => 'Mei',
 		'may_' => 'Mei',
 		'mon' => 'Ma',
 		'mon' => 'Ma',
 		'month' => 'maanden',
 		'month' => 'maanden',

+ 2 - 0
app/i18n/oc/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Sistèma de mesa a jorn',
 		'_' => 'Sistèma de mesa a jorn',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s articles (%s)',
 		'articles_and_size' => '%s articles (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Suprimir un utilizaire',
 		'delete_users' => 'Suprimir un utilizaire',
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Lenga',
 		'language' => 'Lenga',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => '%d compte ja creat',
 		'number' => '%d compte ja creat',

+ 5 - 3
app/i18n/oc/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS',
 		'back_to_rss_feeds' => '← Tornar a vòstres fluxes RSS',
 		'cancel' => 'Anullar',
 		'cancel' => 'Anullar',
 		'create' => 'Crear',
 		'create' => 'Crear',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Desactivar',
 		'disable' => 'Desactivar',
 		'empty' => 'Voidar',
 		'empty' => 'Voidar',
 		'enable' => 'Activar',
 		'enable' => 'Activar',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Gerir',
 		'manage' => 'Gerir',
 		'mark_favorite' => 'Ajustar als favorits',
 		'mark_favorite' => 'Ajustar als favorits',
 		'mark_read' => 'Marcar coma legit',
 		'mark_read' => 'Marcar coma legit',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Levar',
 		'remove' => 'Levar',
 		'see_website' => 'Veire lo site',
 		'see_website' => 'Veire lo site',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\a\\b\\r\\i\\a\\l',
 		'apr' => 'abr.',
 		'apr' => 'abr.',
+		'Apr' => '\\a\\b\\r\\i\\a\\l',
 		'april' => 'abrial',
 		'april' => 'abrial',
 		'Aug' => '\\a\\g\\o\\s\\t',
 		'Aug' => '\\a\\g\\o\\s\\t',
 		'aug' => 'agost',
 		'aug' => 'agost',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Dempuèi lo mes passat',
 		'last_month' => 'Dempuèi lo mes passat',
 		'last_week' => 'Dempuèi la setmana passada',
 		'last_week' => 'Dempuèi la setmana passada',
 		'last_year' => 'Dempuèi l’annada passada',
 		'last_year' => 'Dempuèi l’annada passada',
-		'mar' => 'març',
 		'Mar' => '\\m\\a\\r\\ç',
 		'Mar' => '\\m\\a\\r\\ç',
+		'mar' => 'març',
 		'march' => 'març',
 		'march' => 'març',
-		'May' => '\\m\\a\\i',
 		'may' => 'mai',
 		'may' => 'mai',
+		'May' => '\\m\\a\\i',
 		'may_' => 'mai',
 		'may_' => 'mai',
 		'mon' => 'dl',
 		'mon' => 'dl',
 		'month' => 'meses',
 		'month' => 'meses',

+ 2 - 0
app/i18n/pt-br/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Atualização do sistema',
 		'_' => 'Atualização do sistema',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s artigos (%s)',
 		'articles_and_size' => '%s artigos (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Idioma',
 		'language' => 'Idioma',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Há %d conta criada',
 		'number' => 'Há %d conta criada',

+ 5 - 3
app/i18n/pt-br/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'back_to_rss_feeds' => '← Volte para o seu feeds RSS',
 		'cancel' => 'Cancelar',
 		'cancel' => 'Cancelar',
 		'create' => 'Criar',
 		'create' => 'Criar',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Desabilitar',
 		'disable' => 'Desabilitar',
 		'empty' => 'Vazio',
 		'empty' => 'Vazio',
 		'enable' => 'Habilitar',
 		'enable' => 'Habilitar',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Gerenciar',
 		'manage' => 'Gerenciar',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_favorite' => 'Marcar como favorito',
 		'mark_read' => 'Marcar como lido',
 		'mark_read' => 'Marcar como lido',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Remover',
 		'remove' => 'Remover',
 		'see_website' => 'Ver o site',
 		'see_website' => 'Ver o site',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\b\\r\\i\\l',
 		'apr' => 'abr',
 		'apr' => 'abr',
+		'Apr' => '\\A\\b\\r\\i\\l',
 		'april' => 'Abr',
 		'april' => 'Abr',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'Aug' => '\\A\\g\\o\\s\\t\\o',
 		'aug' => 'ago',
 		'aug' => 'ago',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Últimos mês',
 		'last_month' => 'Últimos mês',
 		'last_week' => 'Última semana',
 		'last_week' => 'Última semana',
 		'last_year' => 'Último ano',
 		'last_year' => 'Último ano',
-		'mar' => 'mar',
 		'Mar' => '\\M\\a\\r\\ç\\o',
 		'Mar' => '\\M\\a\\r\\ç\\o',
+		'mar' => 'mar',
 		'march' => 'Mar',
 		'march' => 'Mar',
-		'May' => '\\M\\a\\i\\o',
 		'may' => 'Mai',
 		'may' => 'Mai',
+		'May' => '\\M\\a\\i\\o',
 		'may_' => 'Mai',
 		'may_' => 'Mai',
 		'mon' => 'Seg',
 		'mon' => 'Seg',
 		'month' => 'meses',
 		'month' => 'meses',

+ 2 - 0
app/i18n/ru/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Обновление системы',
 		'_' => 'Обновление системы',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s статей (%s)',
 		'articles_and_size' => '%s статей (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Язык',
 		'language' => 'Язык',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'На данный момент создан %d аккаунт',
 		'number' => 'На данный момент создан %d аккаунт',

+ 5 - 3
app/i18n/ru/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Go back to your RSS feeds',	// TODO - Translation
 		'back_to_rss_feeds' => '← Go back to your RSS feeds',	// TODO - Translation
 		'cancel' => 'Cancel',	// TODO - Translation
 		'cancel' => 'Cancel',	// TODO - Translation
 		'create' => 'Create',	// TODO - Translation
 		'create' => 'Create',	// TODO - Translation
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Disable',	// TODO - Translation
 		'disable' => 'Disable',	// TODO - Translation
 		'empty' => 'Empty',	// TODO - Translation
 		'empty' => 'Empty',	// TODO - Translation
 		'enable' => 'Enable',	// TODO - Translation
 		'enable' => 'Enable',	// TODO - Translation
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Manage',	// TODO - Translation
 		'manage' => 'Manage',	// TODO - Translation
 		'mark_favorite' => 'Mark as favourite',	// TODO - Translation
 		'mark_favorite' => 'Mark as favourite',	// TODO - Translation
 		'mark_read' => 'Mark as read',	// TODO - Translation
 		'mark_read' => 'Mark as read',	// TODO - Translation
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Remove',	// TODO - Translation
 		'remove' => 'Remove',	// TODO - Translation
 		'see_website' => 'See website',	// TODO - Translation
 		'see_website' => 'See website',	// TODO - Translation
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'apr' => 'apr',
 		'apr' => 'apr',
+		'Apr' => '\\A\\p\\r\\i\\l',	// TODO - Translation
 		'april' => 'Apr',
 		'april' => 'Apr',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'Aug' => '\\A\\u\\g\\u\\s\\t',	// TODO - Translation
 		'aug' => 'aug',
 		'aug' => 'aug',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Last month',	// TODO - Translation
 		'last_month' => 'Last month',	// TODO - Translation
 		'last_week' => 'Last week',	// TODO - Translation
 		'last_week' => 'Last week',	// TODO - Translation
 		'last_year' => 'Last year',	// TODO - Translation
 		'last_year' => 'Last year',	// TODO - Translation
-		'mar' => 'mar',
 		'Mar' => '\\M\\a\\r\\c\\h',	// TODO - Translation
 		'Mar' => '\\M\\a\\r\\c\\h',	// TODO - Translation
+		'mar' => 'mar',
 		'march' => 'Mar',
 		'march' => 'Mar',
-		'May' => '\\M\\a\\y',	// TODO - Translation
 		'may' => 'May',	// TODO - Translation
 		'may' => 'May',	// TODO - Translation
+		'May' => '\\M\\a\\y',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'mon' => 'Mon',	// TODO - Translation
 		'month' => 'months',	// TODO - Translation
 		'month' => 'months',	// TODO - Translation

+ 2 - 0
app/i18n/sk/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Aktualizácia systému',
 		'_' => 'Aktualizácia systému',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s článkov (%s)',
 		'articles_and_size' => '%s článkov (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Zmazať používateľa',
 		'delete_users' => 'Zmazať používateľa',
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Jazyk',
 		'language' => 'Jazyk',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Je vytvorený používateľ: %d',
 		'number' => 'Je vytvorený používateľ: %d',

+ 5 - 3
app/i18n/sk/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← Späť na vaše RSS kanály',
 		'back_to_rss_feeds' => '← Späť na vaše RSS kanály',
 		'cancel' => 'Zrušiť',
 		'cancel' => 'Zrušiť',
 		'create' => 'Vytvoriť',
 		'create' => 'Vytvoriť',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Zakázať',
 		'disable' => 'Zakázať',
 		'empty' => 'Vyprázdniť',
 		'empty' => 'Vyprázdniť',
 		'enable' => 'Povoliť',
 		'enable' => 'Povoliť',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Spravovať',
 		'manage' => 'Spravovať',
 		'mark_favorite' => 'Označiť ako obľúbené',
 		'mark_favorite' => 'Označiť ako obľúbené',
 		'mark_read' => 'Označiť ako prečítané',
 		'mark_read' => 'Označiť ako prečítané',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Odstrániť',
 		'remove' => 'Odstrániť',
 		'see_website' => 'Zobraziť webovú stránku',
 		'see_website' => 'Zobraziť webovú stránku',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\A\\p\\r\\í\\l',
 		'apr' => 'Apr.',
 		'apr' => 'Apr.',
+		'Apr' => '\\A\\p\\r\\í\\l',
 		'april' => 'Apríl',
 		'april' => 'Apríl',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'Aug' => '\\A\\u\\g\\u\\s\\t',
 		'aug' => 'Aug.',
 		'aug' => 'Aug.',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Posledný mesiac',
 		'last_month' => 'Posledný mesiac',
 		'last_week' => 'Posledný týždeň',
 		'last_week' => 'Posledný týždeň',
 		'last_year' => 'Posledný rok',
 		'last_year' => 'Posledný rok',
-		'mar' => 'Mar.',
 		'Mar' => '\\M\\a\\r\\e\\c',
 		'Mar' => '\\M\\a\\r\\e\\c',
+		'mar' => 'Mar.',
 		'march' => 'Marec',
 		'march' => 'Marec',
-		'May' => '\\M\\á\\j',
 		'may' => 'Máj',
 		'may' => 'Máj',
+		'May' => '\\M\\á\\j',
 		'may_' => 'Máj',
 		'may_' => 'Máj',
 		'mon' => 'Po',
 		'mon' => 'Po',
 		'month' => 'mesiace',
 		'month' => 'mesiace',

+ 2 - 0
app/i18n/tr/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => 'Sistem güncelleme',
 		'_' => 'Sistem güncelleme',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s makale (%s)',
 		'articles_and_size' => '%s makale (%s)',
 		'article_count' => 'Articles',	// TODO - Translation
 		'article_count' => 'Articles',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
 		'back_to_manage' => '← Return to user list',	// TODO - Translation
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'delete_users' => 'Delete user',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'email' => 'Email address',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
 		'feed_count' => 'Feeds',	// TODO - Translation
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => 'Dil',
 		'language' => 'Dil',
 		'list' => 'User list',	// TODO - Translation
 		'list' => 'User list',	// TODO - Translation
 		'number' => 'Oluşturulmuş %d hesap var',
 		'number' => 'Oluşturulmuş %d hesap var',

+ 5 - 3
app/i18n/tr/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin',
 		'back_to_rss_feeds' => '← RSS akışlarınız için geri gidin',
 		'cancel' => 'İptal',
 		'cancel' => 'İptal',
 		'create' => 'Oluştur',
 		'create' => 'Oluştur',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => 'Pasif',
 		'disable' => 'Pasif',
 		'empty' => 'Boş',
 		'empty' => 'Boş',
 		'enable' => 'Aktif',
 		'enable' => 'Aktif',
@@ -16,6 +17,7 @@ return array(
 		'manage' => 'Yönet',
 		'manage' => 'Yönet',
 		'mark_favorite' => 'Favoriye ekle',
 		'mark_favorite' => 'Favoriye ekle',
 		'mark_read' => 'Okundu olarak işaretle',
 		'mark_read' => 'Okundu olarak işaretle',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'purge' => 'Purge',	// TODO - Translation
 		'remove' => 'Sil',
 		'remove' => 'Sil',
 		'see_website' => 'Siteyi gör',
 		'see_website' => 'Siteyi gör',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\N\\i\\s\\a\\n',
 		'apr' => 'nis',
 		'apr' => 'nis',
+		'Apr' => '\\N\\i\\s\\a\\n',
 		'april' => 'Nis',
 		'april' => 'Nis',
 		'Aug' => '\\A\\ğ\\u\\s\\t\\o\\s',
 		'Aug' => '\\A\\ğ\\u\\s\\t\\o\\s',
 		'aug' => 'ağu',
 		'aug' => 'ağu',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => 'Geçen ay',
 		'last_month' => 'Geçen ay',
 		'last_week' => 'Geçen hafta',
 		'last_week' => 'Geçen hafta',
 		'last_year' => 'Geçen yıl',
 		'last_year' => 'Geçen yıl',
-		'mar' => 'mar',
 		'Mar' => '\\M\\a\\r\\t',
 		'Mar' => '\\M\\a\\r\\t',
+		'mar' => 'mar',
 		'march' => 'Mar',
 		'march' => 'Mar',
-		'May' => '\\M\\a\\y\\ı\\s',
 		'may' => 'Mayıs',
 		'may' => 'Mayıs',
+		'May' => '\\M\\a\\y\\ı\\s',
 		'may_' => 'May',	// TODO - Translation
 		'may_' => 'May',	// TODO - Translation
 		'mon' => 'Pzt',
 		'mon' => 'Pzt',
 		'month' => 'ay',
 		'month' => 'ay',

+ 2 - 0
app/i18n/zh-cn/admin.php

@@ -182,6 +182,7 @@ return array(
 		'_' => '更新系统',
 		'_' => '更新系统',
 	),
 	),
 	'user' => array(
 	'user' => array(
+		'admin' => 'Administrator',	// TODO - Translation
 		'articles_and_size' => '%s 篇文章(%s)',
 		'articles_and_size' => '%s 篇文章(%s)',
 		'article_count' => '文章数',
 		'article_count' => '文章数',
 		'back_to_manage' => '← 返回用户列表',
 		'back_to_manage' => '← 返回用户列表',
@@ -190,6 +191,7 @@ return array(
 		'delete_users' => '删除用户',
 		'delete_users' => '删除用户',
 		'email' => '邮箱地址',
 		'email' => '邮箱地址',
 		'feed_count' => '订阅源数',
 		'feed_count' => '订阅源数',
+		'is_admin' => 'Is admin',	// TODO - Translation
 		'language' => '语言',
 		'language' => '语言',
 		'list' => '用户列表',
 		'list' => '用户列表',
 		'number' => '已有 %d 个用户',
 		'number' => '已有 %d 个用户',

+ 5 - 3
app/i18n/zh-cn/gen.php

@@ -7,6 +7,7 @@ return array(
 		'back_to_rss_feeds' => '← 返回订阅源',
 		'back_to_rss_feeds' => '← 返回订阅源',
 		'cancel' => '取消',
 		'cancel' => '取消',
 		'create' => '创建',
 		'create' => '创建',
+		'demote' => 'Demote',	// TODO - Translation
 		'disable' => '禁用',
 		'disable' => '禁用',
 		'empty' => '清空',
 		'empty' => '清空',
 		'enable' => '启用',
 		'enable' => '启用',
@@ -16,6 +17,7 @@ return array(
 		'manage' => '管理',
 		'manage' => '管理',
 		'mark_favorite' => '标记收藏',
 		'mark_favorite' => '标记收藏',
 		'mark_read' => '标记已读',
 		'mark_read' => '标记已读',
+		'promote' => 'Promote',	// TODO - Translation
 		'purge' => '清理',
 		'purge' => '清理',
 		'remove' => '删除',
 		'remove' => '删除',
 		'see_website' => '网站中查看',
 		'see_website' => '网站中查看',
@@ -46,8 +48,8 @@ return array(
 		),
 		),
 	),
 	),
 	'date' => array(
 	'date' => array(
-		'Apr' => '\\四\\月',
 		'apr' => '四月',
 		'apr' => '四月',
+		'Apr' => '\\四\\月',
 		'april' => '四月',
 		'april' => '四月',
 		'Aug' => '\\八\\月',
 		'Aug' => '\\八\\月',
 		'aug' => '八月',
 		'aug' => '八月',
@@ -76,11 +78,11 @@ return array(
 		'last_month' => '上月',
 		'last_month' => '上月',
 		'last_week' => '上周',
 		'last_week' => '上周',
 		'last_year' => '去年',
 		'last_year' => '去年',
-		'mar' => '三月',
 		'Mar' => '\\三\\月',
 		'Mar' => '\\三\\月',
+		'mar' => '三月',
 		'march' => '三月',
 		'march' => '三月',
-		'May' => '\\五\\月',
 		'may' => '五月',
 		'may' => '五月',
+		'May' => '\\五\\月',
 		'may_' => '五月',
 		'may_' => '五月',
 		'mon' => '周一',
 		'mon' => '周一',
 		'month' => '个月',
 		'month' => '个月',

+ 1 - 0
app/install.php

@@ -223,6 +223,7 @@ function saveStep3() {
 				$password_plain,
 				$password_plain,
 				[
 				[
 					'language' => $_SESSION['language'],
 					'language' => $_SESSION['language'],
+					'is_admin' => true,
 				]
 				]
 			);
 			);
 		} catch (Exception $e) {
 		} catch (Exception $e) {

+ 8 - 1
app/views/user/details.phtml

@@ -1,9 +1,11 @@
 <?php $this->partial('aside_configure'); ?>
 <?php $this->partial('aside_configure'); ?>
 
 
+<?php $isAdmin = $this->details['is_admin']; ?>
+
 <div class="post">
 <div class="post">
     <a href="<?= _url('user', 'manage'); ?>"><?= _t('admin.user.back_to_manage'); ?></a>
     <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); ?>">
     <form method="post" action="<?= _url('user', 'manage', 'username', $this->username); ?>">
         <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" />
         <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-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="purge"><?= _t('gen.action.purge') ?></button>
                 <button type="submit" class="btn btn-attention confirm" name="action" value="delete"><?= _t('gen.action.remove') ?></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>
         </div>
         </div>
     </form>
     </form>

+ 11 - 0
app/views/user/manage.phtml

@@ -26,6 +26,15 @@
 			</div>
 			</div>
 		</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) { ?>
 		<?php if ($this->show_email_field) { ?>
 			<div class="form-group">
 			<div class="form-group">
 				<label class="group-name" for="new_user_email">
 				<label class="group-name" for="new_user_email">
@@ -62,6 +71,7 @@
 		<thead>
 		<thead>
 			<tr>
 			<tr>
 				<th><?= _t('admin.user.username') ?></th>
 				<th><?= _t('admin.user.username') ?></th>
+				<th><?= _t('admin.user.is_admin') ?></th>
 				<th><?= _t('admin.user.email') ?></th>
 				<th><?= _t('admin.user.email') ?></th>
 				<th><?= _t('admin.user.language') ?></th>
 				<th><?= _t('admin.user.language') ?></th>
 				<th><?= _t('admin.user.feed_count') ?></th>
 				<th><?= _t('admin.user.feed_count') ?></th>
@@ -74,6 +84,7 @@
 			<?php foreach ($this->users as $username => $values) : ?>
 			<?php foreach ($this->users as $username => $values) : ?>
 				<tr>
 				<tr>
 					<td><?= $username ?></td>
 					<td><?= $username ?></td>
+					<td><?= $values['is_admin'] ? '✔' : ' ' ?></td>
 					<td><?= $values['mail_login'] ?></td>
 					<td><?= $values['mail_login'] ?></td>
 					<td><?= _t("gen.lang.{$values['language']}") ?></td>
 					<td><?= _t("gen.lang.{$values['language']}") ?></td>
 					<td><?= format_number($values['feed_count']) ?></td>
 					<td><?= format_number($values['feed_count']) ?></td>

+ 1 - 0
config-user.default.php

@@ -4,6 +4,7 @@
 # `./data/config-user.custom.php` file instead, containing the keys you want to
 # `./data/config-user.custom.php` file instead, containing the keys you want to
 # override.
 # override.
 return array (
 return array (
+	'is_admin' => false,
 	'language' => 'en',
 	'language' => 'en',
 	'archiving' => [
 	'archiving' => [
 		'keep_period' => 'P3M',
 		'keep_period' => 'P3M',