11<?php
2+ declare (strict_types=1 );
23/**
34 * @copyright Copyright (c) 2016, ownCloud, Inc.
45 *
2728
2829namespace OC \Core \Command \User ;
2930
31+ use OC \Files \View ;
3032use OCP \IConfig ;
3133use OCP \IUserManager ;
3234use Symfony \Component \Console \Command \Command ;
3335use Symfony \Component \Console \Helper \Table ;
3436use Symfony \Component \Console \Input \InputInterface ;
37+ use Symfony \Component \Console \Input \InputOption ;
3538use Symfony \Component \Console \Output \OutputInterface ;
3639
3740class Report extends Command {
@@ -40,19 +43,24 @@ class Report extends Command {
4043 /** @var IConfig */
4144 private $ config ;
4245
43- /**
44- * @param IUserManager $userManager
45- */
46- public function __construct (IUserManager $ userManager , IConfig $ config ) {
46+ public function __construct (IUserManager $ userManager ,
47+ IConfig $ config ) {
4748 $ this ->userManager = $ userManager ;
4849 $ this ->config = $ config ;
4950 parent ::__construct ();
5051 }
5152
52- protected function configure () {
53+ protected function configure (): void {
5354 $ this
5455 ->setName ('user:report ' )
55- ->setDescription ('shows how many users have access ' );
56+ ->setDescription ('shows how many users have access ' )
57+ ->addOption (
58+ 'count-dirs ' ,
59+ null ,
60+ InputOption::VALUE_NONE ,
61+ 'Also count the number of user directories in the database (could time out on huge installations, there for defaults to no with 500+ users) '
62+ )
63+ ;
5664 }
5765
5866 protected function execute (InputInterface $ input , OutputInterface $ output ): int {
@@ -72,10 +80,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
7280 } else {
7381 $ rows [] = ['No backend enabled that supports user counting ' , '' ];
7482 }
75-
76- $ userDirectoryCount = $ this ->countUserDirectories ();
7783 $ rows [] = [' ' ];
78- $ rows [] = ['user directories ' , $ userDirectoryCount ];
84+
85+ if ($ total <= 500 || $ input ->getOption ('count-dirs ' )) {
86+ $ userDirectoryCount = $ this ->countUserDirectories ();
87+ $ rows [] = ['user directories ' , $ userDirectoryCount ];
88+ }
7989
8090 $ disabledUsers = $ this ->config ->getUsersForUserValue ('core ' , 'enabled ' , 'false ' );
8191 $ disabledUsersCount = count ($ disabledUsers );
@@ -86,12 +96,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int
8696 return 0 ;
8797 }
8898
89- private function countUsers () {
99+ private function countUsers (): array {
90100 return $ this ->userManager ->countUsers ();
91101 }
92102
93- private function countUserDirectories () {
94- $ dataview = new \ OC \ Files \ View ('/ ' );
103+ private function countUserDirectories (): int {
104+ $ dataview = new View ('/ ' );
95105 $ userDirectories = $ dataview ->getDirectoryContent ('/ ' , 'httpd/unix-directory ' );
96106 return count ($ userDirectories );
97107 }
0 commit comments