vendor/sulu/sulu/src/Sulu/Bundle/DocumentManagerBundle/DependencyInjection/SuluDocumentManagerExtension.php line 28

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Sulu.
  4.  *
  5.  * (c) Sulu GmbH
  6.  *
  7.  * This source file is subject to the MIT license that is bundled
  8.  * with this source code in the file LICENSE.
  9.  */
  10. namespace Sulu\Bundle\DocumentManagerBundle\DependencyInjection;
  11. use Sulu\Bundle\DocumentManagerBundle\DataFixtures\DocumentFixtureInterface;
  12. use Sulu\Bundle\DocumentManagerBundle\Session\Session;
  13. use Sulu\Component\DocumentManager\Subscriber\EventSubscriberInterface;
  14. use Sulu\Component\HttpKernel\SuluKernel;
  15. use Symfony\Component\Config\FileLocator;
  16. use Symfony\Component\DependencyInjection\ContainerBuilder;
  17. use Symfony\Component\DependencyInjection\Definition;
  18. use Symfony\Component\DependencyInjection\Extension\Extension;
  19. use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
  20. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  21. use Symfony\Component\DependencyInjection\Reference;
  22. class SuluDocumentManagerExtension extends Extension implements PrependExtensionInterface
  23. {
  24.     public function prepend(ContainerBuilder $container)
  25.     {
  26.         $preview $container->hasParameter('sulu.preview') ? $container->getParameter('sulu.preview') : false;
  27.         $context $container->getParameter('sulu.context');
  28.         $configs $container->getExtensionConfig($this->getAlias());
  29.         $parameterBag $container->getParameterBag();
  30.         $configs $parameterBag->resolveValue($configs);
  31.         $config $this->processConfiguration(new Configuration(), $configs);
  32.         // FIXME: The entire foreach can be removed when upgrading to DoctrinePhpcrBundle 1.3
  33.         // see https://github.com/doctrine/DoctrinePHPCRBundle/issues/178
  34.         foreach ($config['sessions'] as &$session) {
  35.             if (isset($session['backend'])) {
  36.                 $session['backend']['check_login_on_server'] = false;
  37.             }
  38.         }
  39.         $liveSession 'live';
  40.         if (isset($config['live_session'])) {
  41.             $liveSession $config['live_session'];
  42.         }
  43.         $defaultSession 'default';
  44.         if (!$preview && isset($config['default_session'])) {
  45.             $defaultSession $config['default_session'];
  46.         }
  47.         if (!$preview && SuluKernel::CONTEXT_WEBSITE === $context) {
  48.             $defaultSession $liveSession;
  49.         }
  50.         $container->prependExtensionConfig(
  51.             'sulu_document_manager',
  52.             [
  53.                 'default_session' => $defaultSession,
  54.                 'live_session' => $liveSession,
  55.             ]
  56.         );
  57.         if ($container->hasExtension('doctrine_phpcr')) {
  58.             $doctrinePhpcrConfig = [
  59.                 'session' => [
  60.                     'sessions' => $config['sessions'],
  61.                 ],
  62.             ];
  63.             $doctrinePhpcrConfig['session']['default_session'] = $defaultSession;
  64.             $container->prependExtensionConfig(
  65.                 'doctrine_phpcr',
  66.                 $doctrinePhpcrConfig
  67.             );
  68.         }
  69.         if ($container->hasExtension('jms_serializer')) {
  70.             $container->prependExtensionConfig(
  71.                 'jms_serializer',
  72.                 [
  73.                     'metadata' => [
  74.                         'directories' => [
  75.                             [
  76.                                 'name' => 'sulu_document_manager',
  77.                                 'path' => __DIR__ '/../Resources/config/serializer',
  78.                                 'namespace_prefix' => 'Sulu\Component\DocumentManager',
  79.                             ],
  80.                         ],
  81.                     ],
  82.                 ]
  83.             );
  84.         }
  85.         if ($container->hasExtension('fos_rest')) {
  86.             $container->prependExtensionConfig(
  87.                 'fos_rest',
  88.                 [
  89.                     'exception' => [
  90.                         'codes' => [
  91.                             'Sulu\Component\DocumentManager\Exception\DocumentNotFoundException' => 404,
  92.                             'Sulu\Component\DocumentManager\Exception\VersionNotFoundException' => 404,
  93.                             'Sulu\Component\Content\Exception\MandatoryPropertyException' => 400,
  94.                         ],
  95.                     ],
  96.                 ]
  97.             );
  98.         }
  99.     }
  100.     public function load(array $configsContainerBuilder $container)
  101.     {
  102.         $configuration = new Configuration();
  103.         $config $this->processConfiguration($configuration$configs);
  104.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__ '/../Resources/config'));
  105.         $this->configureDocumentManager($config$container);
  106.         $this->configurePathSegmentRegistry($config$container);
  107.         $loader->load('core.xml');
  108.         $loader->load('behaviors.xml');
  109.         $loader->load('serializer.xml');
  110.         $loader->load('command.xml');
  111.         $loader->load('data_fixtures.xml');
  112.         $loader->load('routing.xml');
  113.         if ($config['versioning']['enabled']) {
  114.             $loader->load('versioning.xml');
  115.         }
  116.     }
  117.     private function configureDocumentManager($configContainerBuilder $container)
  118.     {
  119.         $debug $config['debug'];
  120.         $dispatcherId $debug 'sulu_document_manager.event_dispatcher.debug' 'sulu_document_manager.event_dispatcher.standard';
  121.         $container->setAlias('sulu_document_manager.event_dispatcher'$dispatcherId);
  122.         $realMapping = [];
  123.         foreach ($config['mapping'] as $alias => $mapping) {
  124.             $realMapping[] = \array_merge([
  125.                 'alias' => $alias,
  126.             ], $mapping);
  127.         }
  128.         $container->setParameter('sulu_document_manager.mapping'$realMapping);
  129.         $container->setParameter('sulu_document_manager.namespace_mapping'$config['namespace']);
  130.         $container->setParameter('sulu_document_manager.versioning.enabled'$config['versioning']['enabled']);
  131.         $defaultSessionId $this->getSessionServiceId($config['default_session']);
  132.         $container->setAlias(
  133.             'sulu_document_manager.default_session',
  134.             $defaultSessionId
  135.         )->setPublic(true);
  136.         $defaultSessionDefinition = new Definition(Session::class, [new Reference('sulu_document_manager.decorated_default_session.inner')]);
  137.         $defaultSessionDefinition->setDecoratedService($defaultSessionId);
  138.         $container->setDefinition('sulu_document_manager.decorated_default_session'$defaultSessionDefinition);
  139.         $liveSessionId $this->getSessionServiceId($config['live_session']);
  140.         $container->setAlias(
  141.             'sulu_document_manager.live_session',
  142.             $liveSessionId
  143.         )->setPublic(true);
  144.         $liveSessionDefinition = new Definition(Session::class, [new Reference('sulu_document_manager.decorated_live_session.inner')]);
  145.         $liveSessionDefinition->setDecoratedService($liveSessionId);
  146.         $container->setDefinition('sulu_document_manager.decorated_live_session'$liveSessionDefinition);
  147.         $container->setParameter(
  148.             'sulu_document_manager.show_drafts',
  149.             SuluKernel::CONTEXT_ADMIN === $container->getParameter('sulu.context')
  150.             || ($container->hasParameter('sulu.preview') && $container->getParameter('sulu.preview'))
  151.         );
  152.         $container->setParameter('sulu_document_manager.slugifier'$config['slugifier']);
  153.         $container->registerForAutoconfiguration(DocumentFixtureInterface::class)
  154.             ->addTag('sulu.document_manager_fixture');
  155.         $container->registerForAutoconfiguration(EventSubscriberInterface::class)
  156.             ->addTag('sulu_document_manager.event_subscriber');
  157.     }
  158.     private function configurePathSegmentRegistry($configContainerBuilder $container)
  159.     {
  160.         $pathSegments \array_merge(
  161.             $config['path_segments'],
  162.             [
  163.                 'base' => $container->getParameter('sulu.content.node_names.base'),
  164.                 'content' => $container->getParameter('sulu.content.node_names.content'),
  165.                 'route' => $container->getParameter('sulu.content.node_names.route'),
  166.                 'snippet' => $container->getParameter('sulu.content.node_names.snippet'),
  167.             ]
  168.         );
  169.         $container->setParameter('sulu_document_manager.segments'$pathSegments);
  170.     }
  171.     /**
  172.      * Returns the service id for the given session.
  173.      *
  174.      * @param string $session The name of the session
  175.      *
  176.      * @return string
  177.      */
  178.     private function getSessionServiceId($session)
  179.     {
  180.         return \sprintf('doctrine_phpcr.%s_session'$session);
  181.     }
  182. }