Skip to content
Snippets Groups Projects
DbpRelayBasePersonConnectorLdapExtension.php 2.35 KiB
Newer Older
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
<?php

declare(strict_types=1);

namespace Dbp\Relay\BasePersonConnectorLdapBundle\DependencyInjection;
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed

use Dbp\Relay\BasePersonConnectorLdapBundle\EventSubscriber\PersonEventSubscriber;
use Dbp\Relay\BasePersonConnectorLdapBundle\Service\LDAPApi;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;

class DbpRelayBasePersonConnectorLdapExtension extends ConfigurableExtension
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
{
    public function loadInternal(array $mergedConfig, ContainerBuilder $container)
    {
        $loader = new YamlFileLoader(
            $container,
            new FileLocator(__DIR__.'/../Resources/config')
        );
        $loader->load('services.yaml');

        $ldapCache = $container->register('dbp_api.cache.ldap_person_provider.ldap', FilesystemAdapter::class);
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
        $ldapCache->setArguments(['core-ldap', 360, '%kernel.cache_dir%/dbp/ldap-person-provider-ldap']);
        $ldapCache->setPublic(true);
        $ldapCache->addTag('cache.pool');

        $personCacheDef = $container->register('dbp_api.cache.ldap_person_provider.auth_person', FilesystemAdapter::class);
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
        $personCacheDef->setArguments(['core-auth-person', 60, '%kernel.cache_dir%/dbp/ldap-person-provider-auth-person']);
        $personCacheDef->addTag('cache.pool');

Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
        // Inject the config value into the UCardService service
        $definition = $container->getDefinition(LDAPApi::class);
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
        $definition->addMethodCall('setConfig', [$mergedConfig]);
        $definition->addMethodCall('setLDAPCache', [$ldapCache, 360]);
        $definition->addMethodCall('setPersonCache', [$personCacheDef]);
        $postEventSubscriber = $container->getDefinition(PersonEventSubscriber::class);
        $postEventSubscriber->addMethodCall('setConfig', [$mergedConfig]);
Bekerle, Patrizio's avatar
Bekerle, Patrizio committed
    }

    private function extendArrayParameter(ContainerBuilder $container, string $parameter, array $values)
    {
        if (!$container->hasParameter($parameter)) {
            $container->setParameter($parameter, []);
        }
        $oldValues = $container->getParameter($parameter);
        assert(is_array($oldValues));
        $container->setParameter($parameter, array_merge($oldValues, $values));
    }
}