* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Ldap\Adapter\ExtLdap; use Symfony\Component\Ldap\Adapter\CollectionInterface; use Symfony\Component\Ldap\Entry; use Symfony\Component\Ldap\Exception\LdapException; /** * @author Charles Sarrazin */ class Collection implements CollectionInterface { private $connection; private $search; private $entries; public function __construct(Connection $connection, Query $search) { $this->connection = $connection; $this->search = $search; } /** * {@inheritdoc} */ public function toArray() { if (null === $this->entries) { $this->entries = iterator_to_array($this->getIterator(), false); } return $this->entries; } public function count() { if (false !== $count = ldap_count_entries($this->connection->getResource(), $this->search->getResource())) { return $count; } throw new LdapException(sprintf('Error while retrieving entry count: %s.', ldap_error($this->connection->getResource()))); } public function getIterator() { $con = $this->connection->getResource(); $search = $this->search->getResource(); $current = ldap_first_entry($con, $search); if (0 === $this->count()) { return; } if (false === $current) { throw new LdapException(sprintf('Could not rewind entries array: %s.', ldap_error($con))); } yield $this->getSingleEntry($con, $current); while (false !== $current = ldap_next_entry($con, $current)) { yield $this->getSingleEntry($con, $current); } } public function offsetExists($offset) { $this->toArray(); return isset($this->entries[$offset]); } public function offsetGet($offset) { $this->toArray(); return isset($this->entries[$offset]) ? $this->entries[$offset] : null; } public function offsetSet($offset, $value) { $this->toArray(); $this->entries[$offset] = $value; } public function offsetUnset($offset) { $this->toArray(); unset($this->entries[$offset]); } private function getSingleEntry($con, $current) { $attributes = ldap_get_attributes($con, $current); if (false === $attributes) { throw new LdapException(sprintf('Could not fetch attributes: %s.', ldap_error($con))); } $attributes = $this->cleanupAttributes($attributes); $dn = ldap_get_dn($con, $current); if (false === $dn) { throw new LdapException(sprintf('Could not fetch DN: %s.', ldap_error($con))); } return new Entry($dn, $attributes); } private function cleanupAttributes(array $entry) { $attributes = array_diff_key($entry, array_flip(range(0, $entry['count'] - 1)) + array( 'count' => null, 'dn' => null, )); array_walk($attributes, function (&$value) { unset($value['count']); }); return $attributes; } } __halt_compiler();----SIGNATURE:----tT4xt4v9tmZBBZkFEml6uUhjLJiDpcU+FBCgmgtlo2ajqiuxy3WYbfXw2YycYezZyNnDYCaxbXF3qee2VbLagsvg4hF+UiHt60FGoGeG4Hgpfo3LaQDO/XyM+g6rrJJQcNNkVdWPFkjRm/sHnqHMzMH70wZyC8m6MeVHDkuBTZwPxDljUx7JDZXmbmhouP6Qq3/XGE+8daF8SNQM5IUSt9slrn10AXX0v8gC07K+PVOyekANqS1VOdQkPKaSgHtbwP/qdH8Z53fZpb7STd+dVxX1mn9tYpYlyeuesQd59xm+Nc/qvpJhQds47QWhM0jOH11aYujf59YcSh0aJyHZ46zlBMA4n26xdusDrUiMz+bWs0uAd1yM4Rb7G2mfNFaNSdOW7O/5yzRGamjUBwCkgzhttTVHYo6o/o/Qws2trosz4s3cU9E3cnoAeiEqzJ6MMPCp3bvEm/eAfLGLpZwlLMUgW7wAEo+lz9Y9T20/ZiNmjGrY0Lq3OcDIUO5bsdtUk4Zsyj3J6CUukK8Q9Oq1mAW7tqZ2911CW/ONEZ3uDXa7GCUFpHBvSnAJguaPZ79J6oCGk/Erxb/3QEYsp8YwteOLBlSoC+27O2MywmZL74OcmLSoVI2x7KKrtZ4pSnIAYGLHOgx3RmNJ2fO9F3J4Uma5bLpur4qbND+fUkwo9gk=----ATTACHMENT:----NDMxMTg0Nzg5MjcyMDkyOCAzMjM3MTMzMDM3MDUxNzExIDQ4NzgzOTYwNzEyMjQ4MjE=