Completed
Push — master ( fe7356...a49db1 )
by Jeroen
14:06 queued 10s
created

SingleLineTextPagePart   A

Complexity

Total Complexity 15

Size/Duplication

Total Lines 193
Duplicated Lines 99.48 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 15
lcom 1
cbo 5
dl 192
loc 193
ccs 50
cts 50
cp 1
rs 10
c 0
b 0
f 0

11 Methods

Rating   Name   Duplication   Size   Complexity  
A setRequired() 6 6 1
A getRequired() 4 4 1
A setErrorMessageRequired() 6 6 1
A getErrorMessageRequired() 4 4 1
A setRegex() 6 6 1
A getRegex() 4 4 1
A setErrorMessageRegex() 6 6 1
A getErrorMessageRegex() 4 4 1
A getDefaultView() 4 4 1
B adaptForm() 39 39 5
A getDefaultAdminType() 4 4 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

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 2
    public function setRequired($required)
58
    {
59 2
        $this->required = $required;
60
61 2
        return $this;
62
    }
63
64
    /**
65
     * Check if the page part is required
66
     *
67
     * @return bool
68
     */
69 2
    public function getRequired()
70
    {
71 2
        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 2
    public function setErrorMessageRequired($errorMessageRequired)
82
    {
83 2
        $this->errorMessageRequired = $errorMessageRequired;
84
85 2
        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 2
    public function getErrorMessageRequired()
94
    {
95 2
        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 3
    public function setRegex($regex)
106
    {
107 3
        $this->regex = $regex;
108
109 3
        return $this;
110
    }
111
112
    /**
113
     * Get the current regular expression
114
     *
115
     * @return string
116
     */
117 3
    public function getRegex()
118
    {
119 3
        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 3
    public function setErrorMessageRegex($errorMessageRegex)
130
    {
131 3
        $this->errorMessageRegex = $errorMessageRegex;
132
133 3
        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 2
    public function getErrorMessageRegex()
142
    {
143 2
        return $this->errorMessageRegex;
144
    }
145
146
    /**
147
     * Returns the frontend view
148
     *
149
     * @return string
150
     */
151 1
    public function getDefaultView()
152
    {
153 1
        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 1
    public function adaptForm(FormBuilderInterface $formBuilder, ArrayObject $fields, $sequence)
164
    {
165 1
        $sfsf = new StringFormSubmissionField();
166 1
        $sfsf->setFieldName('field_'.$this->getUniqueId());
167 1
        $sfsf->setLabel($this->getLabel());
168 1
        $sfsf->setSequence($sequence);
169
170 1
        $data = $formBuilder->getData();
171 1
        $data['formwidget_'.$this->getUniqueId()] = $sfsf;
172
173 1
        $constraints = [];
174 1
        if ($this->getRequired()) {
175 1
            $options = [];
176 1
            if (!empty($this->errorMessageRequired)) {
177 1
                $options['message'] = $this->errorMessageRequired;
178
            }
179 1
            $constraints[] = new NotBlank($options);
180
        }
181 1
        if ($this->getRegex()) {
182 1
            $options = ['pattern' => $this->getRegex()];
183 1
            if (!empty($this->errorMessageRegex)) {
184 1
                $options['message'] = $this->errorMessageRegex;
185
            }
186 1
            $constraints[] = new Regex($options);
187
        }
188
189 1
        $formBuilder->add(
190 1
            'formwidget_'.$this->getUniqueId(),
191
            StringFormSubmissionType::class,
192 1
            [
193 1
                'label' => $this->getLabel(),
194 1
                'value_constraints' => $constraints,
195
                'required' => $this->getRequired(),
196
            ]
197 1
        );
198
        $formBuilder->setData($data);
199 1
200 1
        $fields->append($sfsf);
201
    }
202
203
    /**
204
     * Returns the default backend form type for this page part
205
     *
206
     * @return string
207 1
     */
208
    public function getDefaultAdminType()
209 1
    {
210
        return SingleLineTextPagePartAdminType::class;
211
    }
212
}
213