\Horde_Ldap_Entry

Horde_Ldap_Entry represents an LDAP entry.

Copyright 2003-2007 Tarjej Huse, Jan Wagner, Benedikt Hallinger Copyright 2009-2017 Horde LLC (http://www.horde.org/)

Summary

Methods
Properties
Constants
createFresh()
createConnected()
createExisting()
dn()
getValues()
getValue()
attributes()
exists()
add()
delete()
replace()
update()
getLDAP()
setLDAP()
markAsNew()
pregMatch()
isNew()
willBeDeleted()
willBeMoved()
currentDN()
getChanges()
No public properties found
No constants found
__construct()
_loadAttributes()
_getAttrName()
$_entry
$_link
$_ldap
$_dn
$_attributes
$_original
$_map
$_new
$_newdn
$_delete
$_changes
N/A
No private methods found
No private properties found
N/A

Properties

$_entry

$_entry : resource

Entry resource identifier.

Type

resource

$_link

$_link : resource

LDAP resource identifier.

Type

resource

$_ldap

$_ldap : \Horde_Ldap

Horde_Ldap object.

This object will be used for updating and schema checking.

Type

\Horde_Ldap

$_dn

$_dn : string

Distinguished name of the entry.

Type

string

$_attributes

$_attributes : array

Attributes.

Type

array

$_original

$_original : array

Original attributes before any modification.

Type

array

$_map

$_map : array

Map of attribute names.

Type

array

$_new

$_new : boolean

Is this a new entry?

Type

boolean

$_newdn

$_newdn : string

New distinguished name.

Type

string

$_delete

$_delete : boolean

Shall the entry be deleted?

Type

boolean

$_changes

$_changes : array

Map with changes to the entry.

Type

array

Methods

createFresh()

createFresh(string  $dn, array  $attrs = array()) : \Horde_Ldap_Entry

Creates a fresh entry that may be added to the directory later.

You should put a 'objectClass' attribute into the $attrs so the directory server knows which object you want to create. However, you may omit this in case you don't want to add this entry to a directory server.

The attributes parameter is as following: $attrs = array('attribute1' => array('value1', 'value2'), 'attribute2' => 'single value');

Parameters

string $dn

DN of the entry.

array $attrs

Attributes of the entry.

Throws

\Horde_Ldap_Exception

Returns

\Horde_Ldap_Entry

createConnected()

createConnected(\Horde_Ldap  $ldap, resource  $entry) : \Horde_Ldap_Entry

Creates an entry object out of an LDAP entry resource.

Use this method, if you want to initialize an entry object that is already present in some directory and that you have read manually.

Parameters

\Horde_Ldap $ldap

Horde_Ldap object.

resource $entry

PHP LDAP entry resource.

Throws

\Horde_Ldap_Exception

Returns

\Horde_Ldap_Entry

createExisting()

createExisting(string  $dn, array  $attrs = array()) : \Horde_Ldap_Entry

Creates an entry object that is considered to exist already.

Use this method, if you want to modify an already existing entry without fetching it first. In most cases however, it is better to fetch the entry via Horde_Ldap::getEntry().

You should take care if you construct entries manually with this because you may get weird synchronisation problems. The attributes and values as well as the entry itself are considered existent which may produce errors if you try to modify an entry which doesn't really exist or if you try to overwrite some attribute with an value already present.

The attributes parameter is as following: $attrs = array('attribute1' => array('value1', 'value2'), 'attribute2' => 'single value');

Parameters

string $dn

DN of the entry.

array $attrs

Attributes of the entry.

Throws

\Horde_Ldap_Exception

Returns

\Horde_Ldap_Entry

dn()

dn(string  $dn = null) : string

Returns or sets the distinguished name of the entry.

If called without an argument the current (or the new DN if set) DN gets returned.

If you provide an DN, this entry is moved to the new location specified if a DN existed.

If the DN was not set, the DN gets initialized. Call \update() to actually create the new entry in the directory.

To fetch the current active DN after setting a new DN but before an update(), you can use \currentDN() to retrieve the DN that is currently active.

Parameters

string $dn

New distinguished name.

Returns

string —

Distinguished name.

getValues()

getValues() : array

Returns the values of all attributes in a hash.

The returned hash has the form array('attributename' => 'single value', 'attributename' => array('value1', value2', value3'))

Throws

\Horde_Ldap_Exception

Returns

array —

Hash of all attributes with their values.

getValue()

getValue(string  $attr, string  $option = null) : string|array

Returns the value of a specific attribute.

The first parameter is the name of the attribute.

The second parameter influences the way the value is returned:

  • 'single': only the first value is returned as string.
  • 'all': all values are returned in an array. In all other cases an attribute value with a single value is returned as string, if it has multiple values it is returned as an array.

Parameters

string $attr

Attribute name.

string $option

Option.

Throws

\Horde_Ldap_Exception

Returns

string|array —

Attribute value(s).

attributes()

attributes() : array

Returns an array of attributes names.

Returns

array —

Array of attribute names.

exists()

exists(string  $attr) : boolean

Returns whether an attribute exists or not.

Parameters

string $attr

Attribute name.

Returns

boolean —

True if the attribute exists.

add()

add(array  $attr = array()) 

Adds new attributes or a new values to existing attributes.

The paramter has to be an array of the form: array('attributename' => 'single value', 'attributename' => array('value1', 'value2'))

When the attribute already exists the values will be added, otherwise the attribute will be created. These changes are local to the entry and do not affect the entry on the server until update() is called.

You can add values of attributes that you haven't originally selected, but if you do so, \getValue() and \getValues() will only return the values you added, NOT all values present on the server. To avoid this, just refetch the entry after calling \update() or select the attribute.

Parameters

array $attr

Attributes to add.

delete()

delete(string|array  $attr = null) 

Deletes an attribute, a value or the whole entry.

The parameter can be one of the following:

  • 'attributename': the attribute as a whole will be deleted.
  • array('attributename1', 'attributename2'): all specified attributes will be deleted.
  • array('attributename' => 'value'): the specified attribute value will be deleted.
  • array('attributename' => array('value1', 'value2'): The specified attribute values will be deleted.
  • null: the whole entry will be deleted.

These changes are local to the entry and do not affect the entry on the server until \update() is called.

You must select the attribute (at $ldap->search() for example) to be able to delete values of it, Otherwise \update() will silently fail and remove nothing.

Parameters

string|array $attr

Attributes to delete.

replace()

replace(array  $attr = array(), boolean  $force = false) 

Replaces attributes or their values.

The parameter has to an array of the following form: array('attributename' => 'single value', 'attribute2name' => array('value1', 'value2'), 'deleteme1' => null, 'deleteme2' => '')

If the attribute does not yet exist it will be added instead (see also $force). If the attribue value is null, the attribute will de deleted.

These changes are local to the entry and do not affect the entry on the server until \update() is called.

In some cases you are not allowed to read the attributes value (for example the ActiveDirectory attribute unicodePwd) but are allowed to replace the value. In this case replace() would assume that the attribute is not in the directory yet and tries to add it which will result in an LDAP_TYPE_OR_VALUE_EXISTS error. To force replace mode instead of add, you can set $force to true.

Parameters

array $attr

Attributes to replace.

boolean $force

Force replacing mode in case we can't read the attribute value but are allowed to replace it.

update()

update() 

Updates the entry on the directory server.

This will evaluate all changes made so far and send them to the directory server.

If you make changes to objectclasses wich have mandatory attributes set, update() will currently fail. Remove the entry from the server and readd it as new in such cases. This also will deal with problems with setting structural object classes.

Throws

\Horde_Ldap_Exception

getLDAP()

getLDAP() : \Horde_Ldap

Returns a reference to the LDAP-Object of this entry.

Throws

\Horde_Ldap_Exception

Returns

\Horde_Ldap

Reference to the Horde_Ldap object (the connection).

setLDAP()

setLDAP(\Horde_Ldap  $ldap) 

Sets a reference to the LDAP object of this entry.

After setting a Horde_Ldap object, calling update() will use that object for updating directory contents. Use this to dynamicly switch directories.

Parameters

\Horde_Ldap $ldap

Horde_Ldap object that this entry should be connected to.

Throws

\Horde_Ldap_Exception

markAsNew()

markAsNew(boolean  $mark = true) 

Marks the entry as new or existing.

If an entry is marked as new, it will be added to the directory when calling \update().

If the entry is marked as old ($mark = false), then the entry is assumed to be present in the directory server wich results in modification when calling \update().

Parameters

boolean $mark

Whether to mark the entry as new.

pregMatch()

pregMatch(string  $regex, string  $attr_name, array  $matches = array()) : boolean

Applies a regular expression onto a single- or multi-valued attribute (like preg_match()).

This method behaves like PHP's preg_match() but with some exception. Since it is possible to have multi valued attributes the $matches array will have a additionally numerical dimension (one for each value): $matches = array( 0 => array (usual preg_match() returned array), 1 => array (usual preg_match() returned array) ) $matches will always be initialized to an empty array inside.

Usage example: try { if ($entry->pregMatch('/089(\d+)/', 'telephoneNumber', $matches)) { // Match of value 1, content of first bracket echo 'First match: ' . $matches[0][1]; } else { echo 'No match found.'; } } catch (Horde_Ldap_Exception $e) { echo 'Error: ' . $e->getMessage(); }

Parameters

string $regex

The regular expression.

string $attr_name

The attribute to search in.

array $matches

Array to store matches in.

Throws

\Horde_Ldap_Exception

Returns

boolean —

True if we had a match in one of the values.

isNew()

isNew() : boolean

Returns whether the entry is considered new (not present in the server).

This method doesn't tell you if the entry is really not present on the server. Use Horde_Ldap::exists() to see if an entry is already there.

Returns

boolean —

True if this is considered a new entry.

willBeDeleted()

willBeDeleted() : boolean

Is this entry going to be deleted once update() is called?

Returns

boolean —

True if this entry is going to be deleted.

willBeMoved()

willBeMoved() : boolean

Is this entry going to be moved once update() is called?

Returns

boolean —

True if this entry is going to be move.

currentDN()

currentDN() : string

Returns always the original DN.

If an entry will be moved but \update() was not called, {@link dn()} will return the new DN. This method however, returns always the current active DN.

Returns

string —

The current DN

getChanges()

getChanges() : array

Returns the attribute changes to be carried out once update() is called.

Returns

array —

The due changes.

__construct()

__construct(\Horde_Ldap|resource|array  $ldap, string|resource  $entry = null) 

Constructor.

Sets up the distinguished name and the entries attributes.

Use Horde_Ldap_Entry::createFresh() or {@link Horde_Ldap_Entry::createConnected()} to create Horde_Ldap_Entry objects.

Parameters

\Horde_Ldap|resource|array $ldap

Horde_Ldap object, LDAP connection resource or array of attributes.

string|resource $entry

Either a DN or a LDAP entry resource.

_loadAttributes()

_loadAttributes(array  $attributes = null) 

Sets the internal attributes array.

This method fetches the values for the attributes from the server. The attribute syntax will be checked so binary attributes will be returned as binary values.

Attributes may be passed directly via the $attributes parameter to setup this entry manually. This overrides attribute fetching from the server.

Parameters

array $attributes

Attributes to set for this entry.

_getAttrName()

_getAttrName(string  $attr) : string

Returns the right attribute name.

Parameters

string $attr

Name of attribute.

Returns

string —

The right name of the attribute