xref: /plugin/combo/ComboStrap/MetadataFormDataStore.php (revision 0e43c1db59ebeeac06e9a22249bf3806a94553d4)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeau
4c3437056SNickeaunamespace ComboStrap;
5c3437056SNickeau
6c3437056SNickeau/**
7c3437056SNickeau * Class MetadataFormStore
8c3437056SNickeau * @package ComboStrap
9c3437056SNickeau * Represents a data array of a post from an HTML form
10c3437056SNickeau * ie formData
11c3437056SNickeau */
12c3437056SNickeauclass MetadataFormDataStore extends MetadataSingleArrayStore
13c3437056SNickeau{
14c3437056SNickeau
15c3437056SNickeau
16c3437056SNickeau    public static function getOrCreateFromResource(ResourceCombo $resourceCombo, array $formData = []): MetadataStore
17c3437056SNickeau    {
18c3437056SNickeau        return new MetadataFormDataStore($resourceCombo, $formData);
19c3437056SNickeau    }
20c3437056SNickeau
21c3437056SNickeau
22c3437056SNickeau    public function get(Metadata $metadata, $default = null)
23c3437056SNickeau    {
24c3437056SNickeau        $this->checkResource($metadata->getResource());
25*0e43c1dbSgerardnico
26*0e43c1dbSgerardnico        $type = $metadata->getDataType();
27*0e43c1dbSgerardnico        switch ($type) {
28*0e43c1dbSgerardnico            case DataType::TABULAR_TYPE_VALUE:
29*0e43c1dbSgerardnico                /**
30*0e43c1dbSgerardnico                 * In a tabular, the children name are
31*0e43c1dbSgerardnico                 */
32*0e43c1dbSgerardnico                $value = null;
33*0e43c1dbSgerardnico                foreach ($metadata->getChildrenObject() as $childrenObject) {
34*0e43c1dbSgerardnico                    $childrenValue = $this->data[$childrenObject::getName()];
35*0e43c1dbSgerardnico                    if ($childrenValue !== null) {
36*0e43c1dbSgerardnico                        $value[$childrenObject::getPersistentName()] = $childrenValue;
37*0e43c1dbSgerardnico                    }
38*0e43c1dbSgerardnico                }
39*0e43c1dbSgerardnico                if ($value !== null) {
40*0e43c1dbSgerardnico                    return $value;
41*0e43c1dbSgerardnico                }
42*0e43c1dbSgerardnico                break;
43*0e43c1dbSgerardnico            default:
44c3437056SNickeau                /**
45c3437056SNickeau                 * In a form, the name is send, not the {@link Metadata::getPersistentName()}
46*0e43c1dbSgerardnico                 * but with the name
47c3437056SNickeau                 */
48c3437056SNickeau                $value = $this->data[$metadata::getName()];
49c3437056SNickeau                if ($value !== null) {
50c3437056SNickeau                    return $value;
51c3437056SNickeau                }
52*0e43c1dbSgerardnico        }
53*0e43c1dbSgerardnico
54c3437056SNickeau        return $default;
55c3437056SNickeau    }
56c3437056SNickeau
57c3437056SNickeau
58c3437056SNickeau}
59