vendor/ezsystems/ezpublish-kernel/eZ/Bundle/EzPublishCoreBundle/ApiLoader/RepositoryFactory.php line 99

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) eZ Systems AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. namespace eZ\Bundle\EzPublishCoreBundle\ApiLoader;
  7. use eZ\Publish\Core\MVC\ConfigResolverInterface;
  8. use eZ\Publish\Core\Repository\Helper\RelationProcessor;
  9. use eZ\Publish\Core\Repository\Values\User\UserReference;
  10. use eZ\Publish\Core\Search\Common\BackgroundIndexer;
  11. use eZ\Publish\SPI\Persistence\Handler as PersistenceHandler;
  12. use eZ\Publish\SPI\Search\Handler as SearchHandler;
  13. use eZ\Publish\SPI\Limitation\Type as SPILimitationType;
  14. use eZ\Publish\Core\Base\Container\ApiLoader\FieldTypeCollectionFactory;
  15. use eZ\Publish\Core\Base\Container\ApiLoader\FieldTypeNameableCollectionFactory;
  16. use Psr\Log\LoggerInterface;
  17. use Psr\Log\NullLogger;
  18. use Symfony\Component\DependencyInjection\ContainerAwareInterface;
  19. use Symfony\Component\DependencyInjection\ContainerAwareTrait;
  20. class RepositoryFactory implements ContainerAwareInterface
  21. {
  22.     use ContainerAwareTrait;
  23.     /** @var \eZ\Publish\Core\MVC\ConfigResolverInterface */
  24.     private $configResolver;
  25.     /**
  26.      * Collection of fieldTypes, lazy loaded via a closure.
  27.      *
  28.      * @var \eZ\Publish\Core\Base\Container\ApiLoader\FieldTypeCollectionFactory
  29.      */
  30.     protected $fieldTypeCollectionFactory;
  31.     /**
  32.      * Collection of fieldTypes, lazy loaded via a closure.
  33.      *
  34.      * @var \eZ\Publish\Core\Base\Container\ApiLoader\FieldTypeNameableCollectionFactory
  35.      */
  36.     protected $fieldTypeNameableCollectionFactory;
  37.     /** @var string */
  38.     private $repositoryClass;
  39.     /**
  40.      * Collection of limitation types for the RoleService.
  41.      *
  42.      * @var \eZ\Publish\SPI\Limitation\Type[]
  43.      */
  44.     protected $roleLimitations = [];
  45.     /**
  46.      * Map of system configured policies.
  47.      *
  48.      * @var array
  49.      */
  50.     private $policyMap;
  51.     /** @var \Psr\Log\LoggerInterface */
  52.     private $logger;
  53.     public function __construct(
  54.         ConfigResolverInterface $configResolver,
  55.         FieldTypeCollectionFactory $fieldTypeCollectionFactory,
  56.         FieldTypeNameableCollectionFactory $fieldTypeNameableCollectionFactory,
  57.         $repositoryClass,
  58.         array $policyMap,
  59.         LoggerInterface $logger null
  60.     ) {
  61.         $this->configResolver $configResolver;
  62.         $this->fieldTypeCollectionFactory $fieldTypeCollectionFactory;
  63.         $this->fieldTypeNameableCollectionFactory $fieldTypeNameableCollectionFactory;
  64.         $this->repositoryClass $repositoryClass;
  65.         $this->policyMap $policyMap;
  66.         $this->logger null !== $logger $logger : new NullLogger();
  67.     }
  68.     /**
  69.      * Builds the main repository, heart of eZ Publish API.
  70.      *
  71.      * This always returns the true inner Repository, please depend on ezpublish.api.repository and not this method
  72.      * directly to make sure you get an instance wrapped inside Signal / Cache / * functionality.
  73.      *
  74.      * @param \eZ\Publish\SPI\Persistence\Handler $persistenceHandler
  75.      * @param \eZ\Publish\SPI\Search\Handler $searchHandler
  76.      * @param \eZ\Publish\Core\Search\Common\BackgroundIndexer $backgroundIndexer
  77.      * @param \eZ\Publish\Core\Repository\Helper\RelationProcessor $relationProcessor
  78.      *
  79.      * @return \eZ\Publish\API\Repository\Repository
  80.      */
  81.     public function buildRepository(
  82.         PersistenceHandler $persistenceHandler,
  83.         SearchHandler $searchHandler,
  84.         BackgroundIndexer $backgroundIndexer,
  85.         RelationProcessor $relationProcessor
  86.     ) {
  87.         $config $this->container->get('ezpublish.api.repository_configuration_provider')->getRepositoryConfig();
  88.         $repository = new $this->repositoryClass(
  89.             $persistenceHandler,
  90.             $searchHandler,
  91.             $backgroundIndexer,
  92.             $relationProcessor,
  93.             [
  94.                 'fieldType' => $this->fieldTypeCollectionFactory->getFieldTypes(),
  95.                 'nameableFieldTypes' => $this->fieldTypeNameableCollectionFactory->getNameableFieldTypes(),
  96.                 'role' => [
  97.                     'limitationTypes' => $this->roleLimitations,
  98.                     'policyMap' => $this->policyMap,
  99.                 ],
  100.                 'languages' => $this->configResolver->getParameter('languages'),
  101.                 'content' => ['default_version_archive_limit' => $config['options']['default_version_archive_limit']],
  102.             ],
  103.             new UserReference($this->configResolver->getParameter('anonymous_user_id')),
  104.             $this->logger
  105.         );
  106.         return $repository;
  107.     }
  108.     /**
  109.      * Registers a limitation type for the RoleService.
  110.      *
  111.      * @param string $limitationName
  112.      * @param \eZ\Publish\SPI\Limitation\Type $limitationType
  113.      */
  114.     public function registerLimitationType($limitationNameSPILimitationType $limitationType)
  115.     {
  116.         $this->roleLimitations[$limitationName] = $limitationType;
  117.     }
  118. }