- change of filenames in sysplugins folder for internal spl_autoload function

- lexer/parser changed for increased compilation speed
This commit is contained in:
Uwe.Tews
2009-10-31 00:44:58 +00:00
parent 6efbb3ee58
commit cf379474fd
150 changed files with 2127 additions and 2028 deletions

View File

@@ -1,3 +1,6 @@
10/31/2009
- change of filenames in sysplugins folder for internal spl_autoload function
- lexer/parser changed for increased compilation speed
10/27/2009 10/27/2009
- fixed missing quotes in include_php.php - fixed missing quotes in include_php.php

View File

@@ -73,7 +73,7 @@ define('SMARTY_GLOBAL_SCOPE', 3);
*/ */
define('SMARTY_CACHING_OFF', 0); define('SMARTY_CACHING_OFF', 0);
define('SMARTY_CACHING_LIFETIME_CURRENT', 1); define('SMARTY_CACHING_LIFETIME_CURRENT', 1);
define('SMARTY_CACHING_LIVETIME_SAVED', 2); define('SMARTY_CACHING_LIFETIME_SAVED', 2);
/** /**
* This determines how Smarty handles "<?php ... ?>" tags in templates. * This determines how Smarty handles "<?php ... ?>" tags in templates.
@@ -86,9 +86,16 @@ define('SMARTY_PHP_ALLOW', 3); //-> escape tags as entities
/** /**
* register the class autoloader * register the class autoloader
**/ */
spl_autoload_register('smartyAutoload'); if (set_include_path(SMARTY_SYSPLUGINS_DIR . PATH_SEPARATOR . get_include_path()) !== false) {
spl_autoload_extensions('.php,.inc');
$registeredAutoLoadFunctions = spl_autoload_functions();
if (!isset($registeredAutoLoadFunctions['spl_autoload'])) {
spl_autoload_register();
}
} else {
spl_autoload_register('smartyAutoload');
}
/** /**
* This is the main Smarty class * This is the main Smarty class
*/ */
@@ -97,8 +104,8 @@ class Smarty extends Smarty_Internal_TemplateBase {
public static $_version = 'Smarty3-SVN$Rev: 3286 $'; public static $_version = 'Smarty3-SVN$Rev: 3286 $';
// auto literal on delimiters with whitspace // auto literal on delimiters with whitspace
public $auto_literal = true; public $auto_literal = true;
// display error on not assigned variabled // display error on not assigned variables
static $error_unassigned = false; public $error_unassigned = false;
// template directory // template directory
public $template_dir = null; public $template_dir = null;
// default template handler // default template handler
@@ -154,7 +161,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
// config var settings // config var settings
public $config_overwrite = true; //Controls whether variables with the same name overwrite each other. public $config_overwrite = true; //Controls whether variables with the same name overwrite each other.
public $config_booleanize = true; //Controls whether config values of on/true/yes and off/false/no get converted to boolean public $config_booleanize = true; //Controls whether config values of on/true/yes and off/false/no get converted to boolean
public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file. public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file.
// config vars // config vars
public $config_vars = array(); public $config_vars = array();
// assigned tpl vars // assigned tpl vars
@@ -204,12 +211,17 @@ class Smarty extends Smarty_Internal_TemplateBase {
// global internal smarty vars // global internal smarty vars
public $_smarty_vars = array(); public $_smarty_vars = array();
// start time for execution time calculation // start time for execution time calculation
public $start_time = 0; public $start_time = 0;
// default file permissions
public $_file_perms = 0644;
// default dir permissions
public $_dir_perms = 0771;
/** /**
* Class constructor, initializes basic smarty properties * Class constructor, initializes basic smarty properties
*/ */
public function __construct() public function __construct()
{ {
// self reference needed by other classes methodes // self reference needed by other classes methodes
$this->smarty = $this; $this->smarty = $this;
@@ -226,7 +238,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
$this->plugins_dir = array(SMARTY_PLUGINS_DIR); $this->plugins_dir = array(SMARTY_PLUGINS_DIR);
$this->cache_dir = '.' . DS . 'cache' . DS; $this->cache_dir = '.' . DS . 'cache' . DS;
$this->config_dir = '.' . DS . 'configs' . DS; $this->config_dir = '.' . DS . 'configs' . DS;
$this->debug_tpl = SMARTY_DIR . 'debug.tpl'; $this->debug_tpl = SMARTY_DIR . 'debug.tpl';
$this->plugin_handler = new Smarty_Internal_Plugin_Handler($this); $this->plugin_handler = new Smarty_Internal_Plugin_Handler($this);
$this->filter_handler = new Smarty_Internal_Run_Filter($this); $this->filter_handler = new Smarty_Internal_Run_Filter($this);
if (!$this->debugging && $this->debugging_ctrl == 'URL') { if (!$this->debugging && $this->debugging_ctrl == 'URL') {
@@ -435,24 +447,24 @@ class Smarty extends Smarty_Internal_TemplateBase {
if (is_callable($plugin_name)) if (is_callable($plugin_name))
return true; return true;
// Plugin name is expected to be: Smarty_[Type]_[Name] // Plugin name is expected to be: Smarty_[Type]_[Name]
$plugin_name = strtolower($plugin_name); $_plugin_name = strtolower($plugin_name);
$_name_parts = explode('_', $plugin_name, 3); $_name_parts = explode('_', $_plugin_name, 3);
// class name must have three parts to be valid plugin // class name must have three parts to be valid plugin
if (count($_name_parts) < 3 || $_name_parts[0] !== 'smarty') { if (count($_name_parts) < 3 || $_name_parts[0] !== 'smarty') {
throw new Exception("plugin {$plugin_name} is not a valid name format"); throw new Exception("plugin {$plugin_name} is not a valid name format");
return false; return false;
} }
// plugin filename is expected to be: [type].[name].php
$_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}{$this->php_ext}";
// if type is "internal", get plugin from sysplugins // if type is "internal", get plugin from sysplugins
if ($_name_parts[1] == 'internal') { if ($_name_parts[1] == 'internal') {
if (file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_filename)) { if (file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_name . $this->php_ext)) {
require_once(SMARTY_SYSPLUGINS_DIR . $_plugin_filename); require_once(SMARTY_SYSPLUGINS_DIR . $_plugin_name . $this->php_ext);
return true; return true;
} else { } else {
return false; return false;
} }
} }
// plugin filename is expected to be: [type].[name].php
$_plugin_filename = "{$_name_parts[1]}.{$_name_parts[2]}{$this->php_ext}";
// loop through plugin dirs and find the plugin // loop through plugin dirs and find the plugin
foreach((array)$this->plugins_dir as $_plugin_dir) { foreach((array)$this->plugins_dir as $_plugin_dir) {
if (strpos('/\\', substr($_plugin_dir, -1)) === false) { if (strpos('/\\', substr($_plugin_dir, -1)) === false) {
@@ -512,7 +524,7 @@ class Smarty extends Smarty_Internal_TemplateBase {
public function __call($name, $args) public function __call($name, $args)
{ {
if (!is_callable($name)) { if (!is_callable($name)) {
$_plugin_filename = strtolower('method.' . $name . $this->php_ext); $_plugin_filename = strtolower('smarty_method_' . $name . $this->php_ext);
if (!file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_filename)) { if (!file_exists(SMARTY_SYSPLUGINS_DIR . $_plugin_filename)) {
throw new Exception("Sysplugin file " . $_plugin_filename . " does not exist"); throw new Exception("Sysplugin file " . $_plugin_filename . " does not exist");
} }
@@ -527,10 +539,9 @@ class Smarty extends Smarty_Internal_TemplateBase {
function smartyAutoload($class) function smartyAutoload($class)
{ {
if (substr($class, 0, 16) === 'Smarty_Internal_') { $_class = strtolower($class);
$class = strtolower($class); if (substr($_class, 0, 16) === 'smarty_internal_') {
$_name_parts = explode('_', $class, 3); include SMARTY_SYSPLUGINS_DIR . $_class . '.php';
include SMARTY_SYSPLUGINS_DIR . 'internal.' . $_name_parts[2] . '.php';
} }
} }

View File

@@ -1,38 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Block
*
* Compiles the {block} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Block Class
*/
class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {block} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return boolean true
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('name');
$this->optional_attributes = array('assign');
// check and get attributes
$_attr = $this->_get_attributes($args);
$save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code);
$this->_open_tag('block', $save);
$compiler->template->extract_code = true;
$compiler->template->extracted_compiled_code = '';
$compiler->template->has_code = false;
return true;
}
}
?>

View File

@@ -1,42 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Capture Close
*
* Compiles the {/capture} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile CaptureClose Class
*/
class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/capture} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($buffer, $assign, $append) = array_pop($this->compiler->_capture_stack);
$_output = "<?php ";
if (isset($assign)) {
$_output .= " \$_smarty_tpl->assign($assign, ob_get_contents());";
}
if (isset($append)) {
$_output .= " \$_smarty_tpl->append($append, ob_get_contents());";
}
$_output .= " \$_smarty_tpl->smarty->_smarty_vars['capture'][$buffer]=ob_get_clean(); ?>";
return $_output;
}
}
?>

View File

@@ -1,33 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Else
*
* Compiles the {else} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Else Class
*/
class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {else} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif'));
$this->_open_tag('else',array($nesting,$compiler->tag_nocache));
return '<?php }else{ ?>';
}
}
?>

View File

@@ -1,44 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Else If
*
* Compiles the {elseif} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile ElseIf Class
*/
class Smarty_Internal_Compile_ElseIf extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {elseif} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('if condition');
// check and get attributes
$_attr = $this->_get_attributes($args);
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif'));
if (empty($this->compiler->prefix_code)) {
$this->_open_tag('elseif', array($nesting, $compiler->tag_nocache));
return '<?php }elseif(' . $args['if condition'] . '){?>';
} else {
$tmp = '';
foreach ($this->compiler->prefix_code as $code) $tmp .= $code;
$this->compiler->prefix_code = array();
$this->_open_tag('elseif', array($nesting + 1, $compiler->tag_nocache));
return '<?php }else{?>' . $tmp . '<?php if (' . $args['if condition'] . '){?>';
}
}
}
?>

View File

@@ -1,40 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile For Close
*
* Compiles the {/for} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile ForClose Class
*/
class Smarty_Internal_Compile_ForClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/for} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('for', 'forelse'));
if ($_open_tag == 'forelse')
return "<?php } ?>";
else
return "<?php }} ?>";
}
}
?>

