vendor/ezsystems/ezplatform-kernel/eZ/Publish/Core/MVC/Symfony/SiteAccess/Provider/ChainSiteAccessProvider.php line 16

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 eZ\Publish\Core\MVC\Symfony\SiteAccess\Provider;
  8. use eZ\Publish\Core\Base\Exceptions\NotFoundException;
  9. use eZ\Publish\Core\MVC\Symfony\SiteAccess;
  10. use eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface;
  11. use Traversable;
  12. final class ChainSiteAccessProvider implements SiteAccessProviderInterface
  13. {
  14.     /** @var \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] */
  15.     private $providers;
  16.     /**
  17.      * @param \eZ\Publish\Core\MVC\Symfony\SiteAccess\SiteAccessProviderInterface[] $providers
  18.      */
  19.     public function __construct(iterable $providers = [])
  20.     {
  21.         $this->providers $providers;
  22.     }
  23.     public function getSiteAccesses(): Traversable
  24.     {
  25.         foreach ($this->providers as $provider) {
  26.             foreach ($provider->getSiteAccesses() as $siteAccess) {
  27.                 yield $siteAccess;
  28.             }
  29.         }
  30.         yield from [];
  31.     }
  32.     public function isDefined(string $name): bool
  33.     {
  34.         foreach ($this->providers as $provider) {
  35.             if ($provider->isDefined($name)) {
  36.                 return true;
  37.             }
  38.         }
  39.         return false;
  40.     }
  41.     /**
  42.      * @throws \eZ\Publish\Core\Base\Exceptions\NotFoundException
  43.      */
  44.     public function getSiteAccess(string $name): SiteAccess
  45.     {
  46.         foreach ($this->providers as $provider) {
  47.             if ($provider->isDefined($name)) {
  48.                 return $provider->getSiteAccess($name);
  49.             }
  50.         }
  51.         throw new NotFoundException('Site Access'$name);
  52.     }
  53. }