xref: /plugin/combo/ComboStrap/Meta/Api/MetadataStore.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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