
Comparing changes: https://github.com/smarty-php/smarty/compare/v4.3.1...v4.4.1 It is noticeable that Smarty 4.3.1 does not officially support PHP 8.3. Is only supported with 4.4.0. Remark: During tests with Smarty 4.5.1, it was noticed that the following warning occurs: Deprecated: Using the unregistered function "function_exists" in a template is deprecated and will be removed in a future version. Use Smarty::registerPlugin to explicitly register a custom modifier. As of Smarty 5.X.X, templates must be revised again. The Smarty release 5.0.2 is already officially available. However, integration into FlatPress is not entirely trivial.
267 lines
8.2 KiB
PHP
267 lines
8.2 KiB
PHP
<?php
|
|
/**
|
|
* Smarty plugin
|
|
*
|
|
* @package Smarty
|
|
* @subpackage PluginsFunction
|
|
*/
|
|
/**
|
|
* Smarty {html_radios} function plugin
|
|
* File: function.html_radios.php
|
|
* Type: function
|
|
* Name: html_radios
|
|
* Date: 24.Feb.2003
|
|
* Purpose: Prints out a list of radio input types
|
|
* Params:
|
|
*
|
|
* - name (optional) - string default "radio"
|
|
* - values (required) - array
|
|
* - options (required) - associative array
|
|
* - checked (optional) - array default not set
|
|
* - separator (optional) - ie <br> or
|
|
* - output (optional) - the output next to each radio button
|
|
* - assign (optional) - assign the output as an array to this variable
|
|
* - escape (optional) - escape the content (not value), defaults to true
|
|
*
|
|
* Examples:
|
|
*
|
|
* {html_radios values=$ids output=$names}
|
|
* {html_radios values=$ids name='box' separator='<br>' output=$names}
|
|
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
|
|
*
|
|
* @link https://www.smarty.net/manual/en/language.function.html.radios.php {html_radios}
|
|
* (Smarty online manual)
|
|
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
|
* @author credits to Monte Ohrt <monte at ohrt dot com>
|
|
* @version 1.0
|
|
*
|
|
* @param array $params parameters
|
|
* @param Smarty_Internal_Template $template template object
|
|
*
|
|
* @return string
|
|
* @uses smarty_function_escape_special_chars()
|
|
* @throws \SmartyException
|
|
*/
|
|
function smarty_function_html_radios($params, Smarty_Internal_Template $template)
|
|
{
|
|
$template->_checkPlugins(
|
|
array(
|
|
array(
|
|
'function' => 'smarty_function_escape_special_chars',
|
|
'file' => SMARTY_PLUGINS_DIR . 'shared.escape_special_chars.php'
|
|
)
|
|
)
|
|
);
|
|
$name = 'radio';
|
|
$values = null;
|
|
$options = null;
|
|
$selected = null;
|
|
$separator = '';
|
|
$escape = true;
|
|
$labels = true;
|
|
$label_ids = false;
|
|
$output = null;
|
|
$extra = '';
|
|
foreach ($params as $_key => $_val) {
|
|
switch ($_key) {
|
|
case 'name':
|
|
case 'separator':
|
|
$$_key = (string)$_val;
|
|
break;
|
|
case 'checked':
|
|
case 'selected':
|
|
if (is_array($_val)) {
|
|
trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
|
|
} elseif (is_object($_val)) {
|
|
if (method_exists($_val, '__toString')) {
|
|
$selected = smarty_function_escape_special_chars((string)$_val->__toString());
|
|
} else {
|
|
trigger_error(
|
|
'html_radios: selected attribute is an object of class \'' . get_class($_val) .
|
|
'\' without __toString() method',
|
|
E_USER_NOTICE
|
|
);
|
|
}
|
|
} else {
|
|
$selected = (string)$_val;
|
|
}
|
|
break;
|
|
case 'escape':
|
|
case 'labels':
|
|
case 'label_ids':
|
|
$$_key = (bool)$_val;
|
|
break;
|
|
case 'options':
|
|
$$_key = (array)$_val;
|
|
break;
|
|
case 'values':
|
|
case 'output':
|
|
$$_key = array_values((array)$_val);
|
|
break;
|
|
case 'radios':
|
|
trigger_error(
|
|
'html_radios: the use of the "radios" attribute is deprecated, use "options" instead',
|
|
E_USER_WARNING
|
|
);
|
|
$options = (array)$_val;
|
|
break;
|
|
case 'assign':
|
|
break;
|
|
case 'strict':
|
|
break;
|
|
case 'disabled':
|
|
case 'readonly':
|
|
if (!empty($params[ 'strict' ])) {
|
|
if (!is_scalar($_val)) {
|
|
trigger_error(
|
|
"html_options: {$_key} attribute must be a scalar, only boolean true or string '$_key' will actually add the attribute",
|
|
E_USER_NOTICE
|
|
);
|
|
}
|
|
if ($_val === true || $_val === $_key) {
|
|
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_key) . '"';
|
|
}
|
|
break;
|
|
}
|
|
// omit break; to fall through!
|
|
// no break
|
|
default:
|
|
if (!is_array($_val)) {
|
|
$extra .= ' ' . $_key . '="' . smarty_function_escape_special_chars($_val) . '"';
|
|
} else {
|
|
trigger_error("html_radios: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!isset($options) && !isset($values)) {
|
|
/* raise error here? */
|
|
return '';
|
|
}
|
|
$_html_result = array();
|
|
if (isset($options)) {
|
|
foreach ($options as $_key => $_val) {
|
|
$_html_result[] =
|
|
smarty_function_html_radios_output(
|
|
$name,
|
|
$_key,
|
|
$_val,
|
|
$selected,
|
|
$extra,
|
|
$separator,
|
|
$labels,
|
|
$label_ids,
|
|
$escape
|
|
);
|
|
}
|
|
} else {
|
|
foreach ($values as $_i => $_key) {
|
|
$_val = isset($output[ $_i ]) ? $output[ $_i ] : '';
|
|
$_html_result[] =
|
|
smarty_function_html_radios_output(
|
|
$name,
|
|
$_key,
|
|
$_val,
|
|
$selected,
|
|
$extra,
|
|
$separator,
|
|
$labels,
|
|
$label_ids,
|
|
$escape
|
|
);
|
|
}
|
|
}
|
|
if (!empty($params[ 'assign' ])) {
|
|
$template->assign($params[ 'assign' ], $_html_result);
|
|
} else {
|
|
return implode("\n", $_html_result);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $name
|
|
* @param $value
|
|
* @param $output
|
|
* @param $selected
|
|
* @param $extra
|
|
* @param $separator
|
|
* @param $labels
|
|
* @param $label_ids
|
|
* @param $escape
|
|
*
|
|
* @return string
|
|
*/
|
|
function smarty_function_html_radios_output(
|
|
$name,
|
|
$value,
|
|
$output,
|
|
$selected,
|
|
$extra,
|
|
$separator,
|
|
$labels,
|
|
$label_ids,
|
|
$escape
|
|
) {
|
|
$_output = '';
|
|
if (is_object($value)) {
|
|
if (method_exists($value, '__toString')) {
|
|
$value = (string)$value->__toString();
|
|
} else {
|
|
trigger_error(
|
|
'html_options: value is an object of class \'' . get_class($value) .
|
|
'\' without __toString() method',
|
|
E_USER_NOTICE
|
|
);
|
|
return '';
|
|
}
|
|
} else {
|
|
$value = (string)$value;
|
|
}
|
|
if (is_object($output)) {
|
|
if (method_exists($output, '__toString')) {
|
|
$output = (string)$output->__toString();
|
|
} else {
|
|
trigger_error(
|
|
'html_options: output is an object of class \'' . get_class($output) .
|
|
'\' without __toString() method',
|
|
E_USER_NOTICE
|
|
);
|
|
return '';
|
|
}
|
|
} else {
|
|
$output = (string)$output;
|
|
}
|
|
if ($labels) {
|
|
if ($label_ids) {
|
|
$_id = smarty_function_escape_special_chars(
|
|
preg_replace(
|
|
'![^\w\-\.]!' . Smarty::$_UTF8_MODIFIER,
|
|
'_',
|
|
$name . '_' . $value
|
|
)
|
|
);
|
|
$_output .= '<label for="' . $_id . '">';
|
|
} else {
|
|
$_output .= '<label>';
|
|
}
|
|
}
|
|
$name = smarty_function_escape_special_chars($name);
|
|
$value = smarty_function_escape_special_chars($value);
|
|
if ($escape) {
|
|
$output = smarty_function_escape_special_chars($output);
|
|
}
|
|
$_output .= '<input type="radio" name="' . $name . '" value="' . $value . '"';
|
|
if ($labels && $label_ids) {
|
|
$_output .= ' id="' . $_id . '"';
|
|
}
|
|
if ($value === $selected) {
|
|
$_output .= ' checked="checked"';
|
|
}
|
|
$_output .= $extra . ' />' . $output;
|
|
if ($labels) {
|
|
$_output .= '</label>';
|
|
}
|
|
$_output .= $separator;
|
|
return $_output;
|
|
}
|