
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.
287 lines
9.4 KiB
PHP
287 lines
9.4 KiB
PHP
<?php
|
|
/**
|
|
* Smarty plugin
|
|
*
|
|
* @package Smarty
|
|
* @subpackage PluginsFunction
|
|
*/
|
|
/**
|
|
* Smarty {html_checkboxes} function plugin
|
|
* File: function.html_checkboxes.php
|
|
* Type: function
|
|
* Name: html_checkboxes
|
|
* Date: 24.Feb.2003
|
|
* Purpose: Prints out a list of checkbox input types
|
|
* Examples:
|
|
*
|
|
* {html_checkboxes values=$ids output=$names}
|
|
* {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
|
|
* {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
|
|
*
|
|
* Params:
|
|
*
|
|
* - name (optional) - string default "checkbox"
|
|
* - values (required) - array
|
|
* - options (optional) - associative array
|
|
* - checked (optional) - array default not set
|
|
* - separator (optional) - ie <br> or
|
|
* - output (optional) - the output next to each checkbox
|
|
* - assign (optional) - assign the output as an array to this variable
|
|
* - escape (optional) - escape the content (not value), defaults to true
|
|
*
|
|
* @link https://www.smarty.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
|
|
* (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_checkboxes($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 = 'checkbox';
|
|
$values = null;
|
|
$options = null;
|
|
$selected = array();
|
|
$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 '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 'checked':
|
|
case 'selected':
|
|
if (is_array($_val)) {
|
|
$selected = array();
|
|
foreach ($_val as $_sel) {
|
|
if (is_object($_sel)) {
|
|
if (method_exists($_sel, '__toString')) {
|
|
$_sel = smarty_function_escape_special_chars((string)$_sel->__toString());
|
|
} else {
|
|
trigger_error(
|
|
'html_checkboxes: selected attribute contains an object of class \'' .
|
|
get_class($_sel) . '\' without __toString() method',
|
|
E_USER_NOTICE
|
|
);
|
|
continue;
|
|
}
|
|
} else {
|
|
$_sel = smarty_function_escape_special_chars((string)$_sel);
|
|
}
|
|
$selected[ $_sel ] = true;
|
|
}
|
|
} elseif (is_object($_val)) {
|
|
if (method_exists($_val, '__toString')) {
|
|
$selected = smarty_function_escape_special_chars((string)$_val->__toString());
|
|
} else {
|
|
trigger_error(
|
|
'html_checkboxes: selected attribute is an object of class \'' . get_class($_val) .
|
|
'\' without __toString() method',
|
|
E_USER_NOTICE
|
|
);
|
|
}
|
|
} else {
|
|
$selected = smarty_function_escape_special_chars((string)$_val);
|
|
}
|
|
break;
|
|
case 'checkboxes':
|
|
trigger_error(
|
|
'html_checkboxes: the use of the "checkboxes" 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_checkboxes: extra attribute '{$_key}' cannot be an array", E_USER_NOTICE);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!isset($options) && !isset($values)) {
|
|
return '';
|
|
} /* raise error here? */
|
|
$_html_result = array();
|
|
if (isset($options)) {
|
|
foreach ($options as $_key => $_val) {
|
|
$_html_result[] =
|
|
smarty_function_html_checkboxes_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_checkboxes_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 bool $escape
|
|
*
|
|
* @return string
|
|
*/
|
|
function smarty_function_html_checkboxes_output(
|
|
$name,
|
|
$value,
|
|
$output,
|
|
$selected,
|
|
$extra,
|
|
$separator,
|
|
$labels,
|
|
$label_ids,
|
|
$escape = true
|
|
) {
|
|
$_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="checkbox" name="' . $name . '[]" value="' . $value . '"';
|
|
if ($labels && $label_ids) {
|
|
$_output .= ' id="' . $_id . '"';
|
|
}
|
|
if (is_array($selected)) {
|
|
if (isset($selected[ $value ])) {
|
|
$_output .= ' checked="checked"';
|
|
}
|
|
} elseif ($value === $selected) {
|
|
$_output .= ' checked="checked"';
|
|
}
|
|
$_output .= $extra . ' />' . $output;
|
|
if ($labels) {
|
|
$_output .= '</label>';
|
|
}
|
|
$_output .= $separator;
|
|
return $_output;
|
|
}
|