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;
 | 
						|
  }
 | 
						|
}
 |