vendor/ezsystems/ezplatform-kernel/eZ/Publish/Core/Repository/Values/Content/Content.php line 29

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\Content;
  8. use eZ\Publish\API\Repository\Values\Content\Content as APIContent;
  9. use eZ\Publish\API\Repository\Values\Content\Field;
  10. use eZ\Publish\API\Repository\Values\Content\Thumbnail;
  11. use eZ\Publish\API\Repository\Values\Content\VersionInfo as APIVersionInfo;
  12. use eZ\Publish\API\Repository\Values\ContentType\ContentType;
  13. use eZ\Publish\SPI\FieldType\Value;
  14. /**
  15.  * this class represents a content object in a specific version.
  16.  *
  17.  * @property-read \eZ\Publish\API\Repository\Values\Content\ContentInfo $contentInfo convenience getter for $versionInfo->contentInfo
  18.  * @property-read \eZ\Publish\API\Repository\Values\ContentType\ContentType $contentType convenience getter for $versionInfo->contentInfo->contentType
  19.  * @property-read int $id convenience getter for retrieving the contentId: $versionInfo->content->id
  20.  * @property-read \eZ\Publish\API\Repository\Values\Content\VersionInfo $versionInfo calls getVersionInfo()
  21.  * @property-read \eZ\Publish\API\Repository\Values\Content\Field[] $fields Access fields, calls getFields()
  22.  *
  23.  * @internal Meant for internal use by Repository, type hint against API object instead.
  24.  */
  25. class Content extends APIContent
  26. {
  27.     /** @var \eZ\Publish\API\Repository\Values\Content\Thumbnail|null */
  28.     protected $thumbnail;
  29.     /** @var mixed[][] An array of array of field values like[$fieldDefIdentifier][$languageCode] */
  30.     protected $fields;
  31.     /** @var APIVersionInfo */
  32.     protected $versionInfo;
  33.     /** @var \eZ\Publish\API\Repository\Values\ContentType\ContentType */
  34.     protected $contentType;
  35.     /** @var Field[] An array of {@link Field} */
  36.     private $internalFields = [];
  37.     /**
  38.      * The first matched field language among user provided prioritized languages.
  39.      *
  40.      * The first matched language among user provided prioritized languages on object retrieval, or null if none
  41.      * provided (all languages) or on main fallback.
  42.      *
  43.      * @internal
  44.      *
  45.      * @var string|null
  46.      */
  47.     protected $prioritizedFieldLanguageCode;
  48.     public function __construct(array $data = [])
  49.     {
  50.         foreach ($data as $propertyName => $propertyValue) {
  51.             $this->$propertyName $propertyValue;
  52.         }
  53.         foreach ($this->internalFields as $field) {
  54.             $this->fields[$field->fieldDefIdentifier][$field->languageCode] = $field->value;
  55.         }
  56.     }
  57.     public function getThumbnail(): ?Thumbnail
  58.     {
  59.         return $this->thumbnail;
  60.     }
  61.     /**
  62.      * {@inheritdoc}
  63.      */
  64.     public function getVersionInfo(): APIVersionInfo
  65.     {
  66.         return $this->versionInfo;
  67.     }
  68.     /**
  69.      * {@inheritdoc}
  70.      */
  71.     public function getContentType(): ContentType
  72.     {
  73.         return $this->contentType;
  74.     }
  75.     /**
  76.      * {@inheritdoc}
  77.      */
  78.     public function getFieldValue(string $fieldDefIdentifier, ?string $languageCode null): ?Value
  79.     {
  80.         if (null === $languageCode) {
  81.             $languageCode $this->prioritizedFieldLanguageCode ?: $this->versionInfo->contentInfo->mainLanguageCode;
  82.         }
  83.         if (isset($this->fields[$fieldDefIdentifier][$languageCode])) {
  84.             return $this->fields[$fieldDefIdentifier][$languageCode];
  85.         }
  86.         return null;
  87.     }
  88.     /**
  89.      * {@inheritdoc}
  90.      */
  91.     public function getFields(): iterable
  92.     {
  93.         return $this->internalFields;
  94.     }
  95.     /**
  96.      * {@inheritdoc}
  97.      */
  98.     public function getFieldsByLanguage(?string $languageCode null): iterable
  99.     {
  100.         $fields = [];
  101.         if (null === $languageCode) {
  102.             $languageCode $this->prioritizedFieldLanguageCode ?: $this->versionInfo->contentInfo->mainLanguageCode;
  103.         }
  104.         foreach ($this->getFields() as $field) {
  105.             if ($field->languageCode !== $languageCode) {
  106.                 continue;
  107.             }
  108.             $fields[$field->fieldDefIdentifier] = $field;
  109.         }
  110.         return $fields;
  111.     }
  112.     /**
  113.      * {@inheritdoc}
  114.      */
  115.     public function getField(string $fieldDefIdentifier, ?string $languageCode null): ?Field
  116.     {
  117.         if (null === $languageCode) {
  118.             $languageCode $this->prioritizedFieldLanguageCode ?: $this->versionInfo->contentInfo->mainLanguageCode;
  119.         }
  120.         foreach ($this->getFields() as $field) {
  121.             if ($field->fieldDefIdentifier === $fieldDefIdentifier
  122.                 && $field->languageCode === $languageCode) {
  123.                 return $field;
  124.             }
  125.         }
  126.         return null;
  127.     }
  128.     /**
  129.      * {@inheritdoc}
  130.      */
  131.     protected function getProperties($dynamicProperties = ['id''contentInfo'])
  132.     {
  133.         return parent::getProperties($dynamicProperties);
  134.     }
  135.     /**
  136.      * {@inheritdoc}
  137.      */
  138.     public function __get($property)
  139.     {
  140.         switch ($property) {
  141.             case 'id':
  142.                 return $this->versionInfo->contentInfo->id;
  143.             case 'contentInfo':
  144.                 return $this->versionInfo->contentInfo;
  145.             case 'thumbnail':
  146.                 return $this->getThumbnail();
  147.         }
  148.         return parent::__get($property);
  149.     }
  150.     /**
  151.      * {@inheritdoc}
  152.      */
  153.     public function __isset($property)
  154.     {
  155.         if ($property === 'id') {
  156.             return true;
  157.         }
  158.         if ($property === 'contentInfo') {
  159.             return true;
  160.         }
  161.         return parent::__isset($property);
  162.     }
  163. }