1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeaunamespace ComboStrap\Meta\Api; 5*04fd306cSNickeau 6*04fd306cSNickeauuse ComboStrap\ExceptionBadArgument; 7*04fd306cSNickeauuse ComboStrap\Meta\Api\Metadata; 8*04fd306cSNickeauuse ComboStrap\ResourceCombo; 9*04fd306cSNickeau 10*04fd306cSNickeau/** 11*04fd306cSNickeau * Where to store a metadata 12*04fd306cSNickeau * 13*04fd306cSNickeau * Not that a metadata may be created even if the file does not exist 14*04fd306cSNickeau * (when the page is rendered for the first time for instance) 15*04fd306cSNickeau * 16*04fd306cSNickeau */ 17*04fd306cSNickeauinterface MetadataStore 18*04fd306cSNickeau{ 19*04fd306cSNickeau 20*04fd306cSNickeau /** 21*04fd306cSNickeau * Return if the data has the dokuwiki format 22*04fd306cSNickeau * @return bool 23*04fd306cSNickeau */ 24*04fd306cSNickeau public function isDokuWikiStore(): bool; 25*04fd306cSNickeau 26*04fd306cSNickeau 27*04fd306cSNickeau /** 28*04fd306cSNickeau * Set the {@link Metadata::getValue()} for a {@link Metadata::getResource()} 29*04fd306cSNickeau * with the name {@link Metadata::getName()} 30*04fd306cSNickeau * @param Metadata $metadata 31*04fd306cSNickeau * @throws ExceptionBadArgument 32*04fd306cSNickeau */ 33*04fd306cSNickeau public function set(Metadata $metadata); 34*04fd306cSNickeau 35*04fd306cSNickeau /** 36*04fd306cSNickeau * Return the {@link Metadata::getValue()} for a {@link Metadata::getResource()} 37*04fd306cSNickeau * and the name {@link Metadata::getName()} 38*04fd306cSNickeau * @param Metadata $metadata 39*04fd306cSNickeau * @param null $default - the default value to return if no data is found 40*04fd306cSNickeau */ 41*04fd306cSNickeau public function get(Metadata $metadata, $default = null); 42*04fd306cSNickeau 43*04fd306cSNickeau public function getResource(): ResourceCombo; 44*04fd306cSNickeau 45*04fd306cSNickeau /** 46*04fd306cSNickeau * This function permits to get a metadata value without creating a {@link Metadata} class 47*04fd306cSNickeau * 48*04fd306cSNickeau * @param string $name - the {@link Metadata::getName()} of the metadata 49*04fd306cSNickeau * @param null $default - the default value to return if no data is found 50*04fd306cSNickeau * @return null|string|array|boolean 51*04fd306cSNickeau */ 52*04fd306cSNickeau public function getFromName(string $name, $default = null); 53*04fd306cSNickeau 54*04fd306cSNickeau /** 55*04fd306cSNickeau * This function permits to set a metadata value without creating a {@link Metadata} class 56*04fd306cSNickeau * @param string $name - the {@link Metadata::getName()} of the metadata 57*04fd306cSNickeau * @param null|string|array|boolean $value - the value 58*04fd306cSNickeau * @param null $default - if the value is equals to the default, the data will not be stored 59*04fd306cSNickeau */ 60*04fd306cSNickeau public function setFromPersistentName(string $name, $value, $default = null); 61*04fd306cSNickeau 62*04fd306cSNickeau /** 63*04fd306cSNickeau * 64*04fd306cSNickeau * Flush to disk on a file system or commit in a database 65*04fd306cSNickeau * @return mixed 66*04fd306cSNickeau * 67*04fd306cSNickeau * 68*04fd306cSNickeau * Don't persist in the setter function of the metadata object 69*04fd306cSNickeau * 70*04fd306cSNickeau * Why ? 71*04fd306cSNickeau * - We set normally a lot of metadata at once, we persist at the end of the function 72*04fd306cSNickeau * - In a metadata list with a lot of value, it's normal to persist when all values are in the batch 73*04fd306cSNickeau * - This is not always needed for instance modification of the frontmatter is just a modification of the persistence value 74*04fd306cSNickeau * - For scalar, it means that we need to persist 75*04fd306cSNickeau * - Goal is to persist at the end of the HTTP request 76*04fd306cSNickeau */ 77*04fd306cSNickeau public function persist(); 78*04fd306cSNickeau 79*04fd306cSNickeau /** 80*04fd306cSNickeau * @return bool - true if the data is stored in a array text based format 81*04fd306cSNickeau * Used to send 82*04fd306cSNickeau * * the string `false` and not the false value for instance 83*04fd306cSNickeau * * and json in a array format 84*04fd306cSNickeau */ 85*04fd306cSNickeau public function isHierarchicalTextBased(): bool; 86*04fd306cSNickeau 87*04fd306cSNickeau /** 88*04fd306cSNickeau * Reset (Delete all data in memory) 89*04fd306cSNickeau */ 90*04fd306cSNickeau public function reset(); 91*04fd306cSNickeau 92*04fd306cSNickeau /** 93*04fd306cSNickeau * @return string 94*04fd306cSNickeau */ 95*04fd306cSNickeau public function getCanonical(): string; 96*04fd306cSNickeau 97*04fd306cSNickeau /** 98*04fd306cSNickeau * @param ResourceCombo $resourceCombo 99*04fd306cSNickeau * @return MetadataStore 100*04fd306cSNickeau */ 101*04fd306cSNickeau static function getOrCreateFromResource(ResourceCombo $resourceCombo): MetadataStore; 102*04fd306cSNickeau 103*04fd306cSNickeau} 104