1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeaunamespace ComboStrap\Meta\Api; 5*04fd306cSNickeau 6*04fd306cSNickeauuse ComboStrap\DataType; 7*04fd306cSNickeauuse ComboStrap\ExceptionCompile; 8*04fd306cSNickeauuse ComboStrap\Json; 9*04fd306cSNickeauuse ComboStrap\LogUtility; 10*04fd306cSNickeau 11*04fd306cSNickeau/** 12*04fd306cSNickeau * Class MetadataJson 13*04fd306cSNickeau * @package ComboStrap 14*04fd306cSNickeau * A text that can be saved as array 15*04fd306cSNickeau * TODO: Should be based on an array 16*04fd306cSNickeau */ 17*04fd306cSNickeauabstract class MetadataJson extends MetadataText 18*04fd306cSNickeau{ 19*04fd306cSNickeau 20*04fd306cSNickeau 21*04fd306cSNickeau /** 22*04fd306cSNickeau * Helper function for date metadata 23*04fd306cSNickeau * @throws ExceptionCompile 24*04fd306cSNickeau */ 25*04fd306cSNickeau public function toStoreValue() 26*04fd306cSNickeau { 27*04fd306cSNickeau $value = parent::toStoreValue(); 28*04fd306cSNickeau 29*04fd306cSNickeau if ($this->getWriteStore()->isHierarchicalTextBased()) { 30*04fd306cSNickeau return Json::createFromString($value)->toArray(); 31*04fd306cSNickeau } 32*04fd306cSNickeau 33*04fd306cSNickeau return $value; 34*04fd306cSNickeau 35*04fd306cSNickeau } 36*04fd306cSNickeau 37*04fd306cSNickeau 38*04fd306cSNickeau static public function getDataType(): string 39*04fd306cSNickeau { 40*04fd306cSNickeau return DataType::JSON_TYPE_VALUE; 41*04fd306cSNickeau } 42*04fd306cSNickeau 43*04fd306cSNickeau 44*04fd306cSNickeau public function setFromStoreValueWithoutException($value): Metadata 45*04fd306cSNickeau { 46*04fd306cSNickeau try { 47*04fd306cSNickeau parent::setFromStoreValueWithoutException($this->toInternalValue($value)); 48*04fd306cSNickeau } catch (ExceptionCompile $e) { 49*04fd306cSNickeau LogUtility::msg("Value in the store is not a valid json. Message:" . $e->getMessage(), LogUtility::LVL_MSG_ERROR, $e->getCanonical()); 50*04fd306cSNickeau } 51*04fd306cSNickeau return $this; 52*04fd306cSNickeau } 53*04fd306cSNickeau 54*04fd306cSNickeau /** 55*04fd306cSNickeau * @throws ExceptionCompile 56*04fd306cSNickeau */ 57*04fd306cSNickeau private function toInternalValue($value) 58*04fd306cSNickeau { 59*04fd306cSNickeau if ($value === null) { 60*04fd306cSNickeau // html form return empty string 61*04fd306cSNickeau return null; 62*04fd306cSNickeau } 63*04fd306cSNickeau if (is_array($value)) { 64*04fd306cSNickeau return Json::createFromArray($value)->toPrettyJsonString(); 65*04fd306cSNickeau } 66*04fd306cSNickeau if (!is_string($value)) { 67*04fd306cSNickeau throw new ExceptionCompile("The json persistent value is not an array, nor a string"); 68*04fd306cSNickeau } 69*04fd306cSNickeau // the json is normalized when setting to verify 70*04fd306cSNickeau return $value; 71*04fd306cSNickeau } 72*04fd306cSNickeau 73*04fd306cSNickeau 74*04fd306cSNickeau} 75