- bugfix for E_NOTICE change, array elements did not work as modifier parameter

This commit is contained in:
uwe.tews@googlemail.com
2010-10-25 18:53:43 +00:00
parent ce7a278f44
commit 5176f39583
4 changed files with 872 additions and 828 deletions

View File

@@ -1,3 +1,6 @@
25/10/2010
- bugfix for E_NOTICE change, array elements did not work as modifier parameter
20/10/2010
- bugfix for the E_NOTICE change

View File

@@ -30,20 +30,9 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
$output = $_attr['value'];
// loop over list of modifiers
foreach ($_attr['modifierlist'] as $single_modifier) {
preg_match_all('/(((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[^:"]*"[^"\\\\]*(?:\\\\.[^"\\\\]*)*")[^:]*)+|::?|[^:]+)/', $single_modifier, $mod_array);
$modifier = $mod_array[0][0];
for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {
if ($mod_array[0][$i] == ':') {
$mod_array[0][$i] = ',';
}
if ($mod_array[0][$i] == '::') {
$mod_array[0][$i-1] = $mod_array[0][$i-1] . $mod_array[0][$i] . $mod_array[0][$i + 1];
unset($mod_array[0][$i], $mod_array[0][$i + 1]);
$i++;
}
}
unset($mod_array[0][0]);
$params = $output . implode('', $mod_array[0]);
$modifier = $single_modifier[0];
$single_modifier[0] = $output;
$params = implode(',', $single_modifier);
// check for registered modifier
if (isset($compiler->smarty->registered_plugins['modifier'][$modifier])) {
$function = $compiler->smarty->registered_plugins['modifier'][$modifier][0];
@@ -59,13 +48,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
// check for plugin modifiercompiler
} else if ($compiler->smarty->loadPlugin('smarty_modifiercompiler_' . $modifier)) {
$plugin = 'smarty_modifiercompiler_' . $modifier;
foreach($mod_array[0] as $key => $value) {
if ($value == ',') {
unset ($mod_array[0][$key]);
}
}
$args = array_merge((array)$output, $mod_array[0]);
$output = $plugin($args, $compiler);
$output = $plugin($single_modifier, $compiler);
// check for plugin modifier
} else if ($function = $this->compiler->getPlugin($modifier, 'modifier')) {
$output = "{$function}({$params})";
@@ -76,7 +59,7 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
$output = "{$modifier}({$params})";
}
} else {
$this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\"");
$this->compiler->trigger_template_error ("unknown modifier \"" . $modifier . "\"", $this->compiler->lex->taglineno);
}
}
return $output;

View File

@@ -23,44 +23,53 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->optional_attributes = array('assign');
$this->required_attributes = array('value');
$this->optional_attributes = array('assign', 'nocache', 'filter', 'nofilter', 'modifierlist');
$this->optional_attributes = array('assign', 'nocache', 'nofilter', 'modifierlist');
// check and get attributes
$_attr = $this->_get_attributes($args);
$_attr = $this->_get_attributes($args);
// nocache option
if (isset($_attr['nocache'])) {
if ($_attr['nocache'] == 'true') {
$this->compiler->tag_nocache = true;
}
}
if (!isset($_attr['filter'])) {
$_attr['filter'] = 'null';
}
// filter handling
if (isset($_attr['nofilter'])) {
if ($_attr['nofilter'] == 'true') {
$_attr['filter'] = 'false';
}
$_filter = 'false';
} else {
$_filter = 'true';
}
// compiled output
if (isset($_attr['assign'])) {
// assign output to variable
$output = '<?php $_smarty_tpl->assign(' . $_attr['assign'] . ',' . $_attr['value'] . ');?>';
$output = "<?php \$_smarty_tpl->assign({$_attr['assign']},{$_attr['value']});?>";
} else {
// display value
if (isset($this->compiler->smarty->registered_filters['variable'])) {
$output = 'Smarty_Internal_Filter_Handler::runFilter(\'variable\', ' . $_attr['value'] . ',$_smarty_tpl->smarty, $_smarty_tpl, ' . $_attr['filter'] . ')';
$output = "Smarty_Internal_Filter_Handler::runFilter('variable', {$_attr['value']},\$_smarty_tpl->smarty, \$_smarty_tpl, {$_filter})";
} else {
$output = $_attr['value'];
}
if (!isset($_attr['nofilter']) && isset($this->compiler->smarty->default_modifiers)) {
$output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $this->compiler->smarty->default_modifiers, 'value' => $output));
if (!isset($_attr['nofilter']) && !empty($this->compiler->smarty->default_modifiers)) {
$modifierlist = array();
foreach ($this->compiler->smarty->default_modifiers as $key => $single_default_modifier) {
preg_match_all('/(\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|:|[^:]+)/', $single_default_modifier, $mod_array);
for ($i = 0, $count = count($mod_array[0]);$i < $count;$i++) {
if ($mod_array[0][$i] != ':') {
$modifierlist[$key][] = $mod_array[0][$i];
}
}
}
$output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $modifierlist, 'value' => $output));
}
if (isset($_attr['modifierlist'])) {
if (!empty($_attr['modifierlist'])) {
$output = $this->compiler->compileTag('private_modifier', array('modifierlist' => $_attr['modifierlist'], 'value' => $output));
}
$this->compiler->has_output = true;
$output = '<?php echo ' . $output . ';?>';
$this->compiler->has_output = true;
$output = "<?php echo {$output};?>";
}
return $output;
}

File diff suppressed because it is too large Load Diff