|
|
@@ -21,7 +21,6 @@
|
|
|
* @link http://smarty.php.net/
|
|
|
* @author Monte Ohrt <monte at ohrt dot com>
|
|
|
* @author Andrei Zmievski <[email protected]>
|
|
|
- * @version 2.6.25-dev
|
|
|
* @copyright 2001-2005 New Digital Group, Inc.
|
|
|
* @package Smarty
|
|
|
*/
|
|
|
@@ -259,14 +258,9 @@ class Smarty_Compiler extends Smarty {
|
|
|
|
|
|
preg_match_all($search, $source_content, $match, PREG_SET_ORDER);
|
|
|
$this->_folded_blocks = $match;
|
|
|
- reset($this->_folded_blocks);
|
|
|
|
|
|
/* replace special blocks by "{php}" */
|
|
|
- $source_content = preg_replace_callback($search, create_function ('$matches', "return '"
|
|
|
- . $this->_quote_replace($this->left_delimiter) . 'php'
|
|
|
- . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'"
|
|
|
- . $this->_quote_replace($this->right_delimiter)
|
|
|
- . "';")
|
|
|
+ $source_content = preg_replace_callback($search, array($this,'_preg_callback')
|
|
|
, $source_content);
|
|
|
|
|
|
/* Gather all template tags. */
|
|
|
@@ -556,7 +550,7 @@ class Smarty_Compiler extends Smarty {
|
|
|
|
|
|
case 'php':
|
|
|
/* handle folded tags replaced by {php} */
|
|
|
- list($notUsed, $block) = array(key($this->_folded_blocks), current($this->_folded_blocks));
|
|
|
+ $block = array_shift($this->_folded_blocks);
|
|
|
$this->_current_line_no += substr_count($block[0], "\n");
|
|
|
/* the number of matched elements in the regexp in _compile_file()
|
|
|
determins the type of folded tag that was found */
|
|
|
@@ -754,7 +748,12 @@ class Smarty_Compiler extends Smarty {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ function _preg_callback ($matches) {
|
|
|
+ return $this->_quote_replace($this->left_delimiter)
|
|
|
+ . 'php'
|
|
|
+ . str_repeat("\n", substr_count($matches[1], "\n"))
|
|
|
+ . $this->_quote_replace($this->right_delimiter);
|
|
|
+ }
|
|
|
/**
|
|
|
* compile custom function tag
|
|
|
*
|
|
|
@@ -1192,7 +1191,7 @@ class Smarty_Compiler extends Smarty {
|
|
|
}
|
|
|
|
|
|
$output = '<?php ';
|
|
|
- $output .= "\$_from = $from; if (!is_array(\$_from) && !is_object(\$_from)) { settype(\$_from, 'array'); }";
|
|
|
+ $output .= "\$_from = $from; if ((\$_from instanceof StdClass) || (!is_array(\$_from) && !is_object(\$_from))) { settype(\$_from, 'array'); }";
|
|
|
if (isset($name)) {
|
|
|
$foreach_props = "\$this->_foreach[$name]";
|
|
|
$output .= "{$foreach_props} = array('total' => count(\$_from), 'iteration' => 0);\n";
|