This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
lnldap/classes/Kohana/Database/LDAP/Search/Result.php
2014-07-18 12:35:27 +10:00

101 lines
2.3 KiB
PHP

<?php defined('SYSPATH') OR die('No direct script access.');
/**
* Return the query search result.
*
* @package Kohana/Database
* @category Query/Result
* @author Deon George
* @copyright (c) 2013 phpLDAPadmin Development Team
* @license http://dev.phpldapadmin.org/license.html
*/
abstract class Kohana_Database_LDAP_Search_Result implements ArrayAccess,Iterator,Countable {
private $_count = 0;
protected $result = array();
private $_rewound = FALSE;
private $_current_key = NULL;
/** Countable **/
public function count() {
$c = 0;
foreach ($this->result as $k=>$v)
$c += count($v);
return $c;
}
/** ArrayAccess **/
public function offsetExists($offset) {
return isset($this->result[$offset]);
}
public function offsetGet($offset) {
return $this->result[$offset];
}
public function offsetSet($offset,$value) {
if (isset($this->result[$offset]))
$this->_count -= $this->result[$offset]->count();
$this->result[$offset] = $value;
$this->_count += $value->count();
}
public function offsetUnset($offset) {
unset($this->result[$offset]);
}
/** Iterator **/
public function current() {
if (! $this->_rewound)
$this->rewind();
return current($this->result)->current();
}
public function key() {
return current($this->result)->key();
}
public function next() {
// If our current entry has more valid entries, skip to the next one.
if (current($this->result)->valid() AND current($this->result)->next()->valid())
return current($this->result);
// Skip to our next record
next($this->result);
// If the next record is invalid, keep jumping to find a valid record
while (current($this->result) AND ! current($this->result)->valid())
if (next($this->result) === FALSE)
break;
// Rewind our current record
if (is_object($this->result))
current($this->result)->rewind();
return current($this->result);
}
public function rewind() {
is_resource($this->result) ? rewind($this->result) : reset($this->result);
current($this->result)->rewind();
// If our current record is invalid, skip to the next one.
if (! current($this->result)->valid())
$this->next(FALSE);
$this->_rewound = TRUE;
}
public function valid() {
return is_object(current($this->result)) ? current($this->result)->valid() : FALSE;
}
} // End Database_LDAP_Search_Result
?>