vendor/ibexa/core/src/lib/IO/Adapter/LocalAdapter.php line 49

Open in your IDE?
  1. <?php
  2. /**
  3.  * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4.  * @license For full copyright and license information view LICENSE file distributed with this source code.
  5.  */
  6. declare(strict_types=1);
  7. namespace Ibexa\Core\IO\Adapter;
  8. use Ibexa\Contracts\Core\MVC\EventSubscriber\ConfigScopeChangeSubscriber;
  9. use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
  10. use Ibexa\Core\IO\IOConfigProvider;
  11. use Ibexa\Core\MVC\Symfony\Event\ScopeChangeEvent;
  12. use League\Flysystem\Adapter\Local;
  13. use LogicException;
  14. /**
  15.  * @internal
  16.  */
  17. final class LocalAdapter extends Local implements ConfigScopeChangeSubscriber
  18. {
  19.     /** @var \Ibexa\Core\IO\IOConfigProvider */
  20.     private $ioConfigProvider;
  21.     /** @var \Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface */
  22.     private $configResolver;
  23.     public function __construct(IOConfigProvider $ioConfigProviderConfigResolverInterface $configResolver)
  24.     {
  25.         $this->ioConfigProvider $ioConfigProvider;
  26.         $this->configResolver $configResolver;
  27.         $filesPermissions $this->configResolver->getParameter('io.permissions.files');
  28.         $directoriesPermissions $this->configResolver->getParameter('io.permissions.directories');
  29.         parent::__construct(
  30.             $this->ioConfigProvider->getRootDir(),
  31.             LOCK_EX,
  32.             Local::DISALLOW_LINKS,
  33.             ['file' => ['public' => $filesPermissions], 'dir' => ['public' => $directoriesPermissions]]
  34.         );
  35.     }
  36.     /**
  37.      * Reconfigure Adapter due to SiteAccess change which implies
  38.      * root dir and permissions could be different for new SiteAccess.
  39.      */
  40.     public function onConfigScopeChange(ScopeChangeEvent $event): void
  41.     {
  42.         $root $this->ioConfigProvider->getRootDir();
  43.         $root is_link($root) ? realpath($root) : $root;
  44.         $this->ensureDirectory($root);
  45.         if (!is_dir($root) || !is_readable($root)) {
  46.             throw new LogicException(sprintf('The root path %s is not readable.'$root));
  47.         }
  48.         $this->setPathPrefix($root);
  49.         $filesPermissions $this->configResolver->getParameter('io.permissions.files');
  50.         $directoriesPermissions $this->configResolver->getParameter('io.permissions.directories');
  51.         $this->permissionMap array_replace_recursive(
  52.             static::$permissions,
  53.             ['file' => ['public' => $filesPermissions], 'dir' => ['public' => $directoriesPermissions]]
  54.         );
  55.     }
  56. }
  57. class_alias(LocalAdapter::class, 'eZ\Publish\Core\IO\Adapter\LocalAdapter');