Completed
Push — master ( 7150c8...077dd8 )
by Derek Stephen
9s
created

AbstractFieldRender::createFieldBlock()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 0
crap 1
1
<?php
2
/**
3
 * User: delboy1978uk
4
 * Date: 04/12/2016
5
 * Time: 23:13
6
 */
7
8
namespace Del\Form\Renderer\Field;
9
10
use Del\Form\Field\FieldInterface;
11
use Del\Form\Renderer\Field\Error\DefaultErrorRender;
12
use Del\Form\Renderer\Field\Error\ErrorRendererInterface;
13
use DOMDocument;
14
use DOMElement;
15
16
abstract class AbstractFieldRender
17
{
18
    /** @var DOMDocument $dom  */
19
    protected $dom;
20
21
    /** @var bool $displayErrors */
22
    private $displayErrors;
23
24
    /** @var ErrorRendererInterface $errorRenderer */
25
    private $errorRenderer;
26
27
    /**
28
     * @param DOMDocument $dom
29
     * @return DOMElement
30
     */
31 5
    public function render(DOMDocument $dom, FieldInterface $field, $displayErrors = true)
32
    {
33 5
        $this->displayErrors = $displayErrors;
34 5
        $this->dom = $dom;
35 5
        $this->errorRenderer = new DefaultErrorRender($this->dom);
36 5
        $renderedField = $this->createFieldDom($field);
37 5
        return $renderedField;
38
    }
39
40
41
    /**
42
     * @param FieldInterface $field
43
     * @return DOMElement
44
     */
45 5
    private function createFieldDOM(FieldInterface $field)
46
    {
47 5
        $fieldBlock = $this->createFieldBlock();
48 5
        $labelBlock = $this->createLabelBlock($field);
49 5
        $element = $this->createElement($field);
50 5
        $errorBlock = $this->createErrorBlock($fieldBlock, $field);
51 5
        return $field->getRenderer()->renderFieldBlock($field, $fieldBlock, $labelBlock, $element, $errorBlock);
52
    }
53
54
    /**
55
     * @param FieldInterface $field
56
     * @return DOMElement|null
57
     */
58 5
    public function createErrorBlock(DOMElement $fieldBlock, FieldInterface $field)
59
    {
60 5
        $errorBlock = null;
61 5
        if (!$field->isValid() && $this->displayErrors === true) {
62 2
            $fieldBlock->setAttribute('class', 'form-group has-error');
63 2
            $errorBlock = $this->errorRenderer->render($field);
64
        }
65 5
        return $errorBlock;
66
    }
67
68
    /**
69
     * @param $formGroup
70
     * @param $field
71
     * @return DOMElement
72
     */
73 5
    public function createLabelBlock(FieldInterface $field)
74
    {
75 5
        $label = $this->dom->createElement('label');
76 5
        $label->setAttribute('for', $field->getId());
77 5
        $label->textContent = $field->getLabel();
78 5
        return $label;
79
    }
80
81
    /**
82
     * @return DOMElement
83
     */
84 5
    public function createFieldBlock()
85
    {
86 5
        $formGroup = $this->dom->createElement('div');
87 5
        $formGroup->setAttribute('class', 'form-group');
88 5
        return $formGroup;
89
    }
90
91
    /**
92
     * @param FieldInterface $field
93
     * @return DOMElement
94
     */
95 5
    public function createElement(FieldInterface $field)
96
    {
97 5
        $element = $this->dom->createElement($field->getTag());
98
99 5
        foreach ($field->getAttributes() as $key => $value) {
100 5
            $element->setAttribute($key, $value);
101
        }
102 5
        return $element;
103
    }
104
}