1 | <?php |
||
2 | |||
3 | namespace Backend\Modules\FormBuilder\Engine; |
||
4 | |||
5 | use Backend\Core\Engine\Form as BackendForm; |
||
6 | use Backend\Core\Engine\Model as BackendModel; |
||
7 | use Backend\Core\Engine\TwigTemplate as BackendTemplate; |
||
8 | |||
9 | /** |
||
10 | * Helper class for the form_builder module. |
||
11 | * |
||
12 | * Dieter Vanden Eynde <[email protected]> |
||
13 | */ |
||
14 | class Helper |
||
15 | { |
||
16 | /** |
||
17 | * Parse a field and return the HTML. |
||
18 | * |
||
19 | * @param array $field Field data. |
||
20 | * |
||
21 | * @return string |
||
22 | */ |
||
23 | public static function parseField(array $field): string |
||
24 | { |
||
25 | if (!empty($field)) { |
||
26 | // init |
||
27 | $form = new BackendForm('tmp', ''); |
||
28 | $tpl = ( |
||
29 | BackendModel::getContainer()->has('template') ? |
||
30 | BackendModel::getContainer()->get('template') : |
||
31 | new BackendTemplate() |
||
32 | ); |
||
33 | $fieldHTML = ''; |
||
34 | $fieldName = 'field' . $field['id']; |
||
35 | $values = (isset($field['settings']['values']) ? $field['settings']['values'] : null); |
||
36 | $defaultValues = ( |
||
37 | isset($field['settings']['default_values']) ? |
||
38 | $field['settings']['default_values'] : |
||
39 | null |
||
40 | ); |
||
41 | $placeholder = (isset($field['settings']['placeholder']) ? $field['settings']['placeholder'] : null); |
||
42 | |||
43 | /* |
||
44 | * Create form and parse to HTML |
||
45 | */ |
||
46 | // dropdown |
||
47 | if ($field['type'] === 'dropdown') { |
||
48 | // values and labels are the same |
||
49 | $values = array_combine($values, $values); |
||
50 | |||
51 | // get index of selected item |
||
52 | $defaultIndex = array_search($defaultValues, $values, true); |
||
53 | if ($defaultIndex === false) { |
||
54 | $defaultIndex = null; |
||
55 | } |
||
56 | |||
57 | // create element |
||
58 | $ddm = $form->addDropdown($fieldName, $values, $defaultIndex); |
||
59 | |||
60 | // empty default element |
||
61 | $ddm->setDefaultElement(''); |
||
62 | |||
63 | // get content |
||
64 | $fieldHTML = $ddm->parse(); |
||
65 | } elseif ($field['type'] === 'datetime') { |
||
66 | // create element |
||
67 | if ($field['settings']['input_type'] === 'date') { |
||
68 | // calculate default value |
||
69 | $amount = $field['settings']['value_amount']; |
||
70 | $type = $field['settings']['value_type']; |
||
71 | |||
72 | if ($type != '') { |
||
73 | switch ($type) { |
||
74 | case 'today': |
||
75 | $defaultValues = date('d/m/Y'); |
||
76 | break; |
||
77 | case 'day': |
||
78 | case 'week': |
||
79 | case 'month': |
||
80 | case 'year': |
||
81 | if ($amount != '') { |
||
82 | $defaultValues = date('d/m/Y', strtotime('+' . $amount . ' ' . $type)); |
||
83 | } |
||
84 | break; |
||
85 | } |
||
86 | } |
||
87 | |||
88 | $datetime = $form->addText($fieldName, $defaultValues); |
||
89 | } else { |
||
90 | $datetime = $form->addTime($fieldName, $defaultValues); |
||
91 | } |
||
92 | $datetime->setAttribute('disabled', 'disabled'); |
||
93 | |||
94 | // get content |
||
95 | $fieldHTML = $datetime->parse(); |
||
96 | } elseif ($field['type'] === 'radiobutton') { |
||
97 | // create element |
||
98 | $rbt = $form->addRadiobutton($fieldName, $values, $defaultValues); |
||
99 | |||
100 | // get content |
||
101 | $fieldHTML = $rbt->parse(); |
||
102 | } elseif ($field['type'] === 'checkbox') { |
||
103 | // rebuild values |
||
104 | $newValues = []; |
||
105 | foreach ((array) $values as $value) { |
||
106 | $newValues[] = ['label' => $value, 'value' => $value]; |
||
107 | } |
||
108 | |||
109 | // create element |
||
110 | $chk = $form->addMultiCheckbox($fieldName, $newValues, $defaultValues); |
||
111 | |||
112 | // get content |
||
113 | $fieldHTML = $chk->parse(); |
||
114 | } elseif ($field['type'] === 'textbox') { |
||
115 | // create element |
||
116 | $txt = $form->addText($fieldName, $defaultValues); |
||
117 | $txt->setAttribute('disabled', 'disabled'); |
||
118 | $txt->setAttribute('placeholder', $placeholder); |
||
119 | |||
120 | // get content |
||
121 | $fieldHTML = $txt->parse(); |
||
122 | } elseif ($field['type'] === 'textarea') { |
||
123 | // create element |
||
124 | $txt = $form->addTextarea($fieldName, $defaultValues); |
||
125 | $txt->setAttribute('cols', 30); |
||
126 | $txt->setAttribute('disabled', 'disabled'); |
||
127 | $txt->setAttribute('placeholder', $placeholder); |
||
128 | |||
129 | // get content |
||
130 | $fieldHTML = $txt->parse(); |
||
131 | } elseif ($field['type'] === 'heading') { |
||
132 | $fieldHTML = '<h3>' . $values . '</h3>'; |
||
133 | } elseif ($field['type'] === 'paragraph') { |
||
134 | $fieldHTML = $values; |
||
135 | } elseif ($field['type'] === 'recaptcha') { |
||
136 | $fieldHTML = '<p>reCAPTCHA</p>'; |
||
137 | } |
||
138 | |||
139 | /* |
||
140 | * Parse the field into the template |
||
141 | */ |
||
142 | // init |
||
143 | $tpl->assign('plaintext', false); |
||
0 ignored issues
–
show
|
|||
144 | $tpl->assign('simple', false); |
||
145 | $tpl->assign('multiple', false); |
||
146 | $tpl->assign('id', $field['id']); |
||
147 | $tpl->assign('required', isset($field['validations']['required'])); |
||
148 | |||
149 | // plaintext items |
||
150 | if (in_array($field['type'], ['heading', 'paragraph', 'recaptcha'])) { |
||
151 | // assign |
||
152 | $tpl->assign('content', $fieldHTML); |
||
153 | $tpl->assign('plaintext', true); |
||
154 | } elseif (in_array($field['type'], ['checkbox', 'radiobutton'])) { |
||
155 | // name (prefixed by type) |
||
156 | $name = ($field['type'] === 'checkbox') ? |
||
157 | 'chk' . \SpoonFilter::ucfirst($fieldName) : |
||
158 | 'rbt' . \SpoonFilter::ucfirst($fieldName) |
||
159 | ; |
||
160 | |||
161 | // rebuild so the html is stored in a general name (and not rbtName) |
||
162 | foreach ($fieldHTML as &$item) { |
||
163 | $item['field'] = $item[$name]; |
||
164 | } |
||
165 | |||
166 | // show multiple |
||
167 | $tpl->assign('label', $field['settings']['label']); |
||
168 | $tpl->assign('items', $fieldHTML); |
||
169 | $tpl->assign('multiple', true); |
||
170 | } else { |
||
171 | // assign |
||
172 | $tpl->assign('label', $field['settings']['label']); |
||
173 | $tpl->assign('field', $fieldHTML); |
||
174 | $tpl->assign('simple', true); |
||
175 | } |
||
176 | |||
177 | return $tpl->getContent(BACKEND_MODULES_PATH . '/FormBuilder/Layout/Templates/Field.html.twig'); |
||
178 | } |
||
179 | |||
180 | // empty field so return empty string |
||
181 | return ''; |
||
182 | } |
||
183 | } |
||
184 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.