View File

@@ -1,41 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Foreach Close
*
* Compiles the {/foreach} tag
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile ForeachClose Class
*/
class Smarty_Internal_Compile_ForeachClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/foreach} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('foreach', 'foreachelse'));
if ($_open_tag == 'foreachelse')
return "<?php } ?>";
else
return "<?php }} ?>";
}
}
?>

View File

@@ -1,34 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Foreach Else
*
* Compiles the {foreachelse} tag
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Foreachelse Class
*/
class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {foreachelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('foreach'));
$this->_open_tag('foreachelse',array('foreachelse', $this->compiler->nocache));
return "<?php }} else { ?>";
}
}
?>

View File

@@ -1,34 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile For Else
*
* Compiles the {forelse} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Forelse Class
*/
class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {forelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('for'));
$this->_open_tag('forelse',array('forelse', $this->compiler->nocache));
return "<?php }} else { ?>";
}
}
?>

View File

@@ -1,44 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Function
*
* Compiles the {function} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Function Class
*/
class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {function} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return boolean true
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('name');
$this->optional_attributes = array('_any');
// check and get attributes
$_attr = $this->_get_attributes($args);
$save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code);
$this->_open_tag('function', $save);
$_name = trim($_attr['name'], "'");
foreach ($_attr as $_key => $_data) {
$compiler->template->properties['function'][$_name]['parameter'][$_key] = $_data;
}
// make function known for recursive calls
$this->compiler->smarty->template_functions[$_name]['compiled'] = '';
$compiler->template->extract_code = true;
$compiler->template->extracted_compiled_code = '';
$compiler->template->has_code = false;
return true;
}
}
?>

View File

