Events
To modify the behavior of the connector bundle the following events are registered:
PersonUserItemPreEvent
This event allows to modify the identifier before a user is loaded from LDAP.
An event subscriber receives a \Dbp\Relay\BasePersonConnectorLdapBundle\Event\PersonUserItemPreEvent instance
in a service for example in src/EventSubscriber/PersonUserItemSubscriber.php:
<?php
namespace App\EventSubscriber;
use Dbp\Relay\BasePersonConnectorLdapBundle\Event\PersonUserItemPreEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PersonUserItemSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
PersonUserItemPreEvent::NAME => 'onPre',
];
}
public function onPre(PersonUserItemPreEvent $event)
{
$identifier = $event->getIdentifier();
// Example:
// Replace once or double encoded $ character at the start like "%2524F1234" or "%24F1234"
$identifier = preg_replace('/^%(25)?24/', '$', $identifier);
$event->setIdentifier($identifier);
}
}
PersonFromUserItemPostEvent
This event allows to modify a Person entity after it is created based on the data from the corresponding LDAP user.
You can use it to populate the Person entity with additional data.
For example, you can add additional "local data" attributes, which you want to include in responses to Person GET requests.
Event subscribers receive a \Dbp\Relay\BasePersonConnectorLdapBundle\Event\PersonFromUserItemPostEvent instance containing the Person entity and all user attributes returned by the LDAP server.
For example, create an event subscriber src/EventSubscriber/PersonFromUserItemSubscriber.php:
<?php
namespace App\EventSubscriber;
use Dbp\Relay\BasePersonConnectorLdapBundle\Event\PersonFromUserItemPostEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PersonFromUserItemSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
PersonFromUserItemPostEvent::NAME => 'onPost',
];
}
public function onPost(PersonFromUserItemPostEvent $event)
{
$attributes = $event->getAttributes();
$person = $event->getPerson();
$birthDateString = trim($attributes['dateofbirth'][0] ?? '');
if ($birthDateString !== '') {
$matches = [];
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $birthDateString, $matches)) {
$person->setBirthDate("{$matches[1]}-{$matches[2]}-{$matches[3]}");
// get birthday from LDAP DateOfBirth (e.g. 19810718)
} elseif (preg_match('/^(\d{4})(\d{2})(\d{2})$/', $birthDateString, $matches)) {
$person->setBirthDate("{$matches[1]}-{$matches[2]}-{$matches[3]}");
// sometimes also "1994-06-14 00:00:00"
} elseif (preg_match('/^(\d{4})-(\d{2})-(\d{2}) .*$/', $birthDateString, $matches)) {
$person->setBirthDate("{$matches[1]}-{$matches[2]}-{$matches[3]}");
}
}
$person->setExtraData('special_data', $attributes['some_special_attribute'] ?? '');
$person->trySetLocalDataAttribute('foo', $attributes['foo']);
}
}
And add it to your src/Resources/config/services.yaml:
App\EventSubscriber\PersonFromUserItemSubscriber:
autowire: true
autoconfigure: true