Passed
Push — master ( 8eed1b...0078d2 )
by Enjoys
14:21
created

HtmlRenderer::rendererElement()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 4
c 1
b 0
f 1
dl 0
loc 7
ccs 0
cts 5
cp 0
rs 10
cc 2
nc 2
nop 1
crap 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Enjoys\Forms\Renderer\Html;
6
7
use Enjoys\Forms\Element;
8
use Enjoys\Forms\Elements;
9
use Enjoys\Forms\Elements\Hidden;
10
use Enjoys\Forms\Helper;
11
use Enjoys\Forms\Interfaces\RendererInterface;
12
use Enjoys\Forms\Renderer\Html\TypesRender\TypeRenderInterface;
13
use Enjoys\Forms\Renderer\Renderer;
14
15
class HtmlRenderer extends Renderer implements RendererInterface
0 ignored issues
show
Deprecated Code introduced by
The interface Enjoys\Forms\Interfaces\RendererInterface has been deprecated: remove in 6.x ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

15
class HtmlRenderer extends Renderer implements /** @scrutinizer ignore-deprecated */ RendererInterface

This interface has been deprecated. The supplier of the interface has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the interface will be removed and what other interface to use instead.

Loading history...
16
{
17
    private const _MAP_ = [
18
        TypesRender\Button::class => [
19
            Elements\Button::class,
20
            Elements\Submit::class,
21
            Elements\Reset::class,
22
            Elements\Image::class
23
        ],
24
        TypesRender\Radio::class => [
25
            Elements\Radio::class,
26
            Elements\Checkbox::class
27
        ],
28
        TypesRender\Select::class => Elements\Select::class,
29
        TypesRender\Html::class => [
30
            Elements\Html::class,
31
            Elements\Header::class
32
        ]
33
    ];
34
35 22
    public static function createTypeRender(Element $element): TypeRenderInterface
36
    {
37
        /** @var false|string $typeRenderClass */
38 22
        $typeRenderClass = Helper::arrayRecursiveSearchKeyMap(get_class($element), self::_MAP_)[0] ?? false;
39 22
        if ($typeRenderClass === false || !class_exists($typeRenderClass)) {
0 ignored issues
show
introduced by
The condition $typeRenderClass === false is always true.
Loading history...
40 12
            return new TypesRender\Input($element);
41
        }
42
        /** @var class-string<TypeRenderInterface> $typeRenderClass */
43 13
        return new $typeRenderClass($element);
44
    }
45
46 1
    public function rendererHiddenElements(): string
47
    {
48 1
        $html = [];
49 1
        foreach ($this->getForm()->getElements() as $element) {
50 1
            if ($element instanceof Hidden) {
51 1
                $this->getForm()->removeElement($element);
52 1
                $html[] = $element->baseHtml();
53
            }
54
        }
55 1
        return implode("\n", $html);
56
    }
57
58 1
    public function rendererElements(): string
59
    {
60 1
        $html = [];
61 1
        foreach ($this->getForm()->getElements() as $element) {
62 1
            $html[] = "<div>" . self::createTypeRender($element)->render() . "</div>";
63
        }
64 1
        return implode("\n", $html);
65
    }
66
67
    public function rendererElement(string $elementName): string
68
    {
69
        $element = $this->getForm()->getElement($elementName);
70
        if ($element === null) {
71
            return '';
72
        }
73
        return "<div>" . self::createTypeRender($element)->render() . "</div>";
74
    }
75
76 1
    public function output(): string
77
    {
78 1
        return sprintf(
79 1
            "<form%s>\n%s\n%s\n</form>",
80 1
            $this->getForm()->getAttributesString(),
81 1
            $this->rendererHiddenElements(),
82 1
            $this->rendererElements()
83 1
        );
84
    }
85
}
86