@@ -1,39 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile If
*
* Compiles the {if} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile If Class
*/
class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {if} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('if condition');
// check and get attributes
$_attr = $this->_get_attributes($args);
$this->_open_tag('if',array(1,$compiler->tag_nocache));
if (is_array($args['if condition'])) {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$args['if condition']['var']."] = new Smarty_Variable;";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."]->value = ".$args['if condition']['value']."){?>";
return $_output;
} else {
return '<?php if (' . $args['if condition'] . '){?>';
}
}
}
?>

View File

@@ -1,33 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile If Close
*
* Compiles the {/if} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile IfClose Class
*/
class Smarty_Internal_Compile_IfClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/if} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'else', 'elseif'));
$tmp = '';
for ($i = 0; $i < $nesting ; $i++) $tmp .= '}';
return "<?php $tmp?>";
}
}
?>

View File

@@ -1,35 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Nocache Close
*
* Compiles the {/nocache} tag
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile NocacheClose Class
*/
class Smarty_Internal_Compile_NocacheClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$_attr = $this->_get_attributes($args);
// leave nocache mode
$this->compiler->nocache = false;
// this tag does not return compiled code
$this->compiler->has_code = false;
return true;
}
}
?>

View File

@@ -1,42 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Section Close
*
* Compiles the {/section} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile SectionClose Class
*/
class Smarty_Internal_Compile_SectionClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/section} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('section', 'sectionelse'));
if ($_open_tag == 'sectionelse')
return "<?php endif; ?>";
else
return "<?php endfor; endif; ?>";
}
}
?>

View File

@@ -1,35 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Section Else
*
* Compiles the {sectionelse} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Sectionelse Class
*/
class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {sectionelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('section'));
$this->_open_tag('sectionelse',array('sectionelse', $this->compiler->nocache));
return "<?php endfor; else: ?>";
}
}
?>

View File

@@ -1,36 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Strip
*
* Compiles the {strip} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Strip Class
*/
class Smarty_Internal_Compile_Strip extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {strip} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
$this->_open_tag('strip');
$_output = "<?php ob_start(); ?>";
return $_output;
}
}
?>

View File

@@ -1,35 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile Strip Close
*
* Compiles the {/strip} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile StripClose Class
*/
class Smarty_Internal_Compile_StripClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/strip} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
$saved_attr = $this->_close_tag(array('strip'));
$_output = "<?php echo preg_replace('![\t ]*[\r\n]+[\t ]*!', '', ob_get_clean()); ?>\n";
return $_output;
}
}
?>

View File

@@ -1,35 +0,0 @@
<?php
/**
* Smarty Internal Plugin Compile While Close
*
* Compiles the {/while} tag
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile WhileClose Class
*/
class Smarty_Internal_Compile_WhileClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/while} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
$this->compiler->nocache = $this->_close_tag(array('while'));
return "<?php }?>";
}
}
?>

View File

@@ -1,17 +1,44 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Block Close * Smarty Internal Plugin Compile Block
* *
* Compiles the {/block} tag * Compiles the {block}{/block} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/**
* Smarty Internal Plugin Compile Block Class
*/
class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {block} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return boolean true
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('name');
$this->optional_attributes = array('assign');
// check and get attributes
$_attr = $this->_get_attributes($args);
$save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code);
$this->_open_tag('block', $save);
$compiler->template->extract_code = true;
$compiler->template->extracted_compiled_code = '';
$compiler->template->has_code = false;
return true;
}
}
/** /**
* Smarty Internal Plugin Compile BlockClose Class * Smarty Internal Plugin Compile BlockClose Class
*/ */
class Smarty_Internal_Compile_BlockClose extends Smarty_Internal_CompileBase { class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
/** /**
* Compiles code for the {/block} tag * Compiles code for the {/block} tag
* *

View File

@@ -20,7 +20,7 @@ class Smarty_Internal_Compile_Block_Plugin extends Smarty_Internal_CompileBase {
* @param object $compiler compiler object * @param object $compiler compiler object
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $tag, $compiler) public function compile($args, $compiler, $tag)
{ {
$this->compiler = $compiler; $this->compiler = $compiler;
if (strlen($tag) < 6 || substr_compare($tag, 'close', -5, 5) != 0) { if (strlen($tag) < 6 || substr_compare($tag, 'close', -5, 5) != 0) {

View File

@@ -38,4 +38,35 @@ class Smarty_Internal_Compile_Capture extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Captureclose Class
*/
class Smarty_Internal_Compile_CaptureClose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/capture} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($buffer, $assign, $append) = array_pop($this->compiler->_capture_stack);
$_output = "<?php ";
if (isset($assign)) {
$_output .= " \$_smarty_tpl->assign($assign, ob_get_contents());";
}
if (isset($append)) {
$_output .= " \$_smarty_tpl->append($append, ob_get_contents());";
}
$_output .= " \$_smarty_tpl->smarty->_smarty_vars['capture'][$buffer]=ob_get_clean(); ?>";
return $_output;
}
}
?> ?>

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty Internal Plugin Compile For * Smarty Internal Plugin Compile For
* *
* Compiles the {for} tag * Compiles the {for} {forelse} {/for} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
@@ -54,4 +54,56 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Forelse Class
*/
class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {forelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('for'));
$this->_open_tag('forelse',array('forelse', $this->compiler->nocache));
return "<?php }} else { ?>";
}
}
/**
* Smarty Internal Plugin Compile Forclose Class
*/
class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/for} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('for', 'forelse'));
if ($_open_tag == 'forelse')
return "<?php } ?>";
else
return "<?php }} ?>";
}
}
?> ?>

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty Internal Plugin Compile Foreach * Smarty Internal Plugin Compile Foreach
* *
* Compiles the {foreach} tag * Compiles the {foreach} {foreachelse} {/foreach} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
@@ -134,4 +134,59 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Foreachelse Class
*/
class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {foreachelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('foreach'));
$this->_open_tag('foreachelse',array('foreachelse', $this->compiler->nocache));
return "<?php }} else { ?>";
}
}
/**
* Smarty Internal Plugin Compile Foreachclose Class
*/
class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/foreach} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('foreach', 'foreachelse'));
if ($_open_tag == 'foreachelse')
return "<?php } ?>";
else
return "<?php }} ?>";
}
}
?> ?>

View File

