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