55 lines
1.1 KiB
PHP
55 lines
1.1 KiB
PHP
|
<?php
|
||
|
namespace nur\ldap;
|
||
|
|
||
|
use Iterator;
|
||
|
use nur\iter;
|
||
|
|
||
|
trait TLdapWalker {
|
||
|
function __construct(?LdapConn $conn=null, ?LdapSearch $search=null) {
|
||
|
parent::__construct(null, null, null, $conn);
|
||
|
if ($search !== null) $this->resetSearch($search);
|
||
|
}
|
||
|
|
||
|
/** @var LdapSearch */
|
||
|
protected $search;
|
||
|
|
||
|
function resetSearch(LdapSearch $search): ILdapWalker {
|
||
|
$this->close();
|
||
|
$this->reset(null, null, $search->getAttrs());
|
||
|
$this->search = $search;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/** @var Iterator */
|
||
|
protected $it;
|
||
|
|
||
|
protected function loadNext(): bool {
|
||
|
$it = $this->it;
|
||
|
if (!$it->valid()) {
|
||
|
$this->close();
|
||
|
return false;
|
||
|
}
|
||
|
$this->load($it->key(), $it->current());
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function next(?bool &$found=null): bool {
|
||
|
if ($this->it === null) {
|
||
|
$this->it = $this->search->getIterator();
|
||
|
$this->it->rewind();
|
||
|
$updateFound = true;
|
||
|
} else {
|
||
|
$this->it->next();
|
||
|
$updateFound = false;
|
||
|
}
|
||
|
$haveNext = $this->loadNext();
|
||
|
if ($updateFound) $found = $haveNext;
|
||
|
return $haveNext;
|
||
|
}
|
||
|
|
||
|
function close(): void {
|
||
|
iter::close($this->it);
|
||
|
$this->it = null;
|
||
|
}
|
||
|
}
|