@@ -1,17 +1,50 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Function Close * Smarty Internal Plugin Compile Function
* *
* Compiles the {/function} tag * Compiles the {function} {/function} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile FunctionClose Class * Smarty Internal Plugin Compile Function Class
*/ */
class Smarty_Internal_Compile_FunctionClose extends Smarty_Internal_CompileBase { class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {function} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return boolean true
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('name');
$this->optional_attributes = array('_any');
// check and get attributes
$_attr = $this->_get_attributes($args);
$save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code);
$this->_open_tag('function', $save);
$_name = trim($_attr['name'], "'");
foreach ($_attr as $_key => $_data) {
$compiler->template->properties['function'][$_name]['parameter'][$_key] = $_data;
}
// make function known for recursive calls
$this->compiler->smarty->template_functions[$_name]['compiled'] = '';
$compiler->template->extract_code = true;
$compiler->template->extracted_compiled_code = '';
$compiler->template->has_code = false;
return true;
}
}
/**
* Smarty Internal Plugin Compile Functionclose Class
*/
class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase {
/** /**
* Compiles code for the {/function} tag * Compiles code for the {/function} tag
* *

View File

@@ -1,20 +1,20 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Internal_Function_Call * Smarty Internal Plugin Compile Function_Call
* *
* Compiles the {internal_function_call} tag * Compiles the calls of user defined tags defined by {function}
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Internal_Function_Call Class * Smarty Internal Plugin Compile Function_Call Class
*/ */
class Smarty_Internal_Compile_Internal_Function_Call extends Smarty_Internal_CompileBase { class Smarty_Internal_Compile_Function_Call extends Smarty_Internal_CompileBase {
/** /**
* Compiles code for the {internal_function_call} tag * Compiles the calls of user defined tags defined by {function}
* *
* @param array $args array with attributes from parser * @param array $args array with attributes from parser
* @param object $compiler compiler object * @param object $compiler compiler object

View File

@@ -20,7 +20,7 @@ class Smarty_Internal_Compile_Function_Plugin extends Smarty_Internal_CompileBas
* @param object $compiler compiler object * @param object $compiler compiler object
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $tag, $compiler) public function compile($args, $compiler, $tag)
{ {
$this->compiler = $compiler; $this->compiler = $compiler;
// This tag does create output // This tag does create output

View File

@@ -0,0 +1,114 @@
<?php
/**
* Smarty Internal Plugin Compile If
*
* Compiles the {if} {else} {elseif} {/if} tags
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile If Class
*/
class Smarty_Internal_Compile_If extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {if} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('if condition');
// check and get attributes
$_attr = $this->_get_attributes($args);
$this->_open_tag('if',array(1,$compiler->tag_nocache));
if (is_array($args['if condition'])) {
$_output = "<?php if (!isset(\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."])) \$_smarty_tpl->tpl_vars[".$args['if condition']['var']."] = new Smarty_Variable;";
$_output .= "if (\$_smarty_tpl->tpl_vars[".$args['if condition']['var']."]->value = ".$args['if condition']['value']."){?>";
return $_output;
} else {
return '<?php if (' . $args['if condition'] . '){?>';
}
}
}
/**
* Smarty Internal Plugin Compile Else Class
*/
class Smarty_Internal_Compile_Else extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {else} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif'));
$this->_open_tag('else',array($nesting,$compiler->tag_nocache));
return '<?php }else{ ?>';
}
}
/**
* Smarty Internal Plugin Compile ElseIf Class
*/
class Smarty_Internal_Compile_Elseif extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {elseif} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$this->required_attributes = array('if condition');
// check and get attributes
$_attr = $this->_get_attributes($args);
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'elseif'));
if (empty($this->compiler->prefix_code)) {
$this->_open_tag('elseif', array($nesting, $compiler->tag_nocache));
return '<?php }elseif(' . $args['if condition'] . '){?>';
} else {
$tmp = '';
foreach ($this->compiler->prefix_code as $code) $tmp .= $code;
$this->compiler->prefix_code = array();
$this->_open_tag('elseif', array($nesting + 1, $compiler->tag_nocache));
return '<?php }else{?>' . $tmp . '<?php if (' . $args['if condition'] . '){?>';
}
}
}
/**
* Smarty Internal Plugin Compile Ifclose Class
*/
class Smarty_Internal_Compile_Ifclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/if} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
list($nesting, $compiler->tag_nocache) = $this->_close_tag(array('if', 'else', 'elseif'));
$tmp = '';
for ($i = 0; $i < $nesting ; $i++) $tmp .= '}';
return "<?php $tmp?>";
}
}
?>

View File

@@ -3,7 +3,7 @@
/** /**
* Smarty Internal Plugin Compile Nocache * Smarty Internal Plugin Compile Nocache
* *
* Compiles the {nocache} tag * Compiles the {nocache} {/nocache} tags
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
* @author Uwe Tews * @author Uwe Tews
@@ -32,4 +32,28 @@ class Smarty_Internal_Compile_Nocache extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Nocacheclose Class
*/
class Smarty_Internal_Compile_Nocacheclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/nocache} tag
*
* This tag does not generate compiled output. It only sets a compiler flag
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
$_attr = $this->_get_attributes($args);
// leave nocache mode
$this->compiler->nocache = false;
// this tag does not return compiled code
$this->compiler->has_code = false;
return true;
}
}
?> ?>

View File

@@ -21,7 +21,7 @@ class Smarty_Internal_Compile_Object_Block_Function extends Smarty_Internal_Comp
* @param object $compiler compiler object * @param object $compiler compiler object
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $tag, $methode, $compiler) public function compile($args, $compiler, $tag, $methode)
{ {
$this->compiler = $compiler; $this->compiler = $compiler;
if (strlen($tag) < 5 || substr_compare($tag, 'close', -5, 5) != 0) { if (strlen($tag) < 5 || substr_compare($tag, 'close', -5, 5) != 0) {

View File

@@ -21,7 +21,7 @@ class Smarty_Internal_Compile_Object_Function extends Smarty_Internal_CompileBas
* @param object $compiler compiler object * @param object $compiler compiler object
* @return string compiled code * @return string compiled code
*/ */
public function compile($args, $tag, $methode, $compiler) public function compile($args, $compiler, $tag, $methode)
{ {
$this->compiler = $compiler; $this->compiler = $compiler;
// This tag does create output // This tag does create output

View File

@@ -2,7 +2,7 @@
/** /**
* Smarty Internal Plugin Compile Section * Smarty Internal Plugin Compile Section
* *
* Compiles the {section} tag * Compiles the {section} {sectionelse} {/section} tags
* *
* @package Smarty * @package Smarty
* @subpackage Compiler * @subpackage Compiler
@@ -111,4 +111,60 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Sectionelse Class
*/
class Smarty_Internal_Compile_Sectionelse extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {sectionelse} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('section'));
$this->_open_tag('sectionelse',array('sectionelse', $this->compiler->nocache));
return "<?php endfor; else: ?>";
}
}
/**
* Smarty Internal Plugin Compile Sectionclose Class
*/
class Smarty_Internal_Compile_Sectionclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/section} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('section', 'sectionelse'));
if ($_open_tag == 'sectionelse')
return "<?php endif; ?>";
else
return "<?php endfor; endif; ?>";
}
}
?> ?>

