]> git.mxchange.org Git - friendica.git/blob - library/Smarty/libs/plugins/function.html_radios.php
Merge branch 'master' into blog-like
[friendica.git] / library / Smarty / libs / plugins / function.html_radios.php
1 <?php
2 /**
3  * Smarty plugin
4  * 
5  * @package Smarty
6  * @subpackage PluginsFunction
7  */
8
9 /**
10  * Smarty {html_radios} function plugin
11  * 
12  * File:       function.html_radios.php<br>
13  * Type:       function<br>
14  * Name:       html_radios<br>
15  * Date:       24.Feb.2003<br>
16  * Purpose:    Prints out a list of radio input types<br>
17  * Params:
18  * <pre>
19  * - name       (optional) - string default "radio"
20  * - values     (required) - array
21  * - options    (required) - associative array
22  * - checked    (optional) - array default not set
23  * - separator  (optional) - ie <br> or &nbsp;
24  * - output     (optional) - the output next to each radio button
25  * - assign     (optional) - assign the output as an array to this variable
26  * - escape     (optional) - escape the content (not value), defaults to true
27  * </pre>
28  * Examples:
29  * <pre>
30  * {html_radios values=$ids output=$names}
31  * {html_radios values=$ids name='box' separator='<br>' output=$names}
32  * {html_radios values=$ids checked=$checked separator='<br>' output=$names}
33  * </pre>
34  * 
35  * @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
36  *      (Smarty online manual)
37  * @author Christopher Kvarme <christopher.kvarme@flashjab.com> 
38  * @author credits to Monte Ohrt <monte at ohrt dot com> 
39  * @version 1.0
40  * @param array                    $params   parameters
41  * @param Smarty_Internal_Template $template template object
42  * @return string 
43  * @uses smarty_function_escape_special_chars()
44  */
45 function smarty_function_html_radios($params, $template)
46 {
47     require_once(SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php');
48
49     $name = 'radio';
50     $values = null;
51     $options = null;
52     $selected = null;
53     $separator = '';
54     $escape = true;
55     $labels = true;
56     $label_ids = false;
57     $output = null;
58     $extra = '';
59
60     foreach($params as $_key => $_val) {
61         switch ($_key) {
62             case 'name':
63             case 'separator':
64                 $$_key = (string) $_val;
65                 break;
66
67             case 'checked':
68             case 'selected':
69                 if (is_array($_val)) {
70                     trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
71                 } elseif (is_object($_val)) {
72                     if (method_exists($_val, "__toString")) {
73                         $selected = smarty_function_escape_special_chars((string) $_val->__toString());
74                     } else {
75                         trigger_error("html_radios: selected attribute is an object of class '". get_class($_val) ."' without __toString() method", E_USER_NOTICE);
76                     }
77                 } else {
78                     $selected = (string) $_val;
79                 } 
80                 break;
81
82             case 'escape':
83             case 'labels':
84             case 'label_ids':
85                 $$_key = (bool) $_val;
86                 break;
87
88             case 'options':
89                 $$_key = (array) $_val;
90                 break;
91
92             case 'values':
93             case 'output':
94                 $$_key = array_values((array) $_val);
95                 break;
96
97             case 'radios':
98                 trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING);
99                 $options = (array) $_val;
100                 break;
101
102             case 'assign':
103                 break;
104
105             default:
106                 if (!is_array($_val)) {
107                     $extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
108                 } else {
109                     trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
110                 } 
111                 break;
112         } 
113     } 
114
115     if (!isset($options) && !isset($values)) {
116         /* raise error here? */
117         return '';
118     }
119
120     $_html_result = array();
121
122     if (isset($options)) {
123         foreach ($options as $_key => $_val) {
124             $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
125         }
126     } else {
127         foreach ($values as $_i => $_key) {
128             $_val = isset($output[$_i]) ? $output[$_i] : '';
129             $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $escape);
130         } 
131     } 
132
133     if (!empty($params['assign'])) {
134         $template->assign($params['assign'], $_html_result);
135     } else {
136         return implode("\n", $_html_result);
137     } 
138
139
140 function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $escape)
141 {
142     $_output = '';
143     
144     if (is_object($value)) {
145         if (method_exists($value, "__toString")) {
146             $value = (string) $value->__toString();
147         } else {
148             trigger_error("html_options: value is an object of class '". get_class($value) ."' without __toString() method", E_USER_NOTICE);
149             return '';
150         }
151     } else {
152         $value = (string) $value;
153     }
154     
155     if (is_object($output)) {
156         if (method_exists($output, "__toString")) {
157             $output = (string) $output->__toString();
158         } else {
159             trigger_error("html_options: output is an object of class '". get_class($output) ."' without __toString() method", E_USER_NOTICE);
160             return '';
161         }
162     } else {
163         $output = (string) $output;
164     }
165     
166     if ($labels) {
167         if ($label_ids) {
168             $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER, '_', $name . '_' . $value));
169             $_output .= '<label for="' . $_id . '">';
170         } else {
171             $_output .= '<label>';
172         } 
173     }
174     
175     $name = smarty_function_escape_special_chars($name);
176     $value = smarty_function_escape_special_chars($value);
177     if ($escape) {
178         $output = smarty_function_escape_special_chars($output);
179     }
180     
181     $_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
182
183     if ($labels && $label_ids) {
184         $_output .= ' id="' . $_id . '"';
185     }
186
187     if ($value === $selected) {
188         $_output .= ' checked="checked"';
189     }
190     
191     $_output .= $extra . ' />' . $output;
192     if ($labels) {
193         $_output .= '</label>';
194     }
195     
196     $_output .= $separator;
197     return $_output;
198
199
200 ?>