parent
876d281cd6
commit
33c6f2e06b
|
@ -714,10 +714,29 @@ class LdapConnection implements Selectable, Inspectable
|
||||||
do {
|
do {
|
||||||
$count += 1;
|
$count += 1;
|
||||||
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
||||||
$entries[ldap_get_dn($ds, $entry)] = $this->cleanupAttributes(
|
$row = $this->cleanupAttributes(
|
||||||
ldap_get_attributes($ds, $entry),
|
ldap_get_attributes($ds, $entry),
|
||||||
array_flip($fields)
|
array_flip($fields),
|
||||||
|
$query->getUnfoldAttribute()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (is_array($row)) {
|
||||||
|
// TODO: Register the DN the same way as a section name in the ArrayDatasource!
|
||||||
|
|
||||||
|
$count -= 1;
|
||||||
|
foreach ($row as $additionalRow) {
|
||||||
|
$count += 1;
|
||||||
|
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
||||||
|
$entries[] = $additionalRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($serverSorting && $limit > 0 && $limit === count($entries)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$entries[ldap_get_dn($ds, $entry)] = $row;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while ((! $serverSorting || $limit === 0 || $limit !== count($entries))
|
} while ((! $serverSorting || $limit === 0 || $limit !== count($entries))
|
||||||
&& ($entry = ldap_next_entry($ds, $entry))
|
&& ($entry = ldap_next_entry($ds, $entry))
|
||||||
|
@ -828,10 +847,29 @@ class LdapConnection implements Selectable, Inspectable
|
||||||
do {
|
do {
|
||||||
$count += 1;
|
$count += 1;
|
||||||
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
||||||
$entries[ldap_get_dn($ds, $entry)] = $this->cleanupAttributes(
|
$row = $this->cleanupAttributes(
|
||||||
ldap_get_attributes($ds, $entry),
|
ldap_get_attributes($ds, $entry),
|
||||||
array_flip($fields)
|
array_flip($fields),
|
||||||
|
$query->getUnfoldAttribute()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (is_array($row)) {
|
||||||
|
// TODO: Register the DN the same way as a section name in the ArrayDatasource!
|
||||||
|
|
||||||
|
$count -= 1;
|
||||||
|
foreach ($row as $additionalRow) {
|
||||||
|
$count += 1;
|
||||||
|
if (! $serverSorting || $offset === 0 || $offset < $count) {
|
||||||
|
$entries[] = $additionalRow;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($serverSorting && $limit > 0 && $limit === count($entries)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$entries[ldap_get_dn($ds, $entry)] = $row;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} while (
|
} while (
|
||||||
(! $serverSorting || $limit === 0 || $limit !== count($entries))
|
(! $serverSorting || $limit === 0 || $limit !== count($entries))
|
||||||
|
@ -879,14 +917,16 @@ class LdapConnection implements Selectable, Inspectable
|
||||||
/**
|
/**
|
||||||
* Clean up the given attributes and return them as simple object
|
* Clean up the given attributes and return them as simple object
|
||||||
*
|
*
|
||||||
* Applies column aliases, aggregates multi-value attributes as array and sets null for each missing attribute.
|
* Applies column aliases, aggregates/unfolds multi-value attributes
|
||||||
|
* as array and sets null for each missing attribute.
|
||||||
*
|
*
|
||||||
* @param array $attributes
|
* @param array $attributes
|
||||||
* @param array $requestedFields
|
* @param array $requestedFields
|
||||||
|
* @param string $unfoldAttribute
|
||||||
*
|
*
|
||||||
* @return object
|
* @return object|array An array in case the object has been unfolded
|
||||||
*/
|
*/
|
||||||
public function cleanupAttributes($attributes, array $requestedFields)
|
public function cleanupAttributes($attributes, array $requestedFields, $unfoldAttribute = null)
|
||||||
{
|
{
|
||||||
// In case the result contains attributes with a differing case than the requested fields, it is
|
// In case the result contains attributes with a differing case than the requested fields, it is
|
||||||
// necessary to create another array to map attributes case insensitively to their requested counterparts.
|
// necessary to create another array to map attributes case insensitively to their requested counterparts.
|
||||||
|
@ -927,6 +967,24 @@ class LdapConnection implements Selectable, Inspectable
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
$unfoldAttribute !== null
|
||||||
|
&& isset($cleanedAttributes[$unfoldAttribute])
|
||||||
|
&& is_array($cleanedAttributes[$unfoldAttribute])
|
||||||
|
) {
|
||||||
|
$values = $cleanedAttributes[$unfoldAttribute];
|
||||||
|
unset($cleanedAttributes[$unfoldAttribute]);
|
||||||
|
$baseRow = (object) $cleanedAttributes;
|
||||||
|
$rows = array();
|
||||||
|
foreach ($values as $value) {
|
||||||
|
$row = clone $baseRow;
|
||||||
|
$row->{$unfoldAttribute} = $value;
|
||||||
|
$rows[] = $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $rows;
|
||||||
|
}
|
||||||
|
|
||||||
return (object) $cleanedAttributes;
|
return (object) $cleanedAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,13 @@ class LdapQuery extends SimpleQuery
|
||||||
*/
|
*/
|
||||||
protected $usePagedResults;
|
protected $usePagedResults;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the attribute used to unfold the result
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $unfoldAttribute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize this query
|
* Initialize this query
|
||||||
*/
|
*/
|
||||||
|
@ -90,6 +97,29 @@ class LdapQuery extends SimpleQuery
|
||||||
return $this->usePagedResults;
|
return $this->usePagedResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the attribute to be used to unfold the result
|
||||||
|
*
|
||||||
|
* @param string $attributeName
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setUnfoldAttribute($attributeName)
|
||||||
|
{
|
||||||
|
$this->unfoldAttribute = $attributeName;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the attribute to use to unfold the result
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUnfoldAttribute()
|
||||||
|
{
|
||||||
|
return $this->unfoldAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Choose an objectClass and the columns you are interested in
|
* Choose an objectClass and the columns you are interested in
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue