From 3ac8f8def39c754a6e67dc2d5bd17d9bc65e5790 Mon Sep 17 00:00:00 2001 From: c12simple Date: Tue, 25 Nov 2014 09:58:26 +0100 Subject: [PATCH] Add progression display on CLI mode when update user from LDAP --- .../core/classes/class.AJXP_ProgressBarCLI.php | 1 + core/src/core/classes/class.AuthService.php | 16 +++++++++++++++- .../class.ajxp_confAccessDriver.php | 9 ++++++++- .../plugins/auth.ldap/class.ldapAuthDriver.php | 14 ++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/core/src/core/classes/class.AJXP_ProgressBarCLI.php b/core/src/core/classes/class.AJXP_ProgressBarCLI.php index 97450ac5cb..38522a5407 100644 --- a/core/src/core/classes/class.AJXP_ProgressBarCLI.php +++ b/core/src/core/classes/class.AJXP_ProgressBarCLI.php @@ -33,6 +33,7 @@ class AJXP_ProgressBarCLI { private $lastsecond = 0; public function init($currentValue = 0, $total, $name){ + if(!(php_sapi_name() == "cli")) return; $this->total = $total; $this->strName = $name; $this->startPoint = time(); diff --git a/core/src/core/classes/class.AuthService.php b/core/src/core/classes/class.AuthService.php index 760ad36160..5d148eb31b 100644 --- a/core/src/core/classes/class.AuthService.php +++ b/core/src/core/classes/class.AuthService.php @@ -966,7 +966,7 @@ public static function countUsersForRepository($repositoryId, $details = false) * @param bool $recursive * @return AbstractAjxpUser[] */ - public static function listUsers($baseGroup = "/", $regexp = null, $offset = -1, $limit = -1, $cleanLosts = true, $recursive = true) + public static function listUsers($baseGroup = "/", $regexp = null, $offset = -1, $limit = -1, $cleanLosts = true, $recursive = true, $countCallback = null, $loopCallback = null) { $baseGroup = self::filterBaseGroup($baseGroup); $authDriver = ConfService::getAuthDriverImpl(); @@ -979,10 +979,24 @@ public static function listUsers($baseGroup = "/", $regexp = null, $offset = -1, } else { $users = $authDriver->listUsers($baseGroup); } + $index = 0; + + // Callback func for display progression on cli mode + if($countCallback != null){ + call_user_func($countCallback, $index, count($users), "Update users"); + } + foreach (array_keys($users) as $userId) { if(($userId == "guest" && !ConfService::getCoreConf("ALLOW_GUEST_BROWSING", "auth")) || $userId == "ajxp.admin.users" || $userId == "") continue; if($regexp != null && !$authDriver->supportsUsersPagination() && !preg_match("/$regexp/i", $userId)) continue; $allUsers[$userId] = $confDriver->createUserObject($userId); + $index++; + + // Callback func for display progression on cli mode + if($countCallback != null){ + call_user_func($loopCallback, $index); + } + if ($paginated) { // Make sure to reload all children objects foreach ($confDriver->getUserChildren($userId) as $childObject) { diff --git a/core/src/plugins/access.ajxp_conf/class.ajxp_confAccessDriver.php b/core/src/plugins/access.ajxp_conf/class.ajxp_confAccessDriver.php index de0ee180df..847342e77e 100644 --- a/core/src/plugins/access.ajxp_conf/class.ajxp_confAccessDriver.php +++ b/core/src/plugins/access.ajxp_conf/class.ajxp_confAccessDriver.php @@ -1673,8 +1673,15 @@ public function switchAction($action, $httpVars, $fileVars) break; + + // Action for update all Pydio's user from ldap in CLI mode case "cli_update_user_list": - AuthService::listUsers(); + if((php_sapi_name() == "cli")){ + $progressBar = new AJXP_ProgressBarCLI(); + $countCallback = array($progressBar, "init"); + $loopCallback = array($progressBar, "update"); + AuthService::listUsers("/", null, -1 , -1, true, true, $countCallback, $loopCallback); + } break; default: diff --git a/core/src/plugins/auth.ldap/class.ldapAuthDriver.php b/core/src/plugins/auth.ldap/class.ldapAuthDriver.php index 611ee10b82..2ed7f61ab3 100644 --- a/core/src/plugins/auth.ldap/class.ldapAuthDriver.php +++ b/core/src/plugins/auth.ldap/class.ldapAuthDriver.php @@ -313,6 +313,14 @@ public function getUserEntries($login = null, $countOnly = false, $offset = -1, $gotAllEntries = false; $index = 0; + + //Update progress bar in CLI mode + $isListAll = (($offset == -1) && ($limit == -1) && (is_null($login)) && $regexpOnSearchAttr && (php_sapi_name() == "cli")); + if($isListAll){ + $progressBar = new AJXP_ProgressBarCLI(); + $progressBar->init($index, $this->getCountFromCache()["count"], "Get ldap users"); + } + do { if ($isSupportPagedResult) ldap_control_paged_result($this->ldapconn, $this->pageSize, true, $cookie); @@ -354,6 +362,12 @@ public function getUserEntries($login = null, $countOnly = false, $offset = -1, $allEntries[] = $entry; $index++; + + //Update progress bar in CLI mode + if(isset($progressBar)) + $progressBar->update($index); + + if (($offset != -1) && ($limit != -1) && $index > $offset + $limit) break; }