user-info.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/usr/bin/env php
  2. <?php
  3. declare(strict_types=1);
  4. require(__DIR__ . '/_cli.php');
  5. const DATA_FORMAT = "%-7s | %-20s | %-5s | %-7s | %-25s | %-15s | %-10s | %-10s | %-10s | %-10s | %-10s | %-10s | %-5s | %-10s\n";
  6. $parameters = [
  7. 'long' => [
  8. 'user' => ':',
  9. 'header' => '',
  10. 'json' => '',
  11. 'human-readable' => '',
  12. ],
  13. 'short' => [
  14. 'human-readable' => 'h',
  15. ],
  16. 'deprecated' => [],
  17. ];
  18. $options = parseCliParams($parameters);
  19. if (!empty($options['invalid'])) {
  20. fail('Usage: ' . basename(__FILE__) . ' (--human-readable --header --json --user username --user username …)');
  21. }
  22. if (empty($options['valid']['user'])) {
  23. $users = listUsers();
  24. } elseif (is_array($options['valid']['user'])) {
  25. /** @var array<string> $users */
  26. $users = $options['valid']['user'];
  27. } else {
  28. /** @var array<string> $users */
  29. $users = [$options['valid']['user']];
  30. }
  31. sort($users);
  32. $formatJson = isset($options['valid']['json']);
  33. $jsonOutput = [];
  34. if ($formatJson) {
  35. unset($options['valid']['header']);
  36. unset($options['valid']['human-readable']);
  37. }
  38. if (array_key_exists('header', $options['valid'])) {
  39. printf(
  40. DATA_FORMAT,
  41. 'default',
  42. 'user',
  43. 'admin',
  44. 'enabled',
  45. 'last user activity',
  46. 'space used',
  47. 'categories',
  48. 'feeds',
  49. 'reads',
  50. 'unreads',
  51. 'favourites',
  52. 'tags',
  53. 'lang',
  54. 'email'
  55. );
  56. }
  57. foreach ($users as $username) {
  58. $username = cliInitUser($username);
  59. $catDAO = FreshRSS_Factory::createCategoryDao($username);
  60. $feedDAO = FreshRSS_Factory::createFeedDao($username);
  61. $entryDAO = FreshRSS_Factory::createEntryDao($username);
  62. $tagDAO = FreshRSS_Factory::createTagDao($username);
  63. $databaseDAO = FreshRSS_Factory::createDatabaseDAO($username);
  64. $nbEntries = $entryDAO->countUnreadRead();
  65. $nbFavorites = $entryDAO->countUnreadReadFavorites();
  66. $feedList = $feedDAO->listFeedsIds();
  67. $data = array(
  68. 'default' => $username === FreshRSS_Context::systemConf()->default_user ? '*' : '',
  69. 'user' => $username,
  70. 'admin' => FreshRSS_Context::userConf()->is_admin ? '*' : '',
  71. 'enabled' => FreshRSS_Context::userConf()->enabled ? '*' : '',
  72. 'last_user_activity' => FreshRSS_UserDAO::mtime($username),
  73. 'database_size' => $databaseDAO->size(),
  74. 'categories' => $catDAO->count(),
  75. 'feeds' => count($feedList),
  76. 'reads' => (int)$nbEntries['read'],
  77. 'unreads' => (int)$nbEntries['unread'],
  78. 'favourites' => (int)$nbFavorites['all'],
  79. 'tags' => $tagDAO->count(),
  80. 'lang' => FreshRSS_Context::userConf()->language,
  81. 'mail_login' => FreshRSS_Context::userConf()->mail_login,
  82. );
  83. if (isset($options['valid']['human-readable'])) { //Human format
  84. $data['last_user_activity'] = date('c', $data['last_user_activity']);
  85. $data['database_size'] = format_bytes($data['database_size']);
  86. }
  87. if ($formatJson) {
  88. $data['default'] = !empty($data['default']);
  89. $data['admin'] = !empty($data['admin']);
  90. $data['enabled'] = !empty($data['enabled']);
  91. $data['last_user_activity'] = gmdate('Y-m-d\TH:i:s\Z', (int)$data['last_user_activity']);
  92. $jsonOutput[] = $data;
  93. } else {
  94. vprintf(DATA_FORMAT, $data);
  95. }
  96. }
  97. if ($formatJson) {
  98. echo json_encode($jsonOutput), "\n";
  99. }
  100. done();