1: <?php
2:
3: /**
4: * XOOPS form radio compo
5: *
6: * You may not change or alter any portion of this comment or credits
7: * of supporting developers from this source code or any supporting source code
8: * which is considered copyrighted (c) material of the original comment or credit authors.
9: * This program is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12: *
13: * @copyright (c) 2000-2017 XOOPS Project (www.xoops.org)
14: * @license GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html)
15: * @package kernel
16: * @since 2.0
17: * @author Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/, http://jp.xoops.org/
18: * @author Taiwen Jiang <phppp@users.sourceforge.net>
19: * @package kernel
20: * @subpackage form
21: * @todo template
22: */
23: class XoopsFormRadio extends XoopsFormElement
24: {
25: /**
26: * Array of Options
27: *
28: * @var array
29: * @access private
30: */
31: public $_options = array();
32:
33: /**
34: * Pre-selected value
35: *
36: * @var string
37: * @access private
38: */
39: public $_value;
40:
41: /**
42: * Columns per line for rendering
43: * Leave unset (null) to put all options in one line
44: * Set to 1 to put each option on its own line
45: * Any other positive integer 'n' to put 'n' options on each line
46: *
47: * @var int
48: * @access public
49: */
50: public $columns;
51:
52: /**
53: * HTML to seperate the elements
54: *
55: * @var string
56: * @access private
57: */
58: public $_delimeter;
59:
60: /**
61: * Constructor
62: *
63: * @param string $caption Caption
64: * @param string $name "name" attribute
65: * @param string|null $value Pre-selected value
66: * @param string $delimeter
67: */
68: public function __construct($caption, $name, $value = null, $delimeter = '&nbsp;')
69: {
70: $this->setCaption($caption);
71: $this->setName($name);
72: if (isset($value)) {
73: $this->setValue($value);
74: }
75: $this->_delimeter = $delimeter;
76: }
77:
78: /**
79: * Get the "value" attribute
80: *
81: * @param bool $encode To sanitizer the text?
82: * @return string
83: */
84: public function getValue($encode = false)
85: {
86: return ($encode && $this->_value !== null) ? htmlspecialchars($this->_value, ENT_QUOTES) : $this->_value;
87: }
88:
89: /**
90: * Set the pre-selected value
91: *
92: * @param string $value
93: */
94: public function setValue($value)
95: {
96: $this->_value = $value;
97: }
98:
99: /**
100: * Add an option
101: *
102: * @param string $value "value" attribute - This gets submitted as form-data.
103: * @param string $name "name" attribute - This is displayed. If empty, we use the "value" instead.
104: */
105: public function addOption($value, $name = '')
106: {
107: if ($name != '') {
108: $this->_options[$value] = $name;
109: } else {
110: $this->_options[$value] = $value;
111: }
112: }
113:
114: /**
115: * Adds multiple options
116: *
117: * @param array $options Associative array of value->name pairs.
118: */
119: public function addOptionArray($options)
120: {
121: if (is_array($options)) {
122: foreach ($options as $k => $v) {
123: $this->addOption($k, $v);
124: }
125: }
126: }
127:
128: /**
129: * Get an array with all the options
130: *
131: * @param bool|int $encode To sanitizer the text? potential values: 0 - skip; 1 - only for value; 2 - for both value and name
132: *
133: * @return array Associative array of value->name pairs
134: */
135: public function getOptions($encode = false)
136: {
137: if (!$encode) {
138: return $this->_options;
139: }
140: $value = array();
141: foreach ($this->_options as $val => $name) {
142: $value[$encode ? htmlspecialchars($val, ENT_QUOTES) : $val] = ($encode > 1) ? htmlspecialchars($name, ENT_QUOTES) : $name;
143: }
144:
145: return $value;
146: }
147:
148: /**
149: * Get the delimiter of this group
150: *
151: * @param bool $encode To sanitizer the text?
152: * @return string The delimiter
153: */
154: public function getDelimeter($encode = false)
155: {
156: return $encode ? htmlspecialchars(str_replace('&nbsp;', ' ', $this->_delimeter), ENT_QUOTES) : $this->_delimeter;
157: }
158:
159: /**
160: * Prepare HTML for output
161: *
162: * @return string HTML
163: */
164: public function render()
165: {
166: return XoopsFormRenderer::getInstance()->get()->renderFormRadio($this);
167: }
168: }
169: