ListField   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 73
c 1
b 0
f 0
dl 0
loc 118
ccs 58
cts 58
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getPaths() 0 3 1
A getType() 0 3 1
A configureOptions() 0 54 1
1
<?php
2
3
namespace Povs\ListerBundle\Mapper;
4
5
use Povs\ListerBundle\Type\FieldType\FieldTypeInterface;
6
use Povs\ListerBundle\Type\SelectorType\BasicSelectorType;
7
use Symfony\Component\OptionsResolver\OptionsResolver;
8
9
/**
10
 * @author Povilas Margaiatis <[email protected]>
11
 */
12
class ListField extends AbstractField
13
{
14
    public const SORT_DESC = 'DESC';
15
    public const SORT_ASC = 'ASC';
16
17
    public const OPTION_LABEL = 'label';
18
    public const OPTION_SORTABLE = 'sortable';
19
    public const OPTION_SORT_VALUE = 'sort_value';
20
    public const OPTION_SORT_PATH = 'sort_path';
21
    public const OPTION_PATH = 'path';
22
    public const OPTION_JOIN_TYPE = 'join_type';
23
    public const OPTION_PROPERTY = 'property';
24
    public const OPTION_SELECTOR = 'selector';
25
    public const OPTION_VIEW_OPTIONS = 'view_options';
26
    public const OPTION_TRANSLATE = 'translate';
27
    public const OPTION_TRANSLATION_DOMAIN = 'translation_domain';
28
    public const OPTION_TRANSLATION_PREFIX = 'translation_prefix';
29
    public const OPTION_TRANSLATE_NULL = 'translate_null';
30
    public const OPTION_VALUE = 'value';
31
    public const OPTION_FIELD_TYPE_OPTIONS = 'field_type_options';
32
    public const OPTION_LAZY = 'lazy';
33
    public const OPTION_POSITION = 'position';
34
35
    /**
36
     * @var FieldTypeInterface
37
     */
38
    private $type;
39
40
    /**
41
     * @var string[]
42
     */
43
    private $paths;
44
45
    /**
46
     * @param string                  $id
47
     * @param array                   $options
48
     * @param FieldTypeInterface|null $type
49
     */
50 27
    public function __construct(string $id, array $options, ?FieldTypeInterface $type = null)
51
    {
52 27
        parent::__construct($id, $options);
53 26
        $this->type = $type;
54 26
        $this->paths = $this->normalizePaths($id);
55
    }
56
57
    /**
58
     * @return array
59
     */
60 10
    public function getPaths(): array
61
    {
62 10
        return $this->paths;
63
    }
64
65
    /**
66
     * @return FieldTypeInterface|null
67
     */
68 3
    public function getType(): ?FieldTypeInterface
69
    {
70 3
        return $this->type;
71
    }
72
73
    /**
74
     * @inheritDoc
75
     */
76 27
    protected function configureOptions(OptionsResolver $resolver): void
77
    {
78 27
        $resolver->setDefined([
79 27
            self::OPTION_LABEL,
80 27
            self::OPTION_SORTABLE,
81 27
            self::OPTION_SORT_VALUE,
82 27
            self::OPTION_SORT_PATH,
83 27
            self::OPTION_PATH,
84 27
            self::OPTION_JOIN_TYPE,
85 27
            self::OPTION_PROPERTY,
86 27
            self::OPTION_SELECTOR,
87 27
            self::OPTION_VIEW_OPTIONS,
88 27
            self::OPTION_TRANSLATE,
89 27
            self::OPTION_TRANSLATION_DOMAIN,
90 27
            self::OPTION_TRANSLATION_PREFIX,
91 27
            self::OPTION_TRANSLATE_NULL,
92 27
            self::OPTION_VALUE,
93 27
            self::OPTION_FIELD_TYPE_OPTIONS,
94 27
            self::OPTION_LAZY,
95 27
            self::OPTION_POSITION
96 27
        ]);
97
98 27
        $resolver->setDefaults([
99 27
            self::OPTION_SORTABLE => true,
100 27
            self::OPTION_JOIN_TYPE => JoinField::JOIN_LEFT,
101 27
            self::OPTION_SELECTOR => BasicSelectorType::class,
102 27
            self::OPTION_VIEW_OPTIONS => [],
103 27
            self::OPTION_TRANSLATE => false,
104 27
            self::OPTION_TRANSLATE_NULL => false,
105 27
            self::OPTION_FIELD_TYPE_OPTIONS => [],
106 27
            self::OPTION_LAZY => false
107 27
        ]);
108
109 27
        $resolver->setRequired([
110 27
            self::OPTION_LABEL
111 27
        ]);
112
113 27
        $resolver->setAllowedTypes(self::OPTION_LABEL, ['string', 'int']);
114 27
        $resolver->setAllowedTypes(self::OPTION_SORTABLE, 'bool');
115 27
        $resolver->setAllowedValues(self::OPTION_SORT_VALUE, [self::SORT_ASC, self::SORT_DESC]);
116 27
        $resolver->setAllowedTypes(self::OPTION_SORT_PATH, 'string');
117 27
        $resolver->setAllowedTypes(self::OPTION_PATH, ['string', 'array']);
118 27
        $resolver->setAllowedValues(self::OPTION_JOIN_TYPE, [JoinField::JOIN_INNER, JoinField::JOIN_LEFT]);
119 27
        $resolver->setAllowedTypes(self::OPTION_PROPERTY, ['string', 'array']);
120 27
        $resolver->setAllowedTypes(self::OPTION_SELECTOR, 'string');
121 27
        $resolver->setAllowedTypes(self::OPTION_VIEW_OPTIONS, 'array');
122 27
        $resolver->setAllowedTypes(self::OPTION_TRANSLATE, 'bool');
123 27
        $resolver->setAllowedTypes(self::OPTION_TRANSLATION_DOMAIN, 'string');
124 27
        $resolver->setAllowedTypes(self::OPTION_TRANSLATION_PREFIX, 'string');
125 27
        $resolver->setAllowedTypes(self::OPTION_TRANSLATE_NULL, 'bool');
126 27
        $resolver->setAllowedTypes(self::OPTION_VALUE, 'callable');
127 27
        $resolver->setAllowedTypes(self::OPTION_FIELD_TYPE_OPTIONS, 'array');
128 27
        $resolver->setAllowedTypes(self::OPTION_LAZY, 'bool');
129 27
        $resolver->setAllowedTypes(self::OPTION_POSITION, 'string');
130
    }
131
}
132