vendor/ezsystems/ezplatform-kernel/eZ/Publish/Core/Repository/Values/ContentType/FieldDefinitionCollection.php line 19

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\Repository\Values\ContentType;
  8. use ArrayIterator;
  9. use BadMethodCallException;
  10. use Closure;
  11. use Iterator;
  12. use eZ\Publish\API\Repository\Exceptions\OutOfBoundsException;
  13. use eZ\Publish\API\Repository\Values\ContentType\FieldDefinition;
  14. use eZ\Publish\API\Repository\Values\ContentType\FieldDefinitionCollection as FieldDefinitionCollectionInterface;
  15. final class FieldDefinitionCollection implements FieldDefinitionCollectionInterface
  16. {
  17.     /** @var \eZ\Publish\API\Repository\Values\ContentType\FieldDefinition[] */
  18.     private $fieldDefinitions;
  19.     /** @var \eZ\Publish\API\Repository\Values\ContentType\FieldDefinition[] */
  20.     private $fieldDefinitionsByIdentifier;
  21.     /**
  22.      * @param \eZ\Publish\API\Repository\Values\ContentType\FieldDefinition[]
  23.      */
  24.     public function __construct(iterable $fieldDefinitions = [])
  25.     {
  26.         $this->fieldDefinitions = [];
  27.         $this->fieldDefinitionsByIdentifier = [];
  28.         foreach ($fieldDefinitions as $fieldDefinition) {
  29.             $this->fieldDefinitions[] = $fieldDefinition;
  30.             $this->fieldDefinitionsByIdentifier[$fieldDefinition->identifier] = $fieldDefinition;
  31.         }
  32.     }
  33.     public function get(string $fieldDefinitionIdentifier): FieldDefinition
  34.     {
  35.         if ($this->has($fieldDefinitionIdentifier)) {
  36.             return $this->fieldDefinitionsByIdentifier[$fieldDefinitionIdentifier];
  37.         }
  38.         throw new OutOfBoundsException(
  39.             sprintf("Field Definition Collection does not contain element with identifier '%s'"$fieldDefinitionIdentifier)
  40.         );
  41.     }
  42.     public function has(string $fieldDefinitionIdentifier): bool
  43.     {
  44.         return array_key_exists($fieldDefinitionIdentifier$this->fieldDefinitionsByIdentifier);
  45.     }
  46.     public function first(): FieldDefinition
  47.     {
  48.         if (($result reset($this->fieldDefinitions)) !== false) {
  49.             return $result;
  50.         }
  51.         throw new OutOfBoundsException('Field Definition Collection is empty');
  52.     }
  53.     public function last(): FieldDefinition
  54.     {
  55.         if (($result end($this->fieldDefinitions)) !== false) {
  56.             return $result;
  57.         }
  58.         throw new OutOfBoundsException('Field Definition Collection is empty');
  59.     }
  60.     public function isEmpty(): bool
  61.     {
  62.         return empty($this->fieldDefinitions);
  63.     }
  64.     public function filter(Closure $predicate): FieldDefinitionCollectionInterface
  65.     {
  66.         return new self(array_filter($this->fieldDefinitions$predicate));
  67.     }
  68.     public function filterByType(string $fieldTypeIdentifier): FieldDefinitionCollectionInterface
  69.     {
  70.         return $this->filter($this->getIsTypePredicate($fieldTypeIdentifier));
  71.     }
  72.     public function filterByGroup(string $fieldGroup): FieldDefinitionCollectionInterface
  73.     {
  74.         return $this->filter($this->getInGroupPredicate($fieldGroup));
  75.     }
  76.     public function map(Closure $predicate): array
  77.     {
  78.         return array_map($predicate$this->fieldDefinitions);
  79.     }
  80.     public function all(Closure $predicate): bool
  81.     {
  82.         foreach ($this->fieldDefinitions as $fieldDefinition) {
  83.             if (!$predicate($fieldDefinition)) {
  84.                 return false;
  85.             }
  86.         }
  87.         return true;
  88.     }
  89.     public function any(Closure $predicate): bool
  90.     {
  91.         foreach ($this->fieldDefinitions as $fieldDefinition) {
  92.             if ($predicate($fieldDefinition)) {
  93.                 return true;
  94.             }
  95.         }
  96.         return false;
  97.     }
  98.     public function anyOfType(string $fieldTypeIdentifier): bool
  99.     {
  100.         return $this->any($this->getIsTypePredicate($fieldTypeIdentifier));
  101.     }
  102.     public function anyInGroup(string $fieldGroup): bool
  103.     {
  104.         return $this->any($this->getInGroupPredicate($fieldGroup));
  105.     }
  106.     public function partition(Closure $predicate): array
  107.     {
  108.         $matches $noMatches = [];
  109.         foreach ($this->fieldDefinitions as $fieldDefinition) {
  110.             if ($predicate($fieldDefinition)) {
  111.                 $matches[] = $fieldDefinition;
  112.             } else {
  113.                 $noMatches[] = $fieldDefinition;
  114.             }
  115.         }
  116.         return [new self($matches), new self($noMatches)];
  117.     }
  118.     public function count(): int
  119.     {
  120.         return count($this->fieldDefinitions);
  121.     }
  122.     public function getIterator(): Iterator
  123.     {
  124.         return new ArrayIterator($this->fieldDefinitions);
  125.     }
  126.     public function toArray(): array
  127.     {
  128.         return $this->fieldDefinitions;
  129.     }
  130.     private function getIsTypePredicate(string $fieldTypeIdentifier): Closure
  131.     {
  132.         return static function (FieldDefinition $fieldDefinition) use ($fieldTypeIdentifier) {
  133.             return $fieldDefinition->fieldTypeIdentifier === $fieldTypeIdentifier;
  134.         };
  135.     }
  136.     private function getInGroupPredicate(string $fieldGroup): Closure
  137.     {
  138.         return static function (FieldDefinition $fieldDefinition) use ($fieldGroup) {
  139.             return $fieldDefinition->fieldGroup === $fieldGroup;
  140.         };
  141.     }
  142.     public function offsetExists($offset): bool
  143.     {
  144.         return isset($this->fieldDefinitions[$offset]);
  145.     }
  146.     public function offsetGet($offset): FieldDefinition
  147.     {
  148.         return $this->fieldDefinitions[$offset];
  149.     }
  150.     public function offsetSet($offset$value): void
  151.     {
  152.         throw new BadMethodCallException(self::class . ' is read-only!');
  153.     }
  154.     public function offsetUnset($offset): void
  155.     {
  156.         throw new BadMethodCallException(self::class . ' is read-only!');
  157.     }
  158. }