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