View File

@@ -1,6 +1,6 @@
<?php <?php
/** /**
* Smarty Internal Plugin Compile Smarty * Smarty Internal Plugin Compile Special Smarty Variable
* *
* Compiles the special $smarty variables * Compiles the special $smarty variables
* *
@@ -9,9 +9,9 @@
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Compile Smarty Class * Smarty Internal Plugin Compile special Smarty Variable Class
*/ */
class Smarty_Internal_Compile_Internal_Smarty_Var extends Smarty_Internal_CompileBase { class Smarty_Internal_Compile_Special_Smarty_Variable extends Smarty_Internal_CompileBase {
/** /**
* Compiles code for the speical $smarty variables * Compiles code for the speical $smarty variables
* *

View File

@@ -0,0 +1,59 @@
<?php
/**
* Smarty Internal Plugin Compile Strip
*
* Compiles the {strip} {/strip} tags
*
* @package Smarty
* @subpackage Compiler
* @author Uwe Tews
*/
/**
* Smarty Internal Plugin Compile Strip Class
*/
class Smarty_Internal_Compile_Strip extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {strip} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
$this->_open_tag('strip');
$_output = "<?php ob_start(); ?>";
return $_output;
}
}
/**
* Smarty Internal Plugin Compile Stripclose Class
*/
class Smarty_Internal_Compile_Stripclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/strip} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// check and get attributes
$_attr = $this->_get_attributes($args);
$saved_attr = $this->_close_tag(array('strip'));
$_output = "<?php echo preg_replace('![\t ]*[\r\n]+[\t ]*!', '', ob_get_clean()); ?>\n";
return $_output;
}
}
?>

View File

@@ -41,4 +41,26 @@ class Smarty_Internal_Compile_While extends Smarty_Internal_CompileBase {
} }
} }
/**
* Smarty Internal Plugin Compile Whileclose Class
*/
class Smarty_Internal_Compile_Whileclose extends Smarty_Internal_CompileBase {
/**
* Compiles code for the {/while} tag
*
* @param array $args array with attributes from parser
* @param object $compiler compiler object
* @return string compiled code
*/
public function compile($args, $compiler)
{
$this->compiler = $compiler;
// must endblock be nocache?
if ($this->compiler->nocache) {
$this->compiler->tag_nocache = true;
}
$this->compiler->nocache = $this->_close_tag(array('while'));
return "<?php }?>";
}
}
?> ?>

View File

@@ -137,9 +137,9 @@ class Smarty_Internal_Config {
$_filepath = (string)abs(crc32($this->config_resource_name . $_flag)); $_filepath = (string)abs(crc32($this->config_resource_name . $_flag));
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($this->smarty->use_sub_dirs) { if ($this->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 3) . DS $_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS
. substr($_filepath, 0, 1) . DS . substr($_filepath, 4, 2) . DS
. $_filepath; . $_filepath;
} }
$_compile_dir = $this->smarty->compile_dir; $_compile_dir = $this->smarty->compile_dir;
@@ -226,7 +226,9 @@ class Smarty_Internal_Config {
{ {
if (isset($this->template)) { if (isset($this->template)) {
$this->template->properties['file_dependency']['F' . abs(crc32($this->getConfigFilepath()))] = array($this->getConfigFilepath(), $this->getTimestamp()); $this->template->properties['file_dependency']['F' . abs(crc32($this->getConfigFilepath()))] = array($this->getConfigFilepath(), $this->getTimestamp());
} } else {
$this->smarty->properties['file_dependency']['F' . abs(crc32($this->getConfigFilepath()))] = array($this->getConfigFilepath(), $this->getTimestamp());
}
$config_data = unserialize($this->getCompiledConfig()); $config_data = unserialize($this->getCompiledConfig());
// var_dump($config_data); // var_dump($config_data);
// copy global config vars // copy global config vars

View File

@@ -8,7 +8,7 @@
* @author Uwe Tews * @author Uwe Tews
*/ */
/** /**
* Smarty Internal Plugin Templatelexer * Smarty Internal Plugin Configfilelexer
*/ */
class Smarty_Internal_Configfilelexer class Smarty_Internal_Configfilelexer
{ {

View File

@@ -103,12 +103,12 @@ class TPC_yyStackEntry
// code external to the class is included here // code external to the class is included here
// declare_class is output here // declare_class is output here
#line 12 "internal.configfileparser.y" #line 12 "Smarty_Internal_Configfileparser.y"
class Smarty_Internal_Configfileparser#line 109 "internal.configfileparser.php" class Smarty_Internal_Configfileparser#line 109 "Smarty_Internal_Configfileparser.php"
{ {
/* First off, code is included which follows the "include_class" declaration /* First off, code is included which follows the "include_class" declaration
** in the input file. */ ** in the input file. */
#line 14 "internal.configfileparser.y" #line 14 "Smarty_Internal_Configfileparser.y"
// states whether the parse was successful or not // states whether the parse was successful or not
public $successful = true; public $successful = true;
@@ -133,7 +133,7 @@ class Smarty_Internal_Configfileparser#line 109 "internal.configfileparser.php"
return $instance; return $instance;
} }
#line 139 "internal.configfileparser.php" #line 139 "Smarty_Internal_Configfileparser.php"
/* Next is all token values, as class constants /* Next is all token values, as class constants
*/ */
@@ -830,24 +830,24 @@ static public $yy_action = array(
** function yy_r0($yymsp){ ... } // User supplied code ** function yy_r0($yymsp){ ... } // User supplied code
** #line <lineno> <thisfile> ** #line <lineno> <thisfile>
*/ */
#line 67 "internal.configfileparser.y" #line 67 "Smarty_Internal_Configfileparser.y"
function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
#line 840 "internal.configfileparser.php" #line 840 "Smarty_Internal_Configfileparser.php"
#line 73 "internal.configfileparser.y" #line 73 "Smarty_Internal_Configfileparser.y"
function yy_r1(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } function yy_r1(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; }
#line 843 "internal.configfileparser.php" #line 843 "Smarty_Internal_Configfileparser.php"
#line 75 "internal.configfileparser.y" #line 75 "Smarty_Internal_Configfileparser.y"
function yy_r2(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } function yy_r2(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; }
#line 846 "internal.configfileparser.php" #line 846 "Smarty_Internal_Configfileparser.php"
#line 81 "internal.configfileparser.y" #line 81 "Smarty_Internal_Configfileparser.y"
function yy_r3(){ $this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue =''; } function yy_r3(){ $this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor; $this->_retvalue =''; }
#line 849 "internal.configfileparser.php" #line 849 "Smarty_Internal_Configfileparser.php"
#line 83 "internal.configfileparser.y" #line 83 "Smarty_Internal_Configfileparser.y"
function yy_r4(){ if ($this->smarty->config_read_hidden) { function yy_r4(){ if ($this->smarty->config_read_hidden) {
$this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor; $this->hidden_section = false; $this->current_section = $this->yystack[$this->yyidx + -2]->minor;
} else {$this->hidden_section = true; } $this->_retvalue =''; } } else {$this->hidden_section = true; } $this->_retvalue =''; }
#line 854 "internal.configfileparser.php" #line 854 "Smarty_Internal_Configfileparser.php"
#line 87 "internal.configfileparser.y" #line 87 "Smarty_Internal_Configfileparser.y"
function yy_r5(){if (!$this->hidden_section) { function yy_r5(){if (!$this->hidden_section) {
$value=$this->yystack[$this->yyidx + -1]->minor; $value=$this->yystack[$this->yyidx + -1]->minor;
if ($this->smarty->config_booleanize) { if ($this->smarty->config_booleanize) {
@@ -871,19 +871,19 @@ static public $yy_action = array(
$this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor][]=$value; $this->compiler->config_data['sections'][$this->current_section]['vars'][$this->yystack[$this->yyidx + -3]->minor][]=$value;
} }
}} $this->_retvalue =''; } }} $this->_retvalue =''; }
#line 879 "internal.configfileparser.php" #line 879 "Smarty_Internal_Configfileparser.php"
#line 111 "internal.configfileparser.y" #line 111 "Smarty_Internal_Configfileparser.y"
function yy_r6(){ $this->_retvalue =''; } function yy_r6(){ $this->_retvalue =''; }
#line 882 "internal.configfileparser.php" #line 882 "Smarty_Internal_Configfileparser.php"
#line 115 "internal.configfileparser.y" #line 115 "Smarty_Internal_Configfileparser.y"
function yy_r9(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,"'"); } function yy_r9(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,"'"); }
#line 885 "internal.configfileparser.php" #line 885 "Smarty_Internal_Configfileparser.php"
#line 116 "internal.configfileparser.y" #line 116 "Smarty_Internal_Configfileparser.y"
function yy_r10(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,'"'); } function yy_r10(){$this->_retvalue = trim($this->yystack[$this->yyidx + 0]->minor,'"'); }
#line 888 "internal.configfileparser.php" #line 888 "Smarty_Internal_Configfileparser.php"
#line 118 "internal.configfileparser.y" #line 118 "Smarty_Internal_Configfileparser.y"
function yy_r12(){$this->_retvalue = (int)$this->yystack[$this->yyidx + 0]->minor; } function yy_r12(){$this->_retvalue = (int)$this->yystack[$this->yyidx + 0]->minor; }
#line 891 "internal.configfileparser.php" #line 891 "Smarty_Internal_Configfileparser.php"
/** /**
* placeholder for the left hand side in a reduce operation. * placeholder for the left hand side in a reduce operation.
@@ -995,12 +995,12 @@ static public $yy_action = array(
*/ */
function yy_syntax_error($yymajor, $TOKEN) function yy_syntax_error($yymajor, $TOKEN)
{ {
#line 52 "internal.configfileparser.y" #line 52 "Smarty_Internal_Configfileparser.y"
$this->internalError = true; $this->internalError = true;
$this->yymajor = $yymajor; $this->yymajor = $yymajor;
$this->compiler->trigger_config_file_error(); $this->compiler->trigger_config_file_error();
#line 1009 "internal.configfileparser.php" #line 1009 "Smarty_Internal_Configfileparser.php"
} }
/** /**
@@ -1018,13 +1018,13 @@ static public $yy_action = array(
} }
/* Here code is inserted which will be executed whenever the /* Here code is inserted which will be executed whenever the
** parser accepts */ ** parser accepts */
#line 44 "internal.configfileparser.y" #line 44 "Smarty_Internal_Configfileparser.y"
$this->successful = !$this->internalError; $this->successful = !$this->internalError;
$this->internalError = false; $this->internalError = false;
$this->retvalue = $this->_retvalue; $this->retvalue = $this->_retvalue;
//echo $this->retvalue."\n\n"; //echo $this->retvalue."\n\n";
#line 1034 "internal.configfileparser.php" #line 1034 "Smarty_Internal_Configfileparser.php"
} }
/** /**

View File

@@ -171,9 +171,9 @@ class Smarty_Internal_Resource_Extend {
$_filepath = (string)abs(crc32($template->resource_name)); $_filepath = (string)abs(crc32($template->resource_name));
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($template->smarty->use_sub_dirs) { if ($template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 3) . DS $_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS
. substr($_filepath, 0, 1) . DS . substr($_filepath, 4, 2) . DS
. $_filepath; . $_filepath;
} }
$_compile_dir_sep = $template->smarty->use_sub_dirs ? DS : '^'; $_compile_dir_sep = $template->smarty->use_sub_dirs ? DS : '^';

View File

@@ -115,9 +115,9 @@ class Smarty_Internal_Resource_File {
$_filepath = (string)abs(crc32($_template->resource_name)); $_filepath = (string)abs(crc32($_template->resource_name));
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) { if ($_template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 3) . DS $_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS
. substr($_filepath, 0, 1) . DS . substr($_filepath, 4, 2) . DS
. $_filepath; . $_filepath;
} }
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';

View File

@@ -127,9 +127,9 @@ class Smarty_Internal_Resource_Registered {
$_filepath = (string)abs(crc32($_template->template_resource)); $_filepath = (string)abs(crc32($_template->template_resource));
// if use_sub_dirs, break file into directories // if use_sub_dirs, break file into directories
if ($_template->smarty->use_sub_dirs) { if ($_template->smarty->use_sub_dirs) {
$_filepath = substr($_filepath, 0, 3) . DS $_filepath = substr($_filepath, 0, 2) . DS
. substr($_filepath, 0, 2) . DS . substr($_filepath, 2, 2) . DS
. substr($_filepath, 0, 1) . DS . substr($_filepath, 4, 2) . DS
. $_filepath; . $_filepath;
} }
$_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^'; $_compile_dir_sep = $_template->smarty->use_sub_dirs ? DS : '^';

View File

@@ -209,7 +209,6 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
public function mustCompile () public function mustCompile ()
{ {
$this->isExisting(true); $this->isExisting(true);
if ($this->mustCompile === null) { if ($this->mustCompile === null) {
$this->mustCompile = ($this->usesCompiler() && ($this->force_compile || $this->isEvaluated() || ($this->smarty->compile_check && $this->getCompiledTimestamp () !== $this->getTemplateTimestamp ()))); $this->mustCompile = ($this->usesCompiler() && ($this->force_compile || $this->isEvaluated() || ($this->smarty->compile_check && $this->getCompiledTimestamp () !== $this->getTemplateTimestamp ())));
} }
@@ -291,7 +290,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
// write compiled template // write compiled template
Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template); Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template);
// make template and compiled file timestamp match // make template and compiled file timestamp match
$this->compiled_timestamp = null;
touch($this->getCompiledFilepath(), $this->getTemplateTimestamp()); touch($this->getCompiledFilepath(), $this->getTemplateTimestamp());
// daylight saving time problem on windows
if ($this->template_timestamp != $this->getCompiledTimestamp()) {
touch($this->getCompiledFilepath(),2*$this->template_timestamp - $this->compiled_timestamp);
}
} }
} else { } else {
// error compiling template // error compiling template
@@ -366,11 +370,11 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
if ($this->getCachedTimestamp() === false) { if ($this->getCachedTimestamp() === false) {
return $this->isCached; return $this->isCached;
} }
if (($this->caching == SMARTY_CACHING_LIVETIME_SAVED || ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT && (time() <= ($this->getCachedTimestamp() + $this->cache_lifetime) || $this->cache_lifetime < 0)))) { if (($this->caching == SMARTY_CACHING_LIFETIME_SAVED || ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT && (time() <= ($this->getCachedTimestamp() + $this->cache_lifetime) || $this->cache_lifetime < 0)))) {
$_start_time = $this->_get_time(); $_start_time = $this->_get_time();
$this->rendered_content = $this->cache_resource_object->getCachedContents($this); $this->rendered_content = $this->cache_resource_object->getCachedContents($this);
$this->cache_time += $this->_get_time() - $_start_time; $this->cache_time += $this->_get_time() - $_start_time;
if ($this->caching == SMARTY_CACHING_LIVETIME_SAVED && $this->properties['cache_lifetime'] >0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) { if ($this->caching == SMARTY_CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] >0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) {
$this->rendered_content = null; $this->rendered_content = null;
return $this->isCached; return $this->isCached;
} }
@@ -664,12 +668,12 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase {
return $this->smarty->resource_objects[$resource_type] = new Smarty_Internal_Resource_Registered($this->smarty); return $this->smarty->resource_objects[$resource_type] = new Smarty_Internal_Resource_Registered($this->smarty);
} else { } else {
// try sysplugins dir // try sysplugins dir
$_resource_class = "Smarty_Internal_Resource_{$resource_type}"; $_resource_class = 'Smarty_Internal_Resource_' . $resource_type;
if ($this->smarty->loadPlugin($_resource_class)) { if ($this->smarty->loadPlugin($_resource_class)) {
return $this->smarty->resource_objects[$resource_type] = new $_resource_class($this->smarty); return $this->smarty->resource_objects[$resource_type] = new $_resource_class($this->smarty);
} else { } else {
// try plugins dir // try plugins dir
$_resource_class = "Smarty_Resource_{$resource_type}"; $_resource_class = 'Smarty_Resource_' . $resource_type;
if ($this->smarty->loadPlugin($_resource_class)) { if ($this->smarty->loadPlugin($_resource_class)) {
if (class_exists($_resource_class, false)) { if (class_exists($_resource_class, false)) {
return $this->smarty->resource_objects[$resource_type] = new $_resource_class($this->smarty); return $this->smarty->resource_objects[$resource_type] = new $_resource_class($this->smarty);

View File

@@ -228,7 +228,7 @@ class Smarty_Internal_TemplateBase {
// found it, return it // found it, return it
return $this->smarty->global_tpl_vars[$variable]; return $this->smarty->global_tpl_vars[$variable];
} }
if (Smarty::$error_unassigned && $error_enable) { if ($this->smarty->error_unassigned && $error_enable) {
throw new Exception('Undefined Smarty variable "' . $variable . '"'); throw new Exception('Undefined Smarty variable "' . $variable . '"');
} else { } else {
return new Undefined_Smarty_Variable; return new Undefined_Smarty_Variable;
@@ -251,7 +251,7 @@ class Smarty_Internal_TemplateBase {
// not found, try at parent // not found, try at parent
$_ptr = $_ptr->parent; $_ptr = $_ptr->parent;
} }
if (Smarty::$error_unassigned) { if ($this->smarty->error_unassigned) {
throw new Exception('Undefined config variable "' . $variable . '"'); throw new Exception('Undefined config variable "' . $variable . '"');
} else { } else {
return ''; return '';
@@ -274,7 +274,7 @@ class Smarty_Internal_TemplateBase {
return $_result; return $_result;
} }
if (Smarty::$error_unassigned) { if ($this->smarty->$error_unassigned) {
throw new Exception('Undefined stream variable "' . $variable . '"'); throw new Exception('Undefined stream variable "' . $variable . '"');
} else { } else {
return ''; return '';

View File

@@ -100,8 +100,8 @@ class Smarty_Internal_TemplateCompilerBase {
/** /**
* Compile Tag * Compile Tag
* *
* This is a call back from the lexer/parser * This is a call back from the lexer/parser
* It executes the required compile plugin for the Smarty tag * It executes the required compile plugin for the Smarty tag
* *
* @param string $tag tag name * @param string $tag tag name
* @param array $args array with tag attributes * @param array $args array with tag attributes
@@ -114,12 +114,12 @@ class Smarty_Internal_TemplateCompilerBase {
$this->has_code = true; $this->has_code = true;
$this->has_output = false; $this->has_output = false;
// compile the smarty tag (required compile classes to compile the tag are autoloaded) // compile the smarty tag (required compile classes to compile the tag are autoloaded)
if (($_output = $this->$tag($args, $this)) === false) { if (($_output = $this->generateCode($tag, $args)) === false) {
if (isset($this->smarty->template_functions[$tag])) { if (isset($this->smarty->template_functions[$tag])) {
// template defined by {template} tag // template defined by {template} tag
$args['name'] = $tag; $args['name'] = $tag;
$tag = 'internal_function_call'; $tag = 'function_call';
$_output = $this->$tag($args, $this); $_output = $this->generateCode($tag, $args);
} }
} }
if ($_output !== false) { if ($_output !== false) {
@@ -144,9 +144,9 @@ class Smarty_Internal_TemplateCompilerBase {
unset ($args['object_methode']); unset ($args['object_methode']);
if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) && if (!in_array($methode, $this->smarty->registered_objects[$tag][3]) &&
(empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) { (empty($this->smarty->registered_objects[$tag][1]) || in_array($methode, $this->smarty->registered_objects[$tag][1]))) {
return $this->object_function($args, $tag, $methode, $this); return $this->generateCode('object_function',$args, $tag, $methode);
} elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) {
return $this->object_block_function($args, $tag, $methode, $this); return $this->generateCode('object_block_function',$args, $tag, $methode);
} else { } else {
return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"'); return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"');
} }
@@ -159,11 +159,11 @@ class Smarty_Internal_TemplateCompilerBase {
if (!$this->smarty->registered_plugins[$tag][2]) { if (!$this->smarty->registered_plugins[$tag][2]) {
$this->tag_nocache = true; $this->tag_nocache = true;
} }
return call_user_func_array($this->smarty->registered_plugins[$tag][1], array($args, $this)); return call_user_func($this->smarty->registered_plugins[$tag][1], $args, $this);
} }
// compile function or block plugin // compile function or block plugin
$plugin_type = $this->smarty->registered_plugins[$tag][0] . '_plugin'; $plugin_type = $this->smarty->registered_plugins[$tag][0] . '_plugin';
return $this->$plugin_type($args, $tag, $this); return $this->generateCode($plugin_type, $args, $tag);
} }
// compile closing tag of block function // compile closing tag of block function
if (strlen($tag) > 5 && substr_compare($tag, 'close', -5, 5) == 0) { if (strlen($tag) > 5 && substr_compare($tag, 'close', -5, 5) == 0) {
@@ -173,14 +173,14 @@ class Smarty_Internal_TemplateCompilerBase {
$methode = $args['object_methode']; $methode = $args['object_methode'];
unset ($args['object_methode']); unset ($args['object_methode']);
if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) {
return $this->object_block_function($args, $tag, $methode, $this); return $this->generateCode('object_block_function', $args, $tag, $methode);
} else { } else {
return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"'); return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"');
} }
} }
// plugin ? // plugin ?
if (isset($this->smarty->registered_plugins[$base_tag]) && $this->smarty->registered_plugins[$base_tag][0] == 'block') { if (isset($this->smarty->registered_plugins[$base_tag]) && $this->smarty->registered_plugins[$base_tag][0] == 'block') {
return $this->block_plugin($args, $tag, $this); return $this->generateCode('block_plugin',$args, $tag);
} }
} }
$this->trigger_template_error ("unknown tag \"" . $tag . "\""); $this->trigger_template_error ("unknown tag \"" . $tag . "\"");
@@ -192,26 +192,28 @@ class Smarty_Internal_TemplateCompilerBase {
* *
* compile objects cached for reuse. * compile objects cached for reuse.
* class name format: Smarty_Internal_Compile_TagName * class name format: Smarty_Internal_Compile_TagName
* plugin filename format: internal.compile_tagname.php * plugin filename format: Smarty_Internal_Tagname.php
* *
* @param $tag string tag name * @param $tag string tag name
* @param $args array with tag attributes * @param $args array with tag attributes
* @param $subtag optional tag name at plugins
* @param $method string optional method on object tags
* @return string compiled code * @return string compiled code
*/ */
public function __call($name, $args) public function generateCode($tag, $args, $subtag = null, $method = null)
{ {
// re-use object if already exists // re-use object if already exists
if (isset(self::$_tag_objects[$name])) { if (isset(self::$_tag_objects[$tag])) {
// compile this tag // compile this tag
return call_user_func_array(array(self::$_tag_objects[$name], 'compile'), $args); return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $subtag, $method);
} }
// lazy load internal compiler plugin // lazy load internal compiler plugin
$class_name = "Smarty_Internal_Compile_{$name}"; $class_name = 'Smarty_Internal_Compile_' . $tag;
if ($this->smarty->loadPlugin($class_name)) { if ($this->smarty->loadPlugin($class_name)) {
// use plugin if found // use plugin if found
self::$_tag_objects[$name] = new $class_name; self::$_tag_objects[$tag] = new $class_name;
// compile this tag // compile this tag
return call_user_func_array(array(self::$_tag_objects[$name], 'compile'), $args); return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $subtag, $method);
} }
// no internal compile plugin for this tag // no internal compile plugin for this tag
return false; return false;

Some files were not shown because too many files have changed in this diff Show More