LdapEntryDeletionSubscriber.php in Lightweight Directory Access Protocol (LDAP) 8.4
File
ldap_user/src/EventSubscriber/LdapEntryDeletionSubscriber.php
View source
<?php
declare (strict_types=1);
namespace Drupal\ldap_user\EventSubscriber;
use Drupal\Core\Config\ConfigFactory;
use Drupal\ldap_servers\LdapUserAttributesInterface;
use Drupal\ldap_servers\LdapUserManager;
use Drupal\ldap_user\Event\LdapUserDeletedEvent;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LdapEntryDeletionSubscriber implements EventSubscriberInterface, LdapUserAttributesInterface {
protected $config;
protected $logger;
protected $ldapUserManager;
public function __construct(ConfigFactory $config_factory, LoggerInterface $logger, LdapUserManager $ldap_user_manager) {
$this->config = $config_factory
->get('ldap_user.settings');
$this->logger = $logger;
$this->ldapUserManager = $ldap_user_manager;
}
public static function getSubscribedEvents() : array {
$events[LdapUserDeletedEvent::EVENT_NAME] = [
'deleteProvisionedLdapEntry',
];
return $events;
}
public function deleteProvisionedLdapEntry(LdapUserDeletedEvent $event) : void {
if ($this->config
->get('ldapEntryProvisionServer') && \in_array(self::PROVISION_LDAP_ENTRY_ON_USER_ON_USER_DELETE, $this->config
->get('ldapEntryProvisionTriggers'), TRUE)) {
$account = $event->account;
$entries = $account
->get('ldap_user_prov_entries')
->getValue();
foreach ($entries as $entry) {
$parts = explode('|', $entry['value']);
if (count($parts) === 2) {
[
$sid,
$dn,
] = $parts;
$tokens = [
'%sid' => $sid,
'%dn' => $dn,
'%username' => $account
->getAccountName(),
'%uid' => $account
->id(),
];
if ($this->ldapUserManager
->setServerById($sid) && $dn) {
if ($this->ldapUserManager
->deleteLdapEntry($dn)) {
$this->logger
->info('LDAP entry on server %sid deleted dn=%dn. username=%username, uid=%uid', $tokens);
}
}
else {
$this->logger
->warning("LDAP server %sid not available, cannot delete record '%dn.'", $tokens);
}
}
}
}
}
}