Completed
Pull Request — 5.2 (#2436)
by Ruud
33:30 queued 13:40
created

SingleLineTextPagePart::adaptForm()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 39

Duplication

Lines 39
Ratio 100 %

Importance

Changes 0
Metric Value
dl 39
loc 39
rs 8.9848
c 0
b 0
f 0
cc 5
nc 9
nop 3
1
<?php
2
3
namespace Kunstmaan\FormBundle\Entity\PageParts;
4
5
use ArrayObject;
6
use Doctrine\ORM\Mapping as ORM;
7
use Kunstmaan\FormBundle\Entity\FormSubmissionFieldTypes\StringFormSubmissionField;
8
use Kunstmaan\FormBundle\Form\SingleLineTextPagePartAdminType;
9
use Kunstmaan\FormBundle\Form\StringFormSubmissionType;
10
use Symfony\Component\Form\FormBuilderInterface;
11
use Symfony\Component\Validator\Constraints\NotBlank;
12
use Symfony\Component\Validator\Constraints\Regex;
13
14
/**
15
 * The single-line text page part can be used to create forms with text input fields
16
 *
17
 * @ORM\Entity
18
 * @ORM\Table(name="kuma_single_line_text_page_parts")
19
 */
20 View Code Duplication
class SingleLineTextPagePart extends AbstractFormPagePart
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
21
{
22
    /**
23
     * If set to true, you are obligated to fill in this page part
24
     *
25
     * @ORM\Column(type="boolean", nullable=true)
26
     */
27
    protected $required = false;
28
29
    /**
30
     * Error message shows when the page part is required and nothing is filled in
31
     *
32
     * @ORM\Column(type="string", name="error_message_required", nullable=true)
33
     */
34
    protected $errorMessageRequired;
35
36
    /**
37
     * If set the entered value will be matched with this regular expression
38
     *
39
     * @ORM\Column(type="string", nullable=true)
40
     */
41
    protected $regex;
42
43
    /**
44
     * If a regular expression is set and it doesn't match with the given value, this error message will be shown
45
     *
46
     * @ORM\Column(type="string", name="error_message_regex", nullable=true)
47
     */
48
    protected $errorMessageRegex;
49
50
    /**
51
     * Sets the required valud of this page part
52
     *
53
     * @param bool $required
54
     *
55
     * @return SingleLineTextPagePart
56
     */
57
    public function setRequired($required)
58
    {
59
        $this->required = $required;
60
61
        return $this;
62
    }
63
64
    /**
65
     * Check if the page part is required
66
     *
67
     * @return bool
68
     */
69
    public function getRequired()
70
    {
71
        return $this->required;
72
    }
73
74
    /**
75
     * Sets the message shown when the page part is required and no value was entered
76
     *
77
     * @param string $errorMessageRequired
78
     *
79
     * @return SingleLineTextPagePart
80
     */
81
    public function setErrorMessageRequired($errorMessageRequired)
82
    {
83
        $this->errorMessageRequired = $errorMessageRequired;
84
85
        return $this;
86
    }
87
88
    /**
89
     * Get the error message that will be shown when the page part is required and no value was entered
90
     *
91
     * @return string
92
     */
93
    public function getErrorMessageRequired()
94
    {
95
        return $this->errorMessageRequired;
96
    }
97
98
    /**
99
     * Set the regular expression to match the entered value against
100
     *
101
     * @param string $regex
102
     *
103
     * @return SingleLineTextPagePart
104
     */
105
    public function setRegex($regex)
106
    {
107
        $this->regex = $regex;
108
109
        return $this;
110
    }
111
112
    /**
113
     * Get the current regular expression
114
     *
115
     * @return string
116
     */
117
    public function getRegex()
118
    {
119
        return $this->regex;
120
    }
121
122
    /**
123
     * Set the error message which will be shown when the entered value doesn't match the regular expression
124
     *
125
     * @param string $errorMessageRegex
126
     *
127
     * @return SingleLineTextPagePart
128
     */
129
    public function setErrorMessageRegex($errorMessageRegex)
130
    {
131
        $this->errorMessageRegex = $errorMessageRegex;
132
133
        return $this;
134
    }
135
136
    /**
137
     * Get the current error message which will be shown when the entered value doesn't match the regular expression
138
     *
139
     * @return string
140
     */
141
    public function getErrorMessageRegex()
142
    {
143
        return $this->errorMessageRegex;
144
    }
145
146
    /**
147
     * Returns the frontend view
148
     *
149
     * @return string
150
     */
151
    public function getDefaultView()
152
    {
153
        return 'KunstmaanFormBundle:SingleLineTextPagePart:view.html.twig';
154
    }
155
156
    /**
157
     * Modify the form with the fields of the current page part
158
     *
159
     * @param FormBuilderInterface $formBuilder The form builder
160
     * @param ArrayObject          $fields      The fields
161
     * @param int                  $sequence    The sequence of the form field
162
     */
163
    public function adaptForm(FormBuilderInterface $formBuilder, ArrayObject $fields, $sequence)
164
    {
165
        $sfsf = new StringFormSubmissionField();
166
        $sfsf->setFieldName('field_'.$this->getUniqueId());
167
        $sfsf->setLabel($this->getLabel());
168
        $sfsf->setSequence($sequence);
169
170
        $data = $formBuilder->getData();
171
        $data['formwidget_'.$this->getUniqueId()] = $sfsf;
172
173
        $constraints = [];
174
        if ($this->getRequired()) {
175
            $options = [];
176
            if (!empty($this->errorMessageRequired)) {
177
                $options['message'] = $this->errorMessageRequired;
178
            }
179
            $constraints[] = new NotBlank($options);
180
        }
181
        if ($this->getRegex()) {
182
            $options = ['pattern' => $this->getRegex()];
183
            if (!empty($this->errorMessageRegex)) {
184
                $options['message'] = $this->errorMessageRegex;
185
            }
186
            $constraints[] = new Regex($options);
187
        }
188
189
        $formBuilder->add(
190
            'formwidget_'.$this->getUniqueId(),
191
            StringFormSubmissionType::class,
192
            [
193
                'label' => $this->getLabel(),
194
                'value_constraints' => $constraints,
195
                'required' => $this->getRequired(),
196
            ]
197
        );
198
        $formBuilder->setData($data);
199
200
        $fields->append($sfsf);
201
    }
202
203
    /**
204
     * Returns the default backend form type for this page part
205
     *
206
     * @return string
207
     */
208
    public function getDefaultAdminType()
209
    {
210
        return SingleLineTextPagePartAdminType::class;
211
    }
212
}
213