Completed
Push — master ( 29f185...9200bf )
by Michael
18s
created

ElementTray::isRequired()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
c 1
b 0
f 0
cc 3
eloc 5
nc 3
nop 0
crap 3
1
<?php
2
/*
3
 You may not change or alter any portion of this comment or credits
4
 of supporting developers from this source code or any supporting source code
5
 which is considered copyrighted (c) material of the original comment or credit authors.
6
7
 This program is distributed in the hope that it will be useful,
8
 but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
*/
11
12
namespace Xoops\Form;
13
14
/**
15
 * ElementTray - a group of form elements
16
 *
17
 * @category  Xoops\Form\ElementTray
18
 * @package   Xoops\Form
19
 * @author    Kazumi Ono <[email protected]>
20
 * @copyright 2001-2016 XOOPS Project (http://xoops.org)
21
 * @license   GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
22
 * @link      http://xoops.org
23
 */
24
class ElementTray extends Element implements ContainerInterface
25
{
26
    /**
27
     * array of form element objects
28
     *
29
     * @var Element[]
30
     */
31
    protected $elements = array();
32
33
    /**
34
     * __construct
35
     *
36
     * @param string|array $caption caption or array of all attributes
37
     *                               Control attributes:
38
     *                                   :joiner joiner for elements in tray
39
     * @param string       $joiner  joiner for elements in tray
40
     * @param string       $name    name
41
     */
42 1 View Code Duplication
    public function __construct($caption, $joiner = '&nbsp;', $name = '')
43
    {
44 1
        if (is_array($caption)) {
45
            parent::__construct($caption);
46
            $this->setIfNotSet(':joiner', '&nbsp;');
47
        } else {
48 1
            parent::__construct();
49 1
            $this->setName($name);
50 1
            $this->setCaption($caption);
51 1
            $this->set(':joiner', $joiner);
52
        }
53 1
    }
54
55
    /**
56
     * Are there are required elements?
57
     *
58
     * @return bool
59
     */
60 2
    public function isRequired()
61
    {
62 2
        foreach ($this->elements as $el) {
63 2
            if ($el->isRequired()) {
64 2
                return true;
65
            }
66
        }
67 2
        return false;
68
    }
69
70
    /**
71
     * Add an element to the tray
72
     *
73
     * @param Element $formElement Element to add
74
     * @param boolean $required    true = entry required
75
     *
76
     * @return void
77
     */
78 1
    public function addElement(Element $formElement, $required = false)
79
    {
80 1
        $this->elements[] = $formElement;
81 1
        if ($required) {
82
            $formElement->setRequired();
83
        }
84 1
    }
85
86
    // ContainerInterface
87
    /**
88
     * get an array of "required" form elements
89
     *
90
     * @return array array of Element objects
91
     */
92 View Code Duplication
    public function getRequired()
93
    {
94
        $required = [];
95
        foreach ($this->elements as $el) {
96
            if ($el->isRequired()) {
97
                $required[] = $el;
98
            }
99
        }
100
        return $required;
101
    }
102
103
    /**
104
     * Get an array of the elements in this group
105
     *
106
     * @param bool $recurse get elements recursively?
107
     *
108
     * @return array Array of Element objects.
109
     */
110 1 View Code Duplication
    public function getElements($recurse = false)
111
    {
112 1
        if (!$recurse) {
113 1
            return $this->elements;
114
        } else {
115 1
            $ret = array();
116 1
            foreach ($this->elements as $ele) {
117 1
                if ($ele instanceof ContainerInterface) {
118
                    /* @var ContainerInterface $ele */
119
                    $elements = $ele->getElements(true);
120
                    foreach ($elements as $ele2) {
121
                        $ret[] = $ele2;
122
                    }
123
                    unset($elements);
124
                    unset($ele2);
125
                } else {
126 1
                    $ret[] = $ele;
127
                }
128 1
                unset($ele);
129
            }
130 1
            return $ret;
131
        }
132
    }
133
134
    /**
135
     * Get the delimiter of this group
136
     *
137
     * @param boolean $encode True to encode special characters
138
     *
139
     * @return string The delimiter
140
     */
141 1
    protected function getJoiner($encode = false)
142
    {
143 1
        $joiner = $this->get(':joiner');
144 1
        return $encode ? htmlspecialchars(str_replace('&nbsp;', ' ', $joiner)) : $joiner;
145
    }
146
147
    /**
148
     * prepare HTML to output this group
149
     *
150
     * @return string HTML output
151
     */
152 5
    public function render()
153
    {
154 5
        $count = 0;
155 5
        $ret = "<div class=\"form-inline\">";
156 5
        foreach ($this->getElements() as $ele) {
157
            /* @var Element $ele */
158 4
            if ($count > 0) {
159 3
                $ret .= $this->getJoiner();
160
            }
161 4
            if ($ele->getCaption() != '') {
162
                $ret .= '<div class="form-group">';
163
                $ret .= '<label class="control-label">' . $ele->getCaption() . "</label>&nbsp;";
164
                $ret .= '</div>';
165
            }
166 4
            $ret .= $ele->render() . "\n";
167 4
            if (!$ele->isHidden()) {
168 4
                ++$count;
169
            }
170
        }
171 5
        $ret .= '</div>';
172 5
        return $ret;
173
    }
174
}
175