@ -6,6 +6,7 @@ declare(strict_types=1);
* @copyright Copyright (c) 2021 Arthur Schiwon < blizzz @ arthur-schiwon . de >
*
* @author Arthur Schiwon < blizzz @ arthur-schiwon . de >
* @author Côme Chilliet < come.chilliet @ nextcloud . com >
*
* @license GNU AGPL version 3 or any later version
*
@ -55,7 +56,7 @@ class UuidUpdateReport {
public $oldUuid = '';
public $newUuid = '';
public function __construct(string $id, string $dn, bool $isUser, int $state, $oldUuid = '', $newUuid = '') {
public function __construct(string $id, string $dn, bool $isUser, int $state, string $oldUuid = '', string $newUuid = '') {
$this->id = $id;
$this->dn = $dn;
$this->isUser = $isUser;
@ -74,7 +75,7 @@ class UpdateUUID extends Command {
private $userProxy;
/** @var Group_Proxy */
private $groupProxy;
/** @var array< UuidUpdateReport > */
/** @var array< UuidUpdateReport [ ] > */
protected $reports = [];
/** @var LoggerInterface */
private $logger;
@ -136,10 +137,14 @@ class UpdateUUID extends Command {
protected function execute(InputInterface $input, OutputInterface $output): int {
$this->dryRun = $input->getOption('dry-run');
$entriesToUpdates = $this->estimateNumberOfUpdates($input);
$progressBar = new ProgressBar($output);
$progressBar->iterate($this->handleUpdates($input), $entriesToUpdates);
$this->printReport($input, $output);
$entriesToUpdate = $this->estimateNumberOfUpdates($input);
$progress = new ProgressBar($output);
$progress->start($entriesToUpdate);
foreach($this->handleUpdates($input) as $_) {
$progress->advance();
}
$progress->finish();
$output->writeln('');
$this->printReport($output);
return count($this->reports[UuidUpdateReport::UNMAPPED]) === 0
& & count($this->reports[UuidUpdateReport::UNREADABLE]) === 0
@ -148,7 +153,7 @@ class UpdateUUID extends Command {
: 1;
}
protected function printReport(OutputInterface $output) {
protected function printReport(OutputInterface $output): void {
if ($output->isQuiet()) {
return;
}
@ -214,33 +219,37 @@ class UpdateUUID extends Command {
protected function handleUpdates(InputInterface $input): \Generator {
if ($input->getOption('all')) {
return $this->handleMappingBasedUpdates(false);
foreach($this->handleMappingBasedUpdates(false) as $_) {
yield;
}
} else if ($input->getOption('userId')
|| $input->getOption('groupId')
|| $input->getOption('dn')
) {
while ($this->handleUpdatesByUserId($input->getOption('userId'))) {
foreach ($this->handleUpdatesByUserId($input->getOption('userId')) as $_ ) {
yield;
}
while($this->handleUpdatesByUserId($input->getOption('groupId')) ) {
foreach($this->handleUpdatesByGroupId($input->getOption('groupId')) as $_ ) {
yield;
}
while ($this->handleUpdatesByDN($input->getOption('dn'))) {
foreach ($this->handleUpdatesByDN($input->getOption('dn')) as $_ ) {
yield;
}
} else {
return $this->handleMappingBasedUpdates(true);
foreach($this->handleMappingBasedUpdates(true) as $_) {
yield;
}
}
}
protected function handleUpdatesByUserId(array $userIds): \Generator {
while ($this->handleUpdatesByEntryId($userIds, $this->userMapping)) {
foreach ($this->handleUpdatesByEntryId($userIds, $this->userMapping) as $_ ) {
yield;
}
}
protected function handleUpdatesByGroupId(array $groupIds): \Generator {
while ($this->handleUpdatesByEntryId($groupIds, $this->groupMapping)) {
foreach ($this->handleUpdatesByEntryId($groupIds, $this->groupMapping) as $_ ) {
yield;
}
}
@ -263,10 +272,10 @@ class UpdateUUID extends Command {
$this->reports[UuidUpdateReport::UNMAPPED][] = new UuidUpdateReport('', $dn, true, UuidUpdateReport::UNMAPPED);
yield;
}
while ($this->handleUpdatesByList($this->userMapping, $userList)) {
foreach ($this->handleUpdatesByList($this->userMapping, $userList) as $_ ) {
yield;
}
while ($this->handleUpdatesByList($this->groupMapping, $groupList)) {
foreach ($this->handleUpdatesByList($this->groupMapping, $groupList) as $_ ) {
yield;
}
}
@ -284,7 +293,7 @@ class UpdateUUID extends Command {
$uuid = $mapping->getUUIDByDN($dn);
$list[] = ['name' => $id, 'uuid' => $uuid];
}
while($this->handleUpdatesByList($mapping, $list) ) {
foreach($this->handleUpdatesByList($mapping, $list) as $_ ) {
yield;
}
}
@ -347,7 +356,7 @@ class UpdateUUID extends Command {
}
}
protected function estimateNumberOfUpdates(InputInterface $input) {
protected function estimateNumberOfUpdates(InputInterface $input): int {
if ($input->getOption('all')) {
return $this->userMapping->count() + $this->groupMapping->count();
} else if ($input->getOption('userId')