xref: /template/strap/ComboStrap/Meta/Api/MetadataText.php (revision 241d63fa73ef2a57ee74f4b954a7b5c8eba40a9d)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeau
404fd306cSNickeaunamespace ComboStrap\Meta\Api;
504fd306cSNickeau
604fd306cSNickeauuse ComboStrap\DataType;
704fd306cSNickeauuse ComboStrap\ExceptionBadArgument;
804fd306cSNickeauuse ComboStrap\ExceptionCompile;
904fd306cSNickeauuse ComboStrap\ExceptionNotFound;
1004fd306cSNickeauuse ComboStrap\LogUtility;
1104fd306cSNickeau
1204fd306cSNickeau/**
1304fd306cSNickeau * Implement all default method for a text metadata (ie small string without any paragraph such as name, title, ...)
1404fd306cSNickeau * Class MetadataText
1504fd306cSNickeau * @package ComboStrap
1604fd306cSNickeau */
1704fd306cSNickeauabstract class MetadataText extends Metadata
1804fd306cSNickeau{
1904fd306cSNickeau
2004fd306cSNickeau    /**
2104fd306cSNickeau     * @var string|null
2204fd306cSNickeau     */
2304fd306cSNickeau    protected $value;
2404fd306cSNickeau
2504fd306cSNickeau
2604fd306cSNickeau    public static function getDataType(): string
2704fd306cSNickeau    {
2804fd306cSNickeau        return DataType::TEXT_TYPE_VALUE;
2904fd306cSNickeau    }
3004fd306cSNickeau
3104fd306cSNickeau    public function getValue(): string
3204fd306cSNickeau    {
3304fd306cSNickeau        $this->buildCheck();
34c78a26cbSgerardnico        /**
35c78a26cbSgerardnico         * null or empty string is considered not found
36c78a26cbSgerardnico         */
37c78a26cbSgerardnico        if ($this->value === null || trim($this->value) === "") {
3804fd306cSNickeau            throw new ExceptionNotFound("The value was not found for the metadata ($this)");
3904fd306cSNickeau        }
4004fd306cSNickeau        return $this->value;
4104fd306cSNickeau    }
4204fd306cSNickeau
4304fd306cSNickeau    public function valueIsNotNull(): bool
4404fd306cSNickeau    {
4504fd306cSNickeau        return $this->value !== null;
4604fd306cSNickeau    }
4704fd306cSNickeau
4804fd306cSNickeau
4904fd306cSNickeau    /**
5004fd306cSNickeau     * @param null|string $value
5104fd306cSNickeau     * @return $this
5204fd306cSNickeau     * @throws ExceptionBadArgument
5304fd306cSNickeau     */
5404fd306cSNickeau    public function setValue($value): Metadata
5504fd306cSNickeau    {
5604fd306cSNickeau        if ($value !== null && !is_string($value)) {
5704fd306cSNickeau            throw new ExceptionBadArgument("The value of the metadata ($this) is not a string", $this->getCanonical());
5804fd306cSNickeau        }
5904fd306cSNickeau        $value = trim($value);
6004fd306cSNickeau        if ($value === "") {
6104fd306cSNickeau            /**
6204fd306cSNickeau             * TODO: move this into the function {@link MetadataText::setFromStoreValueWithoutException()} ??
6304fd306cSNickeau             *   form don't return null only empty string
6404fd306cSNickeau             *   equivalent to null
6504fd306cSNickeau             */
6604fd306cSNickeau            return $this;
6704fd306cSNickeau        }
6804fd306cSNickeau        $possibleValues = $this->getPossibleValues();
6904fd306cSNickeau        if ($possibleValues !== null) {
7004fd306cSNickeau            if (!in_array($value, $possibleValues)) {
7104fd306cSNickeau                throw new ExceptionBadArgument("The value ($value) for the metadata ({$this->getName()}) is not one of the possible following values: " . implode(", ", $possibleValues) . ".");
7204fd306cSNickeau            }
7304fd306cSNickeau        }
7404fd306cSNickeau        $this->value = $value;
7504fd306cSNickeau        return $this;
7604fd306cSNickeau
7704fd306cSNickeau    }
7804fd306cSNickeau
7904fd306cSNickeau    /**
8004fd306cSNickeau     * @throws ExceptionCompile
8104fd306cSNickeau     */
8204fd306cSNickeau    public function setFromStoreValue($value): Metadata
8304fd306cSNickeau    {
8404fd306cSNickeau        return $this->setValue($value);
8504fd306cSNickeau    }
8604fd306cSNickeau
8704fd306cSNickeau    public function setFromStoreValueWithoutException($value): Metadata
8804fd306cSNickeau    {
89*241d63faSgerardnico        if (empty($value)) {
9004fd306cSNickeau            $this->value = null;
9104fd306cSNickeau            return $this;
9204fd306cSNickeau        }
9304fd306cSNickeau        if (!is_string($value)) {
9404fd306cSNickeau            LogUtility::msg("This value of a text metadata is not a string. " . var_export($value, true));
9504fd306cSNickeau            return $this;
9604fd306cSNickeau        }
9704fd306cSNickeau        $this->value = $value;
9804fd306cSNickeau        return $this;
9904fd306cSNickeau    }
10004fd306cSNickeau
10104fd306cSNickeau    public function getDefaultValue()
10204fd306cSNickeau    {
10304fd306cSNickeau        return null;
10404fd306cSNickeau    }
10504fd306cSNickeau
10604fd306cSNickeau
10704fd306cSNickeau}
108