xref: /template/strap/ComboStrap/MetadataFormDataStore.php (revision 70bbd7f1f72440223cc13f3495efdcb2b0a11514)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
604fd306cSNickeauuse ComboStrap\Meta\Api\Metadata;
704fd306cSNickeauuse ComboStrap\Meta\Api\MetadataStore;
804fd306cSNickeau
9c3437056SNickeau/**
10c3437056SNickeau * Class MetadataFormStore
11c3437056SNickeau * @package ComboStrap
12c3437056SNickeau * Represents a data array of a post from an HTML form
13c3437056SNickeau * ie formData
14c3437056SNickeau */
15c3437056SNickeauclass MetadataFormDataStore extends MetadataSingleArrayStore
16c3437056SNickeau{
17c3437056SNickeau
18c3437056SNickeau
19c3437056SNickeau    public static function getOrCreateFromResource(ResourceCombo $resourceCombo, array $formData = []): MetadataStore
20c3437056SNickeau    {
21c3437056SNickeau        return new MetadataFormDataStore($resourceCombo, $formData);
22c3437056SNickeau    }
23c3437056SNickeau
24c3437056SNickeau
25c3437056SNickeau    public function get(Metadata $metadata, $default = null)
26c3437056SNickeau    {
27c3437056SNickeau        $this->checkResource($metadata->getResource());
280e43c1dbSgerardnico
290e43c1dbSgerardnico        $type = $metadata->getDataType();
300e43c1dbSgerardnico        switch ($type) {
310e43c1dbSgerardnico            case DataType::TABULAR_TYPE_VALUE:
320e43c1dbSgerardnico                /**
330e43c1dbSgerardnico                 * In a tabular, the children name are
340e43c1dbSgerardnico                 */
350e43c1dbSgerardnico                $value = null;
360e43c1dbSgerardnico                foreach ($metadata->getChildrenObject() as $childrenObject) {
370e43c1dbSgerardnico                    $childrenValue = $this->data[$childrenObject::getName()];
380e43c1dbSgerardnico                    if ($childrenValue !== null) {
390e43c1dbSgerardnico                        $value[$childrenObject::getPersistentName()] = $childrenValue;
400e43c1dbSgerardnico                    }
410e43c1dbSgerardnico                }
420e43c1dbSgerardnico                if ($value !== null) {
430e43c1dbSgerardnico                    return $value;
440e43c1dbSgerardnico                }
450e43c1dbSgerardnico                break;
460e43c1dbSgerardnico            default:
47c3437056SNickeau                /**
48c3437056SNickeau                 * In a form, the name is send, not the {@link Metadata::getPersistentName()}
490e43c1dbSgerardnico                 * but with the name
50c3437056SNickeau                 */
51*70bbd7f1Sgerardnico                $value = $this->data[$metadata::getName()] ?? null;
52c3437056SNickeau                if ($value !== null) {
53c3437056SNickeau                    return $value;
54c3437056SNickeau                }
550e43c1dbSgerardnico        }
560e43c1dbSgerardnico
57c3437056SNickeau        return $default;
58c3437056SNickeau    }
59c3437056SNickeau
6004fd306cSNickeau    public function isHierarchicalTextBased(): bool
6104fd306cSNickeau    {
6204fd306cSNickeau        /**
6304fd306cSNickeau         * It's a list of field that is not hiearchical
6404fd306cSNickeau         */
6504fd306cSNickeau        return false;
6604fd306cSNickeau    }
67c3437056SNickeau
68c3437056SNickeau}
69