xref: /template/strap/ComboStrap/Meta/Api/MetadataText.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeau
4*04fd306cSNickeaunamespace ComboStrap\Meta\Api;
5*04fd306cSNickeau
6*04fd306cSNickeauuse ComboStrap\DataType;
7*04fd306cSNickeauuse ComboStrap\ExceptionBadArgument;
8*04fd306cSNickeauuse ComboStrap\ExceptionCompile;
9*04fd306cSNickeauuse ComboStrap\ExceptionNotFound;
10*04fd306cSNickeauuse ComboStrap\LogUtility;
11*04fd306cSNickeau
12*04fd306cSNickeau/**
13*04fd306cSNickeau * Implement all default method for a text metadata (ie small string without any paragraph such as name, title, ...)
14*04fd306cSNickeau * Class MetadataText
15*04fd306cSNickeau * @package ComboStrap
16*04fd306cSNickeau */
17*04fd306cSNickeauabstract class MetadataText extends Metadata
18*04fd306cSNickeau{
19*04fd306cSNickeau
20*04fd306cSNickeau    /**
21*04fd306cSNickeau     * @var string|null
22*04fd306cSNickeau     */
23*04fd306cSNickeau    protected $value;
24*04fd306cSNickeau
25*04fd306cSNickeau
26*04fd306cSNickeau    public static function getDataType(): string
27*04fd306cSNickeau    {
28*04fd306cSNickeau        return DataType::TEXT_TYPE_VALUE;
29*04fd306cSNickeau    }
30*04fd306cSNickeau
31*04fd306cSNickeau    public function getValue(): string
32*04fd306cSNickeau    {
33*04fd306cSNickeau        $this->buildCheck();
34*04fd306cSNickeau        if ($this->value === null) {
35*04fd306cSNickeau            throw new ExceptionNotFound("The value was not found for the metadata ($this)");
36*04fd306cSNickeau        }
37*04fd306cSNickeau        return $this->value;
38*04fd306cSNickeau    }
39*04fd306cSNickeau
40*04fd306cSNickeau    public function valueIsNotNull(): bool
41*04fd306cSNickeau    {
42*04fd306cSNickeau        return $this->value !== null;
43*04fd306cSNickeau    }
44*04fd306cSNickeau
45*04fd306cSNickeau
46*04fd306cSNickeau    /**
47*04fd306cSNickeau     * @param null|string $value
48*04fd306cSNickeau     * @return $this
49*04fd306cSNickeau     * @throws ExceptionBadArgument
50*04fd306cSNickeau     */
51*04fd306cSNickeau    public function setValue($value): Metadata
52*04fd306cSNickeau    {
53*04fd306cSNickeau        if ($value !== null && !is_string($value)) {
54*04fd306cSNickeau            throw new ExceptionBadArgument("The value of the metadata ($this) is not a string", $this->getCanonical());
55*04fd306cSNickeau        }
56*04fd306cSNickeau        $value = trim($value);
57*04fd306cSNickeau        if ($value === "") {
58*04fd306cSNickeau            /**
59*04fd306cSNickeau             * TODO: move this into the function {@link MetadataText::setFromStoreValueWithoutException()} ??
60*04fd306cSNickeau             *   form don't return null only empty string
61*04fd306cSNickeau             *   equivalent to null
62*04fd306cSNickeau             */
63*04fd306cSNickeau            return $this;
64*04fd306cSNickeau        }
65*04fd306cSNickeau        $possibleValues = $this->getPossibleValues();
66*04fd306cSNickeau        if ($possibleValues !== null) {
67*04fd306cSNickeau            if (!in_array($value, $possibleValues)) {
68*04fd306cSNickeau                throw new ExceptionBadArgument("The value ($value) for the metadata ({$this->getName()}) is not one of the possible following values: " . implode(", ", $possibleValues) . ".");
69*04fd306cSNickeau            }
70*04fd306cSNickeau        }
71*04fd306cSNickeau        $this->value = $value;
72*04fd306cSNickeau        return $this;
73*04fd306cSNickeau
74*04fd306cSNickeau    }
75*04fd306cSNickeau
76*04fd306cSNickeau    /**
77*04fd306cSNickeau     * @throws ExceptionCompile
78*04fd306cSNickeau     */
79*04fd306cSNickeau    public function setFromStoreValue($value): Metadata
80*04fd306cSNickeau    {
81*04fd306cSNickeau        return $this->setValue($value);
82*04fd306cSNickeau    }
83*04fd306cSNickeau
84*04fd306cSNickeau    public function setFromStoreValueWithoutException($value): Metadata
85*04fd306cSNickeau    {
86*04fd306cSNickeau        if ($value === null || $value === "") {
87*04fd306cSNickeau            $this->value = null;
88*04fd306cSNickeau            return $this;
89*04fd306cSNickeau        }
90*04fd306cSNickeau        if (!is_string($value)) {
91*04fd306cSNickeau            LogUtility::msg("This value of a text metadata is not a string. " . var_export($value, true));
92*04fd306cSNickeau            return $this;
93*04fd306cSNickeau        }
94*04fd306cSNickeau        $this->value = $value;
95*04fd306cSNickeau        return $this;
96*04fd306cSNickeau    }
97*04fd306cSNickeau
98*04fd306cSNickeau    public function getDefaultValue()
99*04fd306cSNickeau    {
100*04fd306cSNickeau        return null;
101*04fd306cSNickeau    }
102*04fd306cSNickeau
103*04fd306cSNickeau
104*04fd306cSNickeau}
105