Issues (3083)

htdocs/class/xoopsform/formcheckbox.php (1 issue)

1
<?php
2
/**
3
 * XOOPS form checkbox compo
4
 *
5
 * You may not change or alter any portion of this comment or credits
6
 * of supporting developers from this source code or any supporting source code
7
 * which is considered copyrighted (c) material of the original comment or credit authors.
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * @copyright       (c) 2000-2017 XOOPS Project (www.xoops.org)
13
 * @license             GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html)
14
 * @package             kernel
15
 * @since               2.0
16
 * @author              Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/, http://jp.xoops.org/
17
 * @author              Skalpa Keo <[email protected]>
18
 * @author              Taiwen Jiang <[email protected]>
19
 */
20
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
21
22
xoops_load('XoopsFormElement');
23
24
/**
25
 * Class XoopsFormCheckBox
26
 */
27
class XoopsFormCheckBox extends XoopsFormElement
28
{
29
    /**
30
     * Availlable options
31
     *
32
     * @var array
33
     * @access private
34
     */
35
    public $_options = array();
36
37
    /**
38
     * pre-selected values in array
39
     *
40
     * @var array
41
     * @access private
42
     */
43
    public $_value = array();
44
45
    /**
46
     * HTML to seperate the elements
47
     *
48
     * @var string
49
     * @access private
50
     */
51
    public $_delimeter;
52
53
    /**
54
     * Columns per line for rendering
55
     * Leave unset (null) to put all options in one line
56
     * Set to 1 to put each option on its own line
57
     * Any other positive integer 'n' to put 'n' options on each line
58
     *
59
     * @var int
60
     * @access public
61
     */
62
    public $columns;
63
64
    /**
65
     * Constructor
66
     *
67
     * @param string $caption
68
     * @param string $name
69
     * @param mixed  $value Either one value as a string or an array of them.
70
     * @param string $delimeter
71
     */
72
    public function __construct($caption, $name, $value = null, $delimeter = '&nbsp;')
73
    {
74
        $this->setCaption($caption);
75
        $this->setName($name);
76
        if (isset($value)) {
77
            $this->setValue($value);
78
        }
79
        $this->_delimeter = $delimeter;
80
        $this->setFormType('checkbox');
0 ignored issues
show
Deprecated Code introduced by
The function XoopsFormElement::setFormType() has been deprecated: PLEASE AVOID USING THIS METHOD ( Ignorable by Annotation )

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

80
        /** @scrutinizer ignore-deprecated */ $this->setFormType('checkbox');

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

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

Loading history...
81
    }
82
83
    /**
84
     * Get the "value"
85
     *
86
     * @param  bool $encode To sanitizer the text?
87
     * @return array
88
     */
89
    public function getValue($encode = false)
90
    {
91
        if (!$encode) {
92
            return $this->_value;
93
        }
94
        $value = array();
95
        foreach ($this->_value as $val) {
96
            $value[] = $val ? htmlspecialchars($val, ENT_QUOTES | ENT_HTML5) : $val;
97
        }
98
99
        return $value;
100
    }
101
102
    /**
103
     * Set the "value"
104
     *
105
     * @param array $value
106
     *
107
     */
108
    public function setValue($value)
109
    {
110
        $this->_value = array();
111
        if (is_array($value)) {
112
            foreach ($value as $v) {
113
                $this->_value[] = $v;
114
            }
115
        } else {
116
            $this->_value[] = $value;
117
        }
118
    }
119
120
    /**
121
     * Add an option
122
     *
123
     * @param string $value
124
     * @param string $name
125
     */
126
    public function addOption($value, $name = '')
127
    {
128
        if ($name != '') {
129
            $this->_options[$value] = $name;
130
        } else {
131
            $this->_options[$value] = $value;
132
        }
133
    }
134
135
    /**
136
     * Add multiple Options at once
137
     *
138
     * @param array $options Associative array of value->name pairs
139
     */
140
    public function addOptionArray($options)
141
    {
142
        if (is_array($options)) {
143
            foreach ($options as $k => $v) {
144
                $this->addOption($k, $v);
145
            }
146
        }
147
    }
148
149
    /**
150
     * Get an array with all the options
151
     *
152
     * @param  bool|int $encode To sanitizer the text? potential values: 0 - skip; 1 - only for value; 2 - for both value and name
153
     * @return array    Associative array of value->name pairs
154
     */
155
    public function getOptions($encode = false)
156
    {
157
        if (!$encode) {
158
            return $this->_options;
159
        }
160
        $value = array();
161
        foreach ($this->_options as $val => $name) {
162
            $value[$encode ? htmlspecialchars($val, ENT_QUOTES | ENT_HTML5) : $val] = ($encode > 1) ? htmlspecialchars($name, ENT_QUOTES | ENT_HTML5) : $name;
163
        }
164
165
        return $value;
166
    }
167
168
    /**
169
     * Get the delimiter of this group
170
     *
171
     * @param  bool $encode To sanitizer the text?
172
     * @return string The delimiter
173
     */
174
    public function getDelimeter($encode = false)
175
    {
176
        return $encode ? htmlspecialchars(str_replace('&nbsp;', ' ', $this->_delimeter), ENT_QUOTES | ENT_HTML5) : $this->_delimeter;
177
    }
178
179
    /**
180
     * prepare HTML for output
181
     *
182
     * @return string
183
     */
184
    public function render()
185
    {
186
        return XoopsFormRenderer::getInstance()->get()->renderFormCheckBox($this);
187
    }
188
189
    /**
190
     * Render custom javascript validation code
191
     *
192
     * @seealso XoopsForm::renderValidationJS
193
     */
194
    public function renderValidationJS()
195
    {
196
        // render custom validation code if any
197
        if (!empty($this->customValidationCode)) {
198
            return implode(NWLINE, $this->customValidationCode);
199
            // generate validation code if required
200
        } elseif ($this->isRequired()) {
201
            $eltname    = $this->getName();
202
            $eltcaption = $this->getCaption();
203
            $eltmsg     = empty($eltcaption) ? sprintf(_FORM_ENTER, $eltname) : sprintf(_FORM_ENTER, $eltcaption);
204
            $eltmsg     = str_replace('"', '\"', stripslashes($eltmsg));
205
206
            return NWLINE . "var hasChecked = false; var checkBox = myform.elements['{$eltname}']; if (checkBox.length) {for (var i = 0; i < checkBox.length; i++) {if (checkBox[i].checked == true) {hasChecked = true; break;}}} else {if (checkBox.checked == true) {hasChecked = true;}}if (!hasChecked) {window.alert(\"{$eltmsg}\");if (checkBox.length) {checkBox[0].focus();} else {checkBox.focus();}return false;}";
207
        }
208
209
        return '';
210
    }
211
}
212