8000 Allow adding and removing values to/from multi-valued attributes · symfony/symfony@bbfd783 · GitHub
[go: up one dir, main page]

Skip to content
Sign in

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 bbfd783

Browse files
committed
Allow adding and removing values to/from multi-valued attributes
1 parent ee51f74 commit bbfd783

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,36 @@ 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+
* @throws NotBoundException
74+
* @throws LdapException
75+
*/
76+
public function addAttributeValues(Entry $entry, string $attribute, array $values)
77+
{
78+
$con = $this->getConnectionResource();
79+
80+
if (!@ldap_mod_add($con, $entry->getDn(), array($attribute => $values))) {
81+
throw new LdapException(sprintf('Could not add values to entry "%s", attribute %s: %s.', $entry->getDn(), $attribute, ldap_error($con)));
82+
}
83+
}
84+
85+
/**
86+
* Removes values from an entry's multi-valued attribute from the LDAP server.
87+
*
88+
* @throws NotBoundException
89+
* @throws LdapException
90+
*/
91+
public function removeAttributeValues(Entry $entry, string $attribute, array $values)
92+
{
93+
$con = $this->getConnectionResource();
94+
95+
if (!@ldap_mod_del($con, $entry->getDn(), array($attribute => $values))) {
96+
throw new LdapException(sprintf('Could not remove values from entry "%s", attribute %s: %s.', $entry->getDn(), $attribute, ldap_error($con)));
97+
}
98+
}
99+
70100
/**
71101
* {@inheritdoc}
72102
*/

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

Lines 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