Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 3c7ab37

Browse filesBrowse files
committed
Allow adding and removing values to/from multi-valued attributes
1 parent ee51f74 commit 3c7ab37
Copy full SHA for 3c7ab37

File tree

2 files changed

+87
-0
lines changed
Filter options

2 files changed

+87
-0
lines changed

‎src/Symfony/Component/Ldap/Adapter/ExtLdap/EntryManager.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Ldap/Adapter/ExtLdap/EntryManager.php
+41Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,47 @@ public function remove(Entry $entry)
6767
}
6868
}
6969

70+
/**
71+
* Adds values to an entry's multi-valued attribute from the Ldap server.
72+
*
73+
* @param Entry $entry
74+
* @param string $attribute
75+
* @param array $values
76+
*
77+
* @throws NotBoundException
78+
* @throws LdapException
79+
*/
80+
public function addAttributeValues(Entry $entry, string $attribute, array $values)
81+
{
82+
$con = $this->getConnectionResource();
83+
84+
if (!@ldap_mod_add($con, $entry->getDn(), array($attribute => $values))) {
85+
throw new LdapException(sprintf('Could not add values to entry "%s", attribute %s: %s', $entry->getDn(),
86+
$attribute, ldap_error($con)));
87+
}
88+
}
89+
90+
/**
91+
* Removes values from an entry's multi-valued attribute from the Ldap server.
92+
*
93+
* @param Entry $entry
94+
* @param string $attribute
95+
* @param array $values
96+
*
97+
* @throws NotBoundException
98+
* @throws LdapException
99+
*/
100+
public function removeAttributeValues(Entry $entry, string $attribute, array $values)
101+
{
102+
$con = $this->getConnectionResource();
103+
104+
if (!@ldap_mod_del($con, $entry->getDn(), array($attribute => $values))) {
105+
throw new LdapException(sprintf('Could not remove values from entry "%s", attribute %s: %s',
106+
$entry->getDn(),
107+
$attribute, ldap_error($con)));
108+
}
109+
}
110+
70111
/**
71112
* {@inheritdoc}
72113
*/

‎src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Ldap/Tests/Adapter/ExtLdap/LdapManagerTest.php
+46Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,4 +192,50 @@ public function testLdapRenameWithoutRemovingOldRdn()
192192

193193
$this->executeSearchQuery(1);
194194
}
195+
196+
public function testLdapAddRemoveAttributeValues()
197+
{
198+
$entryManager = $this->adapter->getEntryManager();
199+
200+
$result = $this->executeSearchQuery(1);
201+
$entry = $result[0];
202+
203+
$entryManager->addAttributeValues($entry, 'mail', array('fabpot@example.org', 'fabpot2@example.org'));
204+
205+
$result = $this->executeSearchQuery(1);
206+
$newEntry = $result[0];
207+
208+
$this->assertCount(4, $newEntry->getAttribute('mail'));
209+
210+
$entryManager->removeAttributeValues($newEntry, 'mail', array('fabpot@example.org', 'fabpot2@example.org'));
211+
212+
$result = $this->executeSearchQuery(1);
213+
$newNewEntry = $result[0];
214+
215+
$this->assertCount(2, $newNewEntry->getAttribute('mail'));
216+
}
217+
218+
public function testLdapRemoveAttributeValuesError()
219+
{
220+
$entryManager = $this->adapter->getEntryManager();
221+
222+
$result = $this->executeSearchQuery(1);
223+
$entry = $result[0];
224+
225+
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(LdapException::class);
226+
227+
$entryManager->removeAttributeValues($entry, 'mail', array('fabpot@example.org'));
228+
}
229+
230+
public function testLdapAddAttributeValuesError()
231+
{
232+
$entryManager = $this->adapter->getEntryManager();
233+
234+
$result = $this->executeSearchQuery(1);
235+
$entry = $result[0];
236+
237+
$this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(LdapException::class);
238+
239+
$entryManager->addAttributeValues($entry, 'mail', $entry->getAttribute('mail'));
240+
}
195241
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.