Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 1
<?php
2
/**
3
 * Smarty plugin
4
 *
5
 * @package    Smarty
6
 * @subpackage PluginsFunction
7
 */
8
/**
9
 * Smarty {html_radios} function plugin
10
 * File:       function.html_radios.php
11
 * Type:       function
12
 * Name:       html_radios
13
 * Date:       24.Feb.2003
14
 * Purpose:    Prints out a list of radio input types
15
 * Params:
16
 *
17
 * - name       (optional) - string default "radio"
18
 * - values     (required) - array
19
 * - options    (required) - associative array
20
 * - checked    (optional) - array default not set
21
 * - separator  (optional) - ie <br> or &nbsp;
22
 * - output     (optional) - the output next to each radio button
23
 * - assign     (optional) - assign the output as an array to this variable
24
 * - escape     (optional) - escape the content (not value), defaults to true
25
 *
26
 * Examples:
27
 *
28
 * {html_radios values=$ids output=$names}
29
 * {html_radios values=$ids name='box' separator='<br>' output=$names}
30
 * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
31
 *
32
 * @link    http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
33
 *          (Smarty online manual)
34
 * @author  Christopher Kvarme <christopher.kvarme@flashjab.com>
35
 * @author  credits to Monte Ohrt <monte at ohrt dot com>
36
 * @version 1.0
37
 *
38
 * @param array                    $params   parameters
39
 * @param Smarty_Internal_Template $template template object
40
 *
41
 * @return string
42
 * @uses    smarty_function_escape_special_chars()
43
 * @throws \SmartyException
44
 */
45
function smarty_function_html_radios($params, Smarty_Internal_Template $template)
46
{
47
    $template->_checkPlugins(
48
        array(
49
            array(
50
                'function' => 'smarty_function_escape_special_chars',
51
                'file'     => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
52
            )
53
        )
54
    );
55
    $name = 'radio';
56
    $values = null;
57
    $options = null;
58
    $selected = null;
59
    $separator = '';
60
    $escape = true;
61
    $labels = true;
62
    $label_ids = false;
63
    $output = null;
64
    $extra = '';
65
    foreach ($params as $_key => $_val) {
66
        switch ($_key) {
67
            case 'name':
68
            case 'separator':
69
                $$_key = (string)$_val;
70
                break;
71
            case 'checked':
72
            case 'selected':
73
                if (is_array($_val)) {
74
                    trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
75
                } elseif (is_object($_val)) {
76
                    if (method_exists($_val, '__toString')) {
77
                        $selected = smarty_function_escape_special_chars((string)$_val->__toString());
78
                    } else {
79
                        trigger_error(
80
                            'html_radios: selected attribute is an object of class \'' . get_class($_val) .
81
                            '\' without __toString() method',
82
                            E_USER_NOTICE
83
                        );
84
                    }
85
                } else {
86
                    $selected = (string)$_val;
87
                }
88
                break;
89
            case 'escape':
90
            case 'labels':
91
            case 'label_ids':
92
                $$_key = (bool)$_val;
93
                break;
94
            case 'options':
95
                $$_key = (array)$_val;
96
                break;
97
            case 'values':
98
            case 'output':
99
                $$_key = array_values((array)$_val);
100
                break;
101
            case 'radios':
102
                trigger_error(
103
                    'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
104
                    E_USER_WARNING
105
                );
106
                $options = (array)$_val;
107
                break;
108
            case 'assign':
109
                break;
110
            case 'strict':
111
                break;
112
            case 'disabled':
113
            case 'readonly':
114
                if (!empty($params[ 'strict' ])) {
115
                    if (!is_scalar($_val)) {
116
                        trigger_error(
117
                            "html_options: {$_key} attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute",
118
                            E_USER_NOTICE
119
                        );
120
                    }
121
                    if ($_val === true || $_val === $_key) {
122
                        $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
123
                    }
124
                    break;
125
                }
126
            // omit break; to fall through!
127
            // no break
128
            default:
129
                if (!is_array($_val)) {
130
                    $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
131
                } else {
132
                    trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
133
                }
134
                break;
135
        }
136
    }
137
    if (!isset($options) && !isset($values)) {
138
        /* raise error here? */
139
        return '';
140
    }
141
    $_html_result = array();
142
    if (isset($options)) {
143
        foreach ($options as $_key => $_val) {
144
            $_html_result[] =
145
                smarty_function_html_radios_output(
146
                    $name,
147
                    $_key,
148
                    $_val,
149
                    $selected,
150
                    $extra,
151
                    $separator,
152
                    $labels,
153
                    $label_ids,
154
                    $escape
155
                );
156
        }
157
    } else {
158
        foreach ($values as $_i => $_key) {
159
            $_val = isset($output[ $_i ]) ? $output[ $_i ] : '';
160
            $_html_result[] =
161
                smarty_function_html_radios_output(
162
                    $name,
163
                    $_key,
164
                    $_val,
165
                    $selected,
166
                    $extra,
167
                    $separator,
168
                    $labels,
169
                    $label_ids,
170
                    $escape
171
                );
172
        }
173
    }
174
    if (!empty($params[ 'assign' ])) {
175
        $template->assign($params[ 'assign' ], $_html_result);
176
    } else {
177
        return implode("\n", $_html_result);
178
    }
179
}
180
 
181
/**
182
 * @param $name
183
 * @param $value
184
 * @param $output
185
 * @param $selected
186
 * @param $extra
187
 * @param $separator
188
 * @param $labels
189
 * @param $label_ids
190
 * @param $escape
191
 *
192
 * @return string
193
 */
194
function smarty_function_html_radios_output(
195
    $name,
196
    $value,
197
    $output,
198
    $selected,
199
    $extra,
200
    $separator,
201
    $labels,
202
    $label_ids,
203
    $escape
204
) {
205
    $_output = '';
206
    if (is_object($value)) {
207
        if (method_exists($value, '__toString')) {
208
            $value = (string)$value->__toString();
209
        } else {
210
            trigger_error(
211
                'html_options: value is an object of class \'' . get_class($value) .
212
                '\' without __toString() method',
213
                E_USER_NOTICE
214
            );
215
            return '';
216
        }
217
    } else {
218
        $value = (string)$value;
219
    }
220
    if (is_object($output)) {
221
        if (method_exists($output, '__toString')) {
222
            $output = (string)$output->__toString();
223
        } else {
224
            trigger_error(
225
                'html_options: output is an object of class \'' . get_class($output) .
226
                '\' without __toString() method',
227
                E_USER_NOTICE
228
            );
229
            return '';
230
        }
231
    } else {
232
        $output = (string)$output;
233
    }
234
    if ($labels) {
235
        if ($label_ids) {
236
            $_id = smarty_function_escape_special_chars(
237
                preg_replace(
238
                    '![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER,
239
                    '_',
240
                    $name . '_' . $value
241
                )
242
            );
243
            $_output .= '<label for="' . $_id . '">';
244
        } else {
245
            $_output .= '<label>';
246
        }
247
    }
248
    $name = smarty_function_escape_special_chars($name);
249
    $value = smarty_function_escape_special_chars($value);
250
    if ($escape) {
251
        $output = smarty_function_escape_special_chars($output);
252
    }
253
    $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
254
    if ($labels && $label_ids) {
255
        $_output .= ' id="' . $_id . '"';
256
    }
257
    if ($value === $selected) {
258
        $_output .= ' checked="checked"';
259
    }
260
    $_output .= $extra . ' />' . $output;
261
    if ($labels) {
262
        $_output .= '</label>';
263
    }
264
    $_output .= $separator;
265
    return $_output;
266
}