Proposal: add enumeration function to IUserManager which simply calls a callbask for each user in all backends
This commit is contained in:
parent
fe67db1ad0
commit
6abc02cb88
|
@ -7,6 +7,7 @@ use OCA\DAV\CardDAV\Converter;
|
|||
use OCA\DAV\Connector\Sabre\Principal;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use Sabre\CardDAV\Plugin;
|
||||
use Sabre\VObject\Component\VCard;
|
||||
|
@ -69,28 +70,24 @@ class SyncSystemAddressBook extends Command {
|
|||
$output->writeln('Syncing users ...');
|
||||
$progress = new ProgressBar($output);
|
||||
$progress->start();
|
||||
$page = 0;
|
||||
foreach( $this->userManager->getBackends() as $backend) {
|
||||
$users = $backend->getUsers('', 50, $page++);
|
||||
foreach($users as $user) {
|
||||
$user = $this->userManager->get($user);
|
||||
$name = $user->getBackendClassName();
|
||||
$userId = $user->getUID();
|
||||
$this->userManager->callForAllUsers(function($user) use ($systemAddressBook, $converter, $progress) {
|
||||
/** @var IUser $user */
|
||||
$name = $user->getBackendClassName();
|
||||
$userId = $user->getUID();
|
||||
|
||||
$cardId = "$name:$userId.vcf";
|
||||
$card = $this->backend->getCard($systemAddressBook['id'], $cardId);
|
||||
if ($card === false) {
|
||||
$vCard = $converter->createCardFromUser($user);
|
||||
$this->backend->createCard($systemAddressBook['id'], $cardId, $vCard->serialize());
|
||||
} else {
|
||||
$vCard = Reader::read($card['carddata']);
|
||||
if ($converter->updateCard($vCard, $user)) {
|
||||
$this->backend->updateCard($systemAddressBook['id'], $cardId, $vCard->serialize());
|
||||
}
|
||||
$cardId = "$name:$userId.vcf";
|
||||
$card = $this->backend->getCard($systemAddressBook['id'], $cardId);
|
||||
if ($card === false) {
|
||||
$vCard = $converter->createCardFromUser($user);
|
||||
$this->backend->createCard($systemAddressBook['id'], $cardId, $vCard->serialize());
|
||||
} else {
|
||||
$vCard = Reader::read($card['carddata']);
|
||||
if ($converter->updateCard($vCard, $user)) {
|
||||
$this->backend->updateCard($systemAddressBook['id'], $cardId, $vCard->serialize());
|
||||
}
|
||||
$progress->advance();
|
||||
}
|
||||
}
|
||||
$progress->advance();
|
||||
});
|
||||
$progress->finish();
|
||||
$output->writeln('');
|
||||
}
|
||||
|
|
|
@ -294,21 +294,47 @@ class Manager extends PublicEmitter implements IUserManager {
|
|||
$userCountStatistics = array();
|
||||
foreach ($this->backends as $backend) {
|
||||
if ($backend->implementsActions(\OC_User_Backend::COUNT_USERS)) {
|
||||
$backendusers = $backend->countUsers();
|
||||
if($backendusers !== false) {
|
||||
$backendUsers = $backend->countUsers();
|
||||
if($backendUsers !== false) {
|
||||
if($backend instanceof \OCP\IUserBackend) {
|
||||
$name = $backend->getBackendName();
|
||||
} else {
|
||||
$name = get_class($backend);
|
||||
}
|
||||
if(isset($userCountStatistics[$name])) {
|
||||
$userCountStatistics[$name] += $backendusers;
|
||||
$userCountStatistics[$name] += $backendUsers;
|
||||
} else {
|
||||
$userCountStatistics[$name] = $backendusers;
|
||||
$userCountStatistics[$name] = $backendUsers;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $userCountStatistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* The callback is executed for each user on each backend.
|
||||
* If the callback returns false no further users will be retrieved.
|
||||
*
|
||||
* @param \Closure $callback
|
||||
* @return void
|
||||
* @since 9.0.0
|
||||
*/
|
||||
public function callForAllUsers(\Closure $callback, $search = '') {
|
||||
foreach($this->getBackends() as $backend) {
|
||||
$limit = 50;
|
||||
$offset = 0;
|
||||
do {
|
||||
$users = $backend->getUsers($search, $limit, $offset);
|
||||
foreach ($users as $user) {
|
||||
$user = $this->get($user);
|
||||
$return = $callback($user);
|
||||
if ($return === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$offset += $limit;
|
||||
} while (count($users) >= $limit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,4 +134,11 @@ interface IUserManager {
|
|||
* @since 8.0.0
|
||||
*/
|
||||
public function countUsers();
|
||||
|
||||
/**
|
||||
* @param \Closure $callback
|
||||
* @return void
|
||||
* @since 9.0.0
|
||||
*/
|
||||
public function callForAllUsers (\Closure $callback, $search = '');
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue