aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Controllers/userController.php66
-rw-r--r--app/Models/FeedDAO.php33
-rw-r--r--app/Models/FeedDAOSQLite.php1
-rw-r--r--app/i18n/cz/admin.php5
-rw-r--r--app/i18n/cz/gen.php1
-rw-r--r--app/i18n/de/admin.php5
-rw-r--r--app/i18n/de/gen.php1
-rw-r--r--app/i18n/en/admin.php5
-rw-r--r--app/i18n/en/gen.php1
-rwxr-xr-xapp/i18n/es/admin.php5
-rwxr-xr-xapp/i18n/es/gen.php1
-rw-r--r--app/i18n/fr/admin.php5
-rw-r--r--app/i18n/fr/gen.php1
-rw-r--r--app/i18n/he/admin.php5
-rw-r--r--app/i18n/he/gen.php1
-rw-r--r--app/i18n/it/admin.php5
-rw-r--r--app/i18n/it/gen.php1
-rw-r--r--app/i18n/kr/admin.php5
-rw-r--r--app/i18n/kr/gen.php1
-rw-r--r--app/i18n/nl/admin.php5
-rw-r--r--app/i18n/nl/gen.php1
-rw-r--r--app/i18n/oc/admin.php5
-rw-r--r--app/i18n/oc/gen.php1
-rw-r--r--app/i18n/pt-br/admin.php5
-rw-r--r--app/i18n/pt-br/gen.php1
-rw-r--r--app/i18n/ru/admin.php5
-rw-r--r--app/i18n/ru/gen.php1
-rw-r--r--app/i18n/sk/admin.php5
-rw-r--r--app/i18n/sk/gen.php1
-rw-r--r--app/i18n/tr/admin.php5
-rw-r--r--app/i18n/tr/gen.php1
-rw-r--r--app/i18n/zh-cn/admin.php5
-rw-r--r--app/i18n/zh-cn/gen.php1
-rw-r--r--app/views/user/details.phtml51
-rw-r--r--app/views/user/manage.phtml85
35 files changed, 253 insertions, 73 deletions
diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php
index 39b4769fd..05e7475e7 100644
--- a/app/Controllers/userController.php
+++ b/app/Controllers/userController.php
@@ -118,7 +118,6 @@ class FreshRSS_user_Controller extends Minz_ActionController {
Minz_Request::bad(_t('feedback.user.updated.error', $username),
array('c' => 'user', 'a' => 'manage'));
}
-
}
}
@@ -194,6 +193,23 @@ class FreshRSS_user_Controller extends Minz_ActionController {
}
}
+ public function purgeAction() {
+ if (!FreshRSS_Auth::hasAccess('admin')) {
+ Minz_Error::error(403);
+ }
+
+ if (Minz_Request::isPost()) {
+ $username = Minz_Request::param('username');
+
+ if (!FreshRSS_UserDAO::exists($username)) {
+ Minz_Error::error(404);
+ }
+
+ $feedDAO = FreshRSS_Factory::createFeedDao($username);
+ $feedDAO->purge();
+ }
+ }
+
/**
* This action displays the user management page.
*/
@@ -204,18 +220,22 @@ class FreshRSS_user_Controller extends Minz_ActionController {
Minz_View::prependTitle(_t('admin.user.title') . ' · ');
+ if (Minz_Request::isPost()) {
+ $action = Minz_Request::param('action');
+ if ('delete' === $action) {
+ $this->deleteAction();
+ } elseif ('update' === $action) {
+ $this->updateAction();
+ } elseif ('purge' === $action) {
+ $this->purgeAction();
+ }
+ }
+
$this->view->show_email_field = FreshRSS_Context::$system_conf->force_email_validation;
$this->view->current_user = Minz_Request::param('u');
- $this->view->nb_articles = 0;
- $this->view->size_user = 0;
- if ($this->view->current_user) {
- // Get information about the current user.
- $entryDAO = FreshRSS_Factory::createEntryDao($this->view->current_user);
- $this->view->nb_articles = $entryDAO->count();
-
- $databaseDAO = FreshRSS_Factory::createDatabaseDAO($this->view->current_user);
- $this->view->size_user = $databaseDAO->size();
+ foreach (listUsers() as $user) {
+ $this->view->users[$user] = $this->retrieveUserDetails($user);
}
}
@@ -542,4 +562,30 @@ class FreshRSS_user_Controller extends Minz_ActionController {
Minz_Request::forward($redirect_url, true);
}
+
+ public function detailsAction() {
+ if (!FreshRSS_Auth::hasAccess('admin')) {
+ Minz_Error::error(403);
+ }
+
+ $username = Minz_Request::param('username');
+ if (!FreshRSS_UserDAO::exists($username)) {
+ Minz_Error::error(404);
+ }
+
+ $this->view->username = $username;
+ $this->view->details = $this->retrieveUserDetails($username);
+ }
+
+ private function retrieveUserDetails($username) {
+ $feedDAO = FreshRSS_Factory::createFeedDao($username);
+ $entryDAO = FreshRSS_Factory::createEntryDao($username);
+ $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username);
+
+ return array(
+ 'feed_count' => $feedDAO->count(),
+ 'article_count' => $entryDAO->count(),
+ 'database_size' => $databaseDAO->size(),
+ );
+ }
}
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index 2bff50d52..417b37773 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -421,6 +421,29 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
return $affected;
}
+ public function purge() {
+ $sql = 'DELETE FROM `_entry`';
+ $stm = $this->pdo->prepare($sql);
+ $this->pdo->beginTransaction();
+ if (!($stm && $stm->execute())) {
+ $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+ Minz_Log::error('SQL error truncate: ' . $info[2]);
+ $this->pdo->rollBack();
+ return false;
+ }
+
+ $sql = 'UPDATE `_feed` SET `cache_nbEntries` = 0, `cache_nbUnreads` = 0';
+ $stm = $this->pdo->prepare($sql);
+ if (!($stm && $stm->execute())) {
+ $info = $stm == null ? $this->pdo->errorInfo() : $stm->errorInfo();
+ Minz_Log::error('SQL error truncate: ' . $info[2]);
+ $this->pdo->rollBack();
+ return false;
+ }
+
+ $this->pdo->commit();
+ }
+
public static function daoToFeed($listDAO, $catID = null) {
$list = array();
@@ -481,4 +504,14 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo implements FreshRSS_Searchable {
$stm->execute(array(':new_value' => -3600, ':old_value' => -1));
}
}
+
+ public function count() {
+ $sql = 'SELECT COUNT(e.id) AS count FROM `_feed` e';
+ $stm = $this->pdo->query($sql);
+ if ($stm == false) {
+ return false;
+ }
+ $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
+ return isset($res[0]) ? $res[0] : 0;
+ }
}
diff --git a/app/Models/FeedDAOSQLite.php b/app/Models/FeedDAOSQLite.php
index 0f685867a..397b69941 100644
--- a/app/Models/FeedDAOSQLite.php
+++ b/app/Models/FeedDAOSQLite.php
@@ -13,5 +13,4 @@ class FreshRSS_FeedDAOSQLite extends FreshRSS_FeedDAO {
}
return false;
}
-
}
diff --git a/app/i18n/cz/admin.php b/app/i18n/cz/admin.php
index a2a509560..aa7f5003a 100644
--- a/app/i18n/cz/admin.php
+++ b/app/i18n/cz/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s článků (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Vytvořit nového uživatele',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Jazyk',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Zatím je vytvořen %d účet',
'numbers' => 'Zatím je vytvořeno %d účtů',
'password_form' => 'Heslo<br /><small>(pro přihlášení webovým formulářem)</small>',
diff --git a/app/i18n/cz/gen.php b/app/i18n/cz/gen.php
index de1456187..3772c90be 100644
--- a/app/i18n/cz/gen.php
+++ b/app/i18n/cz/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Spravovat',
'mark_favorite' => 'Označit jako oblíbené',
'mark_read' => 'Označit jako přečtené',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Odstranit',
'see_website' => 'Navštívit WWW stránku',
'submit' => 'Odeslat',
diff --git a/app/i18n/de/admin.php b/app/i18n/de/admin.php
index f7ddac2d3..4450ce28f 100644
--- a/app/i18n/de/admin.php
+++ b/app/i18n/de/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s Artikel (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Neuen Benutzer erstellen',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Lösche Benutzer',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Sprache',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Es wurde bis jetzt %d Account erstellt',
'numbers' => 'Es wurden bis jetzt %d Accounts erstellt',
'password_form' => 'Passwort<br /><small>(für die Anmeldemethode per Webformular)</small>',
diff --git a/app/i18n/de/gen.php b/app/i18n/de/gen.php
index 977b0a52f..f095b760f 100644
--- a/app/i18n/de/gen.php
+++ b/app/i18n/de/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Verwalten',
'mark_favorite' => 'Als Favorit markieren',
'mark_read' => 'Als gelesen markieren',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Entfernen',
'see_website' => 'Webseite ansehen',
'submit' => 'Abschicken',
diff --git a/app/i18n/en/admin.php b/app/i18n/en/admin.php
index c5ab183e8..152c70337 100644
--- a/app/i18n/en/admin.php
+++ b/app/i18n/en/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articles (%s)',
+ 'article_count' => 'Articles',
+ 'back_to_manage' => '← Return to user list',
'create' => 'Create new user',
+ 'database_size' => 'Database size',
'delete_users' => 'Delete user',
+ 'feed_count' => 'Feeds',
'language' => 'Language',
+ 'list' => 'User list',
'number' => 'There is %d account created',
'numbers' => 'There are %d accounts created',
'password_form' => 'Password<br /><small>(for the Web-form login method)</small>',
diff --git a/app/i18n/en/gen.php b/app/i18n/en/gen.php
index fc1bd587a..c77950c9f 100644
--- a/app/i18n/en/gen.php
+++ b/app/i18n/en/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Manage',
'mark_favorite' => 'Mark as favourite',
'mark_read' => 'Mark as read',
+ 'purge' => 'Purge',
'remove' => 'Remove',
'see_website' => 'See website',
'submit' => 'Submit',
diff --git a/app/i18n/es/admin.php b/app/i18n/es/admin.php
index 1af3bdcb2..a31702c70 100755
--- a/app/i18n/es/admin.php
+++ b/app/i18n/es/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articles (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Crear nuevo usuario',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Idioma',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Hay %d cuenta creada',
'numbers' => 'Hay %d cuentas creadas',
'password_form' => 'Contraseña<br /><small>(para el método de identificación por formulario web)</small>',
diff --git a/app/i18n/es/gen.php b/app/i18n/es/gen.php
index 538ddc8fe..5a1b9ae56 100755
--- a/app/i18n/es/gen.php
+++ b/app/i18n/es/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Administrar',
'mark_favorite' => 'Marcar como favorita',
'mark_read' => 'Marcar como leído',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Borrar',
'see_website' => 'Ver web',
'submit' => 'Enviar',
diff --git a/app/i18n/fr/admin.php b/app/i18n/fr/admin.php
index 6002617fc..bdf7ba7b7 100644
--- a/app/i18n/fr/admin.php
+++ b/app/i18n/fr/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articles (%s)',
+ 'article_count' => 'Articles',
+ 'back_to_manage' => '← Revenir à la liste des utilisateurs',
'create' => 'Créer un nouvel utilisateur',
+ 'database_size' => 'Volumétrie',
'delete_users' => 'Supprimer un utilisateur',
+ 'feed_count' => 'Flux',
'language' => 'Langue',
+ 'list' => 'Liste des utilisateurs',
'number' => '%d compte a déjà été créé',
'numbers' => '%d comptes ont déjà été créés',
'password_form' => 'Mot de passe<br /><small>(pour connexion par formulaire)</small>',
diff --git a/app/i18n/fr/gen.php b/app/i18n/fr/gen.php
index a6875dd05..551b614a3 100644
--- a/app/i18n/fr/gen.php
+++ b/app/i18n/fr/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Gérer',
'mark_favorite' => 'Mettre en favori',
'mark_read' => 'Marquer comme lu',
+ 'purge' => 'Purger',
'remove' => 'Supprimer',
'see_website' => 'Voir le site',
'submit' => 'Valider',
diff --git a/app/i18n/he/admin.php b/app/i18n/he/admin.php
index 759b74e2a..73a040aad 100644
--- a/app/i18n/he/admin.php
+++ b/app/i18n/he/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articles (%s)', //TODO - Translation
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list',
'create' => 'יצירת משתמש חדש',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'שפה',
+ 'list' => 'User list', // TODO - Translation
'number' => 'There is %d account created', //TODO - Translation
'numbers' => 'There are %d accounts created', //TODO - Translation
'password_form' => 'סיסמה<br /><small>(לשימוש בטפוס ההרשמה)</small>',
diff --git a/app/i18n/he/gen.php b/app/i18n/he/gen.php
index 34e6d77de..3e882e2b2 100644
--- a/app/i18n/he/gen.php
+++ b/app/i18n/he/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'ניהול',
'mark_read' => 'סימון כנקרא',
'mark_favorite' => 'סימון כמועדף',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Remove', //TODO - Translation
'see_website' => 'ראו אתר',
'submit' => 'אישור',
diff --git a/app/i18n/it/admin.php b/app/i18n/it/admin.php
index 8bb6c7bfe..768cb8eb5 100644
--- a/app/i18n/it/admin.php
+++ b/app/i18n/it/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articoli (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Crea nuovo utente',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Lingua',
+ 'list' => 'User list', // TODO - Translation
'number' => ' %d profilo utente creato',
'numbers' => 'Sono presenti %d profili utente',
'password_form' => 'Password<br /><small>(per il login classico)</small>',
diff --git a/app/i18n/it/gen.php b/app/i18n/it/gen.php
index 50d4b4e6c..c74d386df 100644
--- a/app/i18n/it/gen.php
+++ b/app/i18n/it/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Gestisci',
'mark_favorite' => 'Segna come preferito',
'mark_read' => 'Segna come letto',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Rimuovi',
'see_website' => 'Vai al sito',
'submit' => 'Conferma',
diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php
index 4a8e425d5..044c8a273 100644
--- a/app/i18n/kr/admin.php
+++ b/app/i18n/kr/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s 개의 글 (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => '새 사용자 생성',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => '사용자 삭제',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => '언어',
+ 'list' => 'User list', // TODO - Translation
'number' => '%d 개의 계정이 생성되었습니다',
'numbers' => '%d 개의 계정이 생성되었습니다',
'password_form' => '암호<br /><small>(웹폼 로그인 방식 사용시)</small>',
diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php
index fdc95d431..b6a975606 100644
--- a/app/i18n/kr/gen.php
+++ b/app/i18n/kr/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => '관리',
'mark_favorite' => '즐겨찾기에 등록',
'mark_read' => '읽음으로 표시',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => '삭제',
'see_website' => '웹사이트 열기',
'submit' => '설정 저장',
diff --git a/app/i18n/nl/admin.php b/app/i18n/nl/admin.php
index 1083c630b..41fa5ff68 100644
--- a/app/i18n/nl/admin.php
+++ b/app/i18n/nl/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s artikelen (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Creëer nieuwe gebruiker',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Verwijder gebruiker',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Taal',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Er is %d accounts gemaakt',
'numbers' => 'Er zijn %d accounts gemaakt',
'password_form' => 'Wachtwoord<br /><small>(voor de Web-formulier loginmethode)</small>',
diff --git a/app/i18n/nl/gen.php b/app/i18n/nl/gen.php
index fdbb866fc..d276e72a9 100644
--- a/app/i18n/nl/gen.php
+++ b/app/i18n/nl/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Beheren',
'mark_favorite' => 'Markeer als favoriet',
'mark_read' => 'Markeer als gelezen',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Verwijder',
'see_website' => 'Bekijk website',
'submit' => 'Opslaan',
diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php
index 1fb8d5c3a..a0d49faaa 100644
--- a/app/i18n/oc/admin.php
+++ b/app/i18n/oc/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s articles (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Crear un nòu utilizaire',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Suprimir un utilizaire',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Lenga',
+ 'list' => 'User list', // TODO - Translation
'number' => '%d compte ja creat',
'numbers' => '%d comptes ja creats',
'password_form' => 'Senhal <br /><small>(ex. : per la connexion via formulari)</small>',
diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php
index a5bd003c2..a2054a16a 100644
--- a/app/i18n/oc/gen.php
+++ b/app/i18n/oc/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Gerir',
'mark_favorite' => 'Ajustar als favorits',
'mark_read' => 'Marcar coma legit',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Levar',
'see_website' => 'Veire lo site',
'submit' => 'Mandar',
diff --git a/app/i18n/pt-br/admin.php b/app/i18n/pt-br/admin.php
index cef6694c2..6a51ca2e7 100644
--- a/app/i18n/pt-br/admin.php
+++ b/app/i18n/pt-br/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s artigos (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Criar novo usuário',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Idioma',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Há %d conta criada',
'numbers' => 'Há %d contas criadas',
'password_form' => 'Senha<br /><small>(para o login pelo método do formulário)</small>',
diff --git a/app/i18n/pt-br/gen.php b/app/i18n/pt-br/gen.php
index 0e7f367ee..c14499f00 100644
--- a/app/i18n/pt-br/gen.php
+++ b/app/i18n/pt-br/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Gerenciar',
'mark_favorite' => 'Marcar como favorito',
'mark_read' => 'Marcar como lido',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Remover',
'see_website' => 'Ver o site',
'submit' => 'Enviar',
diff --git a/app/i18n/ru/admin.php b/app/i18n/ru/admin.php
index adf091df9..2b93a0099 100644
--- a/app/i18n/ru/admin.php
+++ b/app/i18n/ru/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s статей (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Создать нового пользователя',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Язык',
+ 'list' => 'User list', // TODO - Translation
'number' => 'На данный момент создан %d аккаунт',
'numbers' => 'На данный момент аккаунтов создано: %d',
'password_form' => 'Пароль<br /><small>(для входа через Веб-форму)</small>',
diff --git a/app/i18n/ru/gen.php b/app/i18n/ru/gen.php
index 5200a7005..b8647bec3 100644
--- a/app/i18n/ru/gen.php
+++ b/app/i18n/ru/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Manage', //TODO - Translation
'mark_favorite' => 'Mark as favourite', //TODO - Translation
'mark_read' => 'Mark as read', //TODO - Translation
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Remove', //TODO - Translation
'see_website' => 'See website', //TODO - Translation
'submit' => 'Submit', //TODO - Translation
diff --git a/app/i18n/sk/admin.php b/app/i18n/sk/admin.php
index 347204f37..209641a70 100644
--- a/app/i18n/sk/admin.php
+++ b/app/i18n/sk/admin.php
@@ -182,9 +182,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s článkov (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => 'Vytvoriť nového používateľa',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => 'Zmazať používateľa',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => 'Jazyk',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Je vytvorený používateľ: %d',
'numbers' => 'Je vytvorených používateľov: %d',
'password_form' => 'Heslo<br /><small>(pre spôsob prihlásenia cez webový formulár)</small>',
diff --git a/app/i18n/sk/gen.php b/app/i18n/sk/gen.php
index 7303ffa9f..b9c1d5155 100644
--- a/app/i18n/sk/gen.php
+++ b/app/i18n/sk/gen.php
@@ -15,6 +15,7 @@ return array(
'manage' => 'Spravovať',
'mark_favorite' => 'Označiť ako obľúbené',
'mark_read' => 'Označiť ako prečítané',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Odstrániť',
'see_website' => 'Zobraziť webovú stránku',
'submit' => 'Poslať',
diff --git a/app/i18n/tr/admin.php b/app/i18n/tr/admin.php
index 2c7d0fd6d..b399358c4 100644
--- a/app/i18n/tr/admin.php
+++ b/app/i18n/tr/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s makale (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
+ 'database_size' => 'Database size', // TODO - Translation
'create' => 'Yeni kullanıcı oluştur',
+ 'feed_count' => 'Feeds', //TODO - Translation
'delete_users' => 'Delete user', //TODO - Translation
'language' => 'Dil',
+ 'list' => 'User list', // TODO - Translation
'number' => 'Oluşturulmuş %d hesap var',
'numbers' => 'Oluşturulmuş %d hesap var',
'password_form' => 'Şifre<br /><small>(Tarayıcı girişi için)</small>',
diff --git a/app/i18n/tr/gen.php b/app/i18n/tr/gen.php
index ccc5b9ee6..8f138d482 100644
--- a/app/i18n/tr/gen.php
+++ b/app/i18n/tr/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => 'Yönet',
'mark_favorite' => 'Favoriye ekle',
'mark_read' => 'Okundu olarak işaretle',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => 'Sil',
'see_website' => 'Siteyi gör',
'submit' => 'Onayla',
diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php
index cdc8449a3..a663d31fe 100644
--- a/app/i18n/zh-cn/admin.php
+++ b/app/i18n/zh-cn/admin.php
@@ -183,9 +183,14 @@ return array(
),
'user' => array(
'articles_and_size' => '%s 篇文章 (%s)',
+ 'article_count' => 'Articles', // TODO - Translation
+ 'back_to_manage' => '← Return to user list', // TODO - Translation
'create' => '创建新用户',
+ 'database_size' => 'Database size', // TODO - Translation
'delete_users' => '删除用户',
+ 'feed_count' => 'Feeds', //TODO - Translation
'language' => '语言',
+ 'list' => 'User list', // TODO - Translation
'number' => '已有 %d 个用户',
'numbers' => '已有 %d 个用户',
'password_form' => '密码<br /><small>(用于 Web-form 登录方式)</small>',
diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php
index 31817260e..5009e9183 100644
--- a/app/i18n/zh-cn/gen.php
+++ b/app/i18n/zh-cn/gen.php
@@ -16,6 +16,7 @@ return array(
'manage' => '管理',
'mark_favorite' => '加入收藏',
'mark_read' => '设为已读',
+ 'purge' => 'Purge', // TODO - Translation
'remove' => '删除',
'see_website' => '查看网站',
'submit' => '提交',
diff --git a/app/views/user/details.phtml b/app/views/user/details.phtml
new file mode 100644
index 000000000..2e37be872
--- /dev/null
+++ b/app/views/user/details.phtml
@@ -0,0 +1,51 @@
+<?php $this->partial('aside_configure'); ?>
+
+<div class="post">
+ <a href="<?= _url('user', 'manage'); ?>"><?= _t('admin.user.back_to_manage'); ?></a>
+
+ <legend><?= $this->username; ?></legend>
+ <form method="post" action="<?= _url('user', 'manage', 'username', $this->username); ?>">
+ <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken(); ?>" />
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('admin.user.feed_count') ?></label>
+ <div class="group-controls">
+ <?= format_number($this->details['feed_count']) ?>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('admin.user.article_count') ?></label>
+ <div class="group-controls">
+ <?= format_number($this->details['article_count']) ?>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name"><?= _t('admin.user.database_size') ?></label>
+ <div class="group-controls">
+ <?= format_bytes($this->details['database_size']) ?>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label class="group-name" for="newPasswordPlain"><?= _t('admin.user.password_form') ?></label>
+ <div class="group-controls">
+ <div class="stick">
+ <input type="password" id="newPasswordPlain" name="newPasswordPlain" autocomplete="new-password" pattern=".{7,}" <?= cryptAvailable() ? '' : 'disabled="disabled" ' ?>/>
+ <a class="btn toggle-password" data-toggle="password-<?= $this->username; ?>"><?= _i('key') ?></a>
+ </div>
+ <?= _i('help'); ?> <?= _t('admin.user.password_format') ?>
+ </div>
+ </div>
+
+ <div class="form-group form-actions">
+ <noscript><b><?= _t('gen.js.should_be_activated'); ?></b></noscript>
+ <div class="group-controls">
+ <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>
+ <div>
+ </div>
+ </form>
+</div>
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml
index 93d1008b5..e5d5717fa 100644
--- a/app/views/user/manage.phtml
+++ b/app/views/user/manage.phtml
@@ -57,66 +57,27 @@
</div>
</form>
- <form method="post" action="<?= _url('user', 'update') ?>">
- <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
- <legend><?= _t('admin.user.update_users') ?></legend>
-
- <div class="form-group">
- <label class="group-name" for="current_user"><?= _t('admin.user.selected') ?></label>
- <div class="group-controls">
- <select id="current_user" name="username">
- <option selected="selected"> </option>
- <?php foreach (listUsers() as $username) { ?>
- <option value="<?= $username ?>"><?= $username ?></option>
- <?php } ?>
- </select>
- </div>
- </div>
-
- <div class="form-group">
- <label class="group-name" for="newPasswordPlain"><?= _t('admin.user.password_form') ?></label>
- <div class="group-controls">
- <div class="stick">
- <input type="password" id="newPasswordPlain" name="newPasswordPlain" autocomplete="new-password" pattern=".{7,}" <?= cryptAvailable() ? '' : 'disabled="disabled" ' ?>/>
- <a class="btn toggle-password" data-toggle="newPasswordPlain"><?= _i('key') ?></a>
- </div>
- <?= _i('help') ?> <?= _t('conf.profile.password_format') ?>
- <noscript><b><?= _t('gen.js.should_be_activated') ?></b></noscript>
- </div>
- </div>
-
- <div class="form-group form-actions">
- <div class="group-controls">
- <button type="submit" class="btn btn-important"><?= _t('gen.action.update') ?></button>
- <button type="reset" class="btn"><?= _t('gen.action.cancel') ?></button>
- </div>
- </div>
- </form>
-
- <form method="post" action="<?= _url('user', 'delete') ?>">
- <input type="hidden" name="_csrf" value="<?= FreshRSS_Auth::csrfToken() ?>" />
- <legend><?= _t('admin.user.delete_users') ?></legend>
-
- <div class="form-group">
- <label class="group-name" for="user-list"><?= _t('admin.user.selected') ?></label>
- <div class="group-controls">
- <select id="user-list" class="select-change" name="username">
- <option selected="selected"> </option>
- <?php foreach (listUsers() as $username) { ?>
- <option data-url="<?= _url('user', 'manage', 'u', $username) ?>" <?= $this->current_user === $username ? 'selected="selected"' : '' ?> value="<?= $username ?>"><?= $username ?></option>
- <?php } ?>
- </select>
-
- <p><?php echo _t('admin.user.articles_and_size',
- format_number($this->nb_articles),
- format_bytes($this->size_user)); ?></p>
- </div>
- </div>
-
- <div class="form-group form-actions">
- <div class="group-controls">
- <button type="submit" class="btn btn-attention confirm"><?= _t('gen.action.remove') ?></button>
- </div>
- </div>
- </form>
+ <legend><?= _t('admin.user.list'); ?></legend>
+ <table id="user-list">
+ <thead>
+ <tr>
+ <th><?= _t('admin.user.username') ?></th>
+ <th><?= _t('admin.user.feed_count') ?></th>
+ <th><?= _t('admin.user.article_count') ?></th>
+ <th><?= _t('admin.user.database_size') ?></th>
+ <th>&nbsp;</th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php foreach ($this->users as $username => $values) : ?>
+ <tr>
+ <td><?= $username ?></td>
+ <td><?= format_number($values['feed_count']) ?></td>
+ <td><?= format_number($values['article_count']) ?></td>
+ <td><?= format_bytes($values['database_size']) ?></td>
+ <td><a href="<?= _url('user', 'details', 'username', $username) ?>">Details</a></td>
+ </tr>
+ <?php endforeach ?>
+ </tbody>
+ </table>
</div>