nur-sery/nur_src/ldap/TLdapWalker.php

55 lines
1.1 KiB
PHP
Raw Permalink Normal View History

2024-04-04 22:21:20 +04:00
<?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;
}
}