• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

letsdrink / ouzo / 5311696506

pending completion
5311696506

push

github

web-flow
Implemented PHP 8.2 support (#302)

55 of 55 new or added lines in 14 files covered. (100.0%)

4949 of 5766 relevant lines covered (85.83%)

98.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

70.0
/src/Ouzo/Core/Helper/FormHelper.php
1
<?php
2
/*
3
 * Copyright (c) Ouzo contributors, https://github.com/letsdrink/ouzo
4
 * This file is made available under the MIT License (view the LICENSE file for more information).
5
 */
6

7
namespace Ouzo\Helper {
8

9
    use Ouzo\I18n;
10
    use Ouzo\Utilities\Arrays;
11
    use Ouzo\Utilities\Functions;
12
    use Ouzo\Utilities\Strings;
13

14
    class FormHelper
15
    {
16
        public static function escapeText(?string $text): ?string
17
        {
18
            return htmlspecialchars($text, ENT_COMPAT);
×
19
        }
20

21
        public static function escapeNewLine(?string $text): ?string
22
        {
23
            return Strings::escapeNewLines($text);
×
24
        }
25

26
        public static function linkTo(string $name, string $href, array $attributes = []): string
27
        {
28
            return HtmlElementRenderer::anchor()
9✔
29
                ->setAttribute("href", $href)
9✔
30
                ->setText($name)
9✔
31
                ->setAttributes($attributes)
9✔
32
                ->render();
9✔
33
        }
34

35
        public static function linkButton(array $params): string
36
        {
37
            $defaultParams = ['class' => 'buttonLong'];
×
38
            $params = array_merge($defaultParams, $params);
×
39
            $url = Arrays::getValue($params, 'url');
×
40
            $urlParams = Arrays::getValue($params, 'params', []);
×
41
            if (!empty($urlParams)) {
×
42
                $query = http_build_query($urlParams);
×
43
                $url .= "/?" . $query;
×
44
            }
45

46
            return HtmlElementRenderer::input('button')
×
47
                ->setNameId($params["name"])
×
48
                ->setClass($params["class"])
×
49
                ->setValue($params["value"])
×
50
                ->setAttribute('onclick', "window.location.href = '{$url}'")
×
51
                ->render();
×
52
        }
53

54
        public static function formButton(array $params): string
55
        {
56
            $defaultParams = ['class' => 'buttonLong'];
×
57
            $params = array_merge($defaultParams, $params);
×
58

59
            return HtmlElementRenderer::input("button")
×
60
                ->setNameId($params["name"])
×
61
                ->setClass($params["class"])
×
62
                ->setValue($params["value"])
×
63
                ->render();
×
64
        }
65

66
        public static function translatableOptions(string $prefix, array $options): array
67
        {
68
            return Arrays::toMap($options, Functions::identity(), fn($key) => I18n::t($prefix . $key));
×
69
        }
70

71
        public static function labelTag(string $name, ?string $content, array $attributes = []): string
72
        {
73
            return HtmlElementRenderer::label()
3✔
74
                ->setAttributes($attributes)
3✔
75
                ->setAttribute("for", $name)
3✔
76
                ->setText($content)
3✔
77
                ->render();
3✔
78
        }
79

80
        public static function hiddenTag(string $name, ?string $value, array $attributes = []): string
81
        {
82
            return HtmlElementRenderer::input("hidden")
15✔
83
                ->setNameId($name)
15✔
84
                ->setAttributes($attributes)
15✔
85
                ->setValue($value)
15✔
86
                ->render();
15✔
87
        }
88

89
        public static function textFieldTag(string $name, ?string $value, array $attributes = []): string
90
        {
91
            return HtmlElementRenderer::input("text")
15✔
92
                ->setNameId($name)
15✔
93
                ->setAttributes($attributes)
15✔
94
                ->setValue($value)
15✔
95
                ->render();
15✔
96
        }
97

98
        public static function textAreaTag(string $name, ?string $content, array $attributes = []): string
99
        {
100
            return HtmlElementRenderer::textarea()
3✔
101
                ->setNameId($name)
3✔
102
                ->setAttributes($attributes)
3✔
103
                ->setText($content ?: '')
3✔
104
                ->render();
3✔
105
        }
106

107
        public static function checkboxTag(string $name, ?string $value, ?bool $checked, array $attributes = []): string
108
        {
109
            $uncheckedSubmitWorkaroundInput = HtmlElementRenderer::input("hidden")
6✔
110
                ->setName($name)
6✔
111
                ->setValue("0")
6✔
112
                ->render();
6✔
113

114
            return $uncheckedSubmitWorkaroundInput .
6✔
115
                HtmlElementRenderer::input("checkbox")
6✔
116
                    ->setNameId($name)
6✔
117
                    ->setAttributes($attributes)
6✔
118
                    ->setValue($value)
6✔
119
                    ->setFlag("checked", $checked)
6✔
120
                    ->render();
6✔
121
        }
122

123
        public static function selectTag(string $name, array $items = [], mixed $value = null, array $attributes = [], string $promptOption = null): string
124
        {
125
            $value = Arrays::toArray($value);
24✔
126

127
            if ($promptOption) {
24✔
128
                $items = [null => $promptOption] + $items;
6✔
129
            }
130

131
            $disabled = Arrays::getValue($attributes, 'readonly') == 'readonly';
24✔
132
            $items = Arrays::mapEntries($items, fn($optionValue, $text) => FormHelper::optionTag($optionValue, $text, $value, $disabled));
24✔
133
            $itemsHtml = implode("\n", $items);
24✔
134
            $itemsHtml = $itemsHtml ? "\n{$itemsHtml}\n" : $itemsHtml;
24✔
135
            return HtmlElementRenderer::select()
24✔
136
                ->setNameId($name)
24✔
137
                ->setAttributes($attributes)
24✔
138
                ->setHtmlContent($itemsHtml)
24✔
139
                ->render();
24✔
140
        }
141

142
        public static function optionTag(?string $value, ?string $text, array $selectedValue, ?bool $disabled): string
143
        {
144
            $selected = Arrays::findKeyByValue($selectedValue, $value) !== false;
24✔
145

146
            return HtmlElementRenderer::element("option", false)
24✔
147
                ->setText($text)
24✔
148
                ->setFlag("selected", $selected)
24✔
149
                ->setDisabled($disabled && !$selected)
24✔
150
                ->setValue($value)
24✔
151
                ->render();
24✔
152
        }
153

154
        public static function passwordFieldTag(string $name, ?string $value, array $attributes = []): string
155
        {
156
            return HtmlElementRenderer::input("password")
3✔
157
                ->setNameId($name)
3✔
158
                ->setAttributes($attributes)
3✔
159
                ->setValue($value)
3✔
160
                ->render();
3✔
161
        }
162

163
        public static function radioButtonTag(string $name, ?string $value, array $attributes = []): string
164
        {
165
            return HtmlElementRenderer::input("radio")
3✔
166
                ->setNameId($name)
3✔
167
                ->setAttributes($attributes)
3✔
168
                ->setValue($value)
3✔
169
                ->render();
3✔
170
        }
171

172
        public static function formTag(?string $url, string $method = 'POST', array $attributes = []): string
173
        {
174
            $method = strtoupper($method);
18✔
175
            $workAroundTag = FormHelper::methodWorkAroundTag($method);
18✔
176
            $method = FormHelper::isUnsupportedMethod($method) ? 'POST' : $method;
18✔
177
            return HtmlElementRenderer::formStart()
18✔
178
                    ->setAttributes($attributes)
18✔
179
                    ->setAttribute("action", $url)
18✔
180
                    ->setAttribute("method", $method)
18✔
181
                    ->render() . $workAroundTag;
18✔
182
        }
183

184
        public static function endFormTag(): string
185
        {
186
            return '</form>';
3✔
187
        }
188

189
        public static function methodWorkAroundTag(string $method): string
190
        {
191
            if (FormHelper::isUnsupportedMethod($method)) {
18✔
192
                return FormHelper::hiddenTag('_method', $method);
9✔
193
            }
194
            return '';
9✔
195
        }
196

197
        private static function isUnsupportedMethod(string $method): bool
198
        {
199
            return in_array($method, ['PUT', 'PATCH', 'DELETE']);
18✔
200
        }
201

202
        public static function formFor(mixed $model): ModelFormBuilder
203
        {
204
            return new ModelFormBuilder($model);
39✔
205
        }
206
    }
207
}
208

209
namespace {
210

211
    use JetBrains\PhpStorm\Deprecated;
212
    use Ouzo\Helper\FormHelper;
213
    use Ouzo\Helper\ModelFormBuilder;
214

215
    #[Deprecated(replacement: "FormHelper::escapeText(%parametersList%)")]
216
    function escapeText(?string $text): ?string
217
    {
218
        return FormHelper::escapeText($text);
×
219
    }
220

221
    #[Deprecated(replacement: "FormHelper::escapeNewLine(%parametersList%)")]
222
    function escapeNewLine(?string $text): ?string
223
    {
224
        return FormHelper::escapeNewLine($text);
×
225
    }
226

227
    #[Deprecated(replacement: "FormHelper::linkTo(%parametersList%)")]
228
    function linkTo(string $name, string $href, array $attributes = []): string
229
    {
230
        return FormHelper::linkTo($name, $href, $attributes);
9✔
231
    }
232

233
    #[Deprecated(replacement: "FormHelper::linkButton(%parametersList%)")]
234
    function linkButton(array $params): string
235
    {
236
        return FormHelper::linkButton($params);
×
237
    }
238

239
    #[Deprecated(replacement: "FormHelper::linkButton(%parametersList%)")]
240
    function formButton(array $params): string
241
    {
242
        return FormHelper::formButton($params);
×
243
    }
244

245
    #[Deprecated(replacement: "FormHelper::translatableOptions(%parametersList%)")]
246
    function translatableOptions(string $prefix, array $options): array
247
    {
248
        return FormHelper::translatableOptions($prefix, $options);
×
249
    }
250

251
    #[Deprecated(replacement: "FormHelper::labelTag(%parametersList%)")]
252
    function labelTag(string $name, string $content, array $attributes = []): string
253
    {
254
        return FormHelper::labelTag($name, $content, $attributes);
×
255
    }
256

257
    #[Deprecated(replacement: "FormHelper::hiddenTag(%parametersList%)")]
258
    function hiddenTag(string $name, ?string $value, array $attributes = []): string
259
    {
260
        return FormHelper::hiddenTag($name, $value, $attributes);
×
261
    }
262

263
    #[Deprecated(replacement: "FormHelper::textFieldTag(%parametersList%)")]
264
    function textFieldTag(string $name, ?string $value, array $attributes = []): string
265
    {
266
        return FormHelper::textFieldTag($name, $value, $attributes);
×
267
    }
268

269
    #[Deprecated(replacement: "FormHelper::textAreaTag(%parametersList%)")]
270
    function textAreaTag(string $name, ?string $content, array $attributes = []): string
271
    {
272
        return FormHelper::textAreaTag($name, $content, $attributes);
×
273
    }
274

275
    #[Deprecated(replacement: "FormHelper::checkboxTag(%parametersList%)")]
276
    function checkboxTag(string $name, ?string $value, ?bool $checked, array $attributes = []): string
277
    {
278
        return FormHelper::checkboxTag($name, $value, $checked, $attributes);
×
279
    }
280

281
    #[Deprecated(replacement: "FormHelper::selectTag(%parametersList%)")]
282
    function selectTag(string $name, array $items = [], mixed $value = null, array $attributes = [], string $promptOption = null): string
283
    {
284
        return FormHelper::selectTag($name, $items, $value, $attributes, $promptOption);
15✔
285
    }
286

287
    #[Deprecated(replacement: "FormHelper::optionTag(%parametersList%)")]
288
    function optionTag(string $value, string $name, array $current, ?bool $disabled): string
289
    {
290
        return FormHelper::optionTag($value, $name, $current, $disabled);
×
291
    }
292

293
    #[Deprecated(replacement: "FormHelper::passwordFieldTag(%parametersList%)")]
294
    function passwordFieldTag(string $name, ?string $value, array $attributes = []): string
295
    {
296
        return FormHelper::passwordFieldTag($name, $value, $attributes);
×
297
    }
298

299
    #[Deprecated(replacement: "FormHelper::radioButtonTag(%parametersList%)")]
300
    function radioButtonTag(string $name, ?string $value, array $attributes = []): string
301
    {
302
        return FormHelper::radioButtonTag($name, $value, $attributes);
3✔
303
    }
304

305
    #[Deprecated(replacement: "FormHelper::formTag(%parametersList%)")]
306
    function formTag(string $url, string $method = 'POST', array $attributes = []): string
307
    {
308
        return FormHelper::formTag($url, $method, $attributes);
15✔
309
    }
310

311
    #[Deprecated(replacement: "FormHelper::endFormTag()")]
312
    function endFormTag(): string
313
    {
314
        return FormHelper::endFormTag();
×
315
    }
316

317
    #[Deprecated(replacement: "FormHelper::formFor(%parametersList%)")]
318
    function formFor(mixed $model): ModelFormBuilder
319
    {
320
        return FormHelper::formFor($model);
39✔
321
    }
322
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc