Files
PHPMailer6
auswertung
bootstrap
classes
config
controller
dashboard
datepicker
jquery
js
language
lib
old
smarty
demo
lexer
libs
plugins
sysplugins
smarty_cacheresource.php
smarty_cacheresource_custom.php
smarty_cacheresource_keyvaluestore.php
smarty_data.php
smarty_internal_block.php
smarty_internal_cacheresource_file.php
smarty_internal_compile_append.php
smarty_internal_compile_assign.php
smarty_internal_compile_block.php
smarty_internal_compile_block_child.php
smarty_internal_compile_block_parent.php
smarty_internal_compile_break.php
smarty_internal_compile_call.php
smarty_internal_compile_capture.php
smarty_internal_compile_child.php
smarty_internal_compile_config_load.php
smarty_internal_compile_continue.php
smarty_internal_compile_debug.php
smarty_internal_compile_eval.php
smarty_internal_compile_extends.php
smarty_internal_compile_for.php
smarty_internal_compile_foreach.php
smarty_internal_compile_function.php
smarty_internal_compile_if.php
smarty_internal_compile_include.php
smarty_internal_compile_include_php.php
smarty_internal_compile_insert.php
smarty_internal_compile_ldelim.php
smarty_internal_compile_make_nocache.php
smarty_internal_compile_nocache.php
smarty_internal_compile_parent.php
smarty_internal_compile_private_block_plugin.php
smarty_internal_compile_private_foreachsection.php
smarty_internal_compile_private_function_plugin.php
smarty_internal_compile_private_modifier.php
smarty_internal_compile_private_object_block_function.php
smarty_internal_compile_private_object_function.php
smarty_internal_compile_private_php.php
smarty_internal_compile_private_print_expression.php
smarty_internal_compile_private_registered_block.php
smarty_internal_compile_private_registered_function.php
smarty_internal_compile_private_special_variable.php
smarty_internal_compile_rdelim.php
smarty_internal_compile_section.php
smarty_internal_compile_setfilter.php
smarty_internal_compile_shared_inheritance.php
smarty_internal_compile_while.php
smarty_internal_compilebase.php
smarty_internal_config_file_compiler.php
smarty_internal_configfilelexer.php
smarty_internal_configfileparser.php
smarty_internal_data.php
smarty_internal_debug.php
smarty_internal_errorhandler.php
smarty_internal_extension_handler.php
smarty_internal_method_addautoloadfilters.php
smarty_internal_method_adddefaultmodifiers.php
smarty_internal_method_append.php
smarty_internal_method_appendbyref.php
smarty_internal_method_assignbyref.php
smarty_internal_method_assignglobal.php
smarty_internal_method_clearallassign.php
smarty_internal_method_clearallcache.php
smarty_internal_method_clearassign.php
smarty_internal_method_clearcache.php
smarty_internal_method_clearcompiledtemplate.php
smarty_internal_method_clearconfig.php
smarty_internal_method_compileallconfig.php
smarty_internal_method_compilealltemplates.php
smarty_internal_method_configload.php
smarty_internal_method_createdata.php
smarty_internal_method_getautoloadfilters.php
smarty_internal_method_getconfigvariable.php
smarty_internal_method_getconfigvars.php
smarty_internal_method_getdebugtemplate.php
smarty_internal_method_getdefaultmodifiers.php
smarty_internal_method_getglobal.php
smarty_internal_method_getregisteredobject.php
smarty_internal_method_getstreamvariable.php
smarty_internal_method_gettags.php
smarty_internal_method_gettemplatevars.php
smarty_internal_method_literals.php
smarty_internal_method_loadfilter.php
smarty_internal_method_loadplugin.php
smarty_internal_method_mustcompile.php
smarty_internal_method_registercacheresource.php
smarty_internal_method_registerclass.php
smarty_internal_method_registerdefaultconfighandler.php
smarty_internal_method_registerdefaultpluginhandler.php
smarty_internal_method_registerdefaulttemplatehandler.php
smarty_internal_method_registerfilter.php
smarty_internal_method_registerobject.php
smarty_internal_method_registerplugin.php
smarty_internal_method_registerresource.php
smarty_internal_method_setautoloadfilters.php
smarty_internal_method_setdebugtemplate.php
smarty_internal_method_setdefaultmodifiers.php
smarty_internal_method_unloadfilter.php
smarty_internal_method_unregistercacheresource.php
smarty_internal_method_unregisterfilter.php
smarty_internal_method_unregisterobject.php
smarty_internal_method_unregisterplugin.php
smarty_internal_method_unregisterresource.php
smarty_internal_nocache_insert.php
smarty_internal_parsetree.php
smarty_internal_parsetree_code.php
smarty_internal_parsetree_dq.php
smarty_internal_parsetree_dqcontent.php
smarty_internal_parsetree_tag.php
smarty_internal_parsetree_template.php
smarty_internal_parsetree_text.php
smarty_internal_resource_eval.php
smarty_internal_resource_extends.php
smarty_internal_resource_file.php
smarty_internal_resource_php.php
smarty_internal_resource_registered.php
smarty_internal_resource_stream.php
smarty_internal_resource_string.php
smarty_internal_runtime_cachemodify.php
smarty_internal_runtime_cacheresourcefile.php
smarty_internal_runtime_capture.php
smarty_internal_runtime_codeframe.php
smarty_internal_runtime_filterhandler.php
smarty_internal_runtime_foreach.php
smarty_internal_runtime_getincludepath.php
smarty_internal_runtime_inheritance.php
smarty_internal_runtime_make_nocache.php
smarty_internal_runtime_tplfunction.php
smarty_internal_runtime_updatecache.php
smarty_internal_runtime_updatescope.php
smarty_internal_runtime_writefile.php
smarty_internal_smartytemplatecompiler.php
smarty_internal_template.php
smarty_internal_templatebase.php
smarty_internal_templatecompilerbase.php
smarty_internal_templatelexer.php
smarty_internal_templateparser.php
smarty_internal_testinstall.php
smarty_internal_undefined.php
smarty_resource.php
smarty_resource_custom.php
smarty_resource_recompiled.php
smarty_resource_uncompiled.php
smarty_security.php
smarty_template_cached.php
smarty_template_compiled.php
smarty_template_config.php
smarty_template_resource_base.php
smarty_template_source.php
smarty_undefined_variable.php
smarty_variable.php
smartycompilerexception.php
smartyexception.php
Autoloader.php
Smarty.class.php
SmartyBC.class.php
bootstrap.php
debug.tpl
CHANGELOG.md
COMPOSER_RELEASE_NOTES.txt
INHERITANCE_RELEASE_NOTES.txt
LICENSE
NEW_FEATURES.txt
README
README.md
SMARTY_2_BC_NOTES.txt
SMARTY_3.0_BC_NOTES.txt
SMARTY_3.1_NOTES.txt
composer.json
expectException
smarty2
smarty_3
Smarty-2.6.28.zip
smarty-3.1.29.zip
media
selfregistration
sql
survey
templates
test
tinymce
.gitignore
Hinweise_zu_php8.txt
config.inc.php
todo.txt
survey/lib/smarty/libs/sysplugins/smarty_internal_compile_block.php
2023-03-14 14:47:50 +01:00

190 lines
7.7 KiB
PHP

<?php
/**
* This file is part of Smarty.
*
* (c) 2015 Uwe Tews
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Smarty Internal Plugin Compile Block Class
*
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
class Smarty_Internal_Compile_Block extends Smarty_Internal_Compile_Shared_Inheritance
{
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
public $required_attributes = array('name');
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
public $shorttag_order = array('name');
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
public $option_flags = array('hide', 'nocache');
/**
* Attribute definition: Overwrites base class.
*
* @var array
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('assign');
/**
* Compiles code for the {block} tag
*
* @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
*/
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
if (!isset($compiler->_cache[ 'blockNesting' ])) {
$compiler->_cache[ 'blockNesting' ] = 0;
}
if ($compiler->_cache[ 'blockNesting' ] === 0) {
// make sure that inheritance gets initialized in template code
$this->registerInit($compiler);
$this->option_flags = array('hide', 'nocache', 'append', 'prepend');
} else {
$this->option_flags = array('hide', 'nocache');
}
// check and get attributes
$_attr = $this->getAttributes($compiler, $args);
++$compiler->_cache[ 'blockNesting' ];
$_className = 'Block_' . preg_replace('![^\w]+!', '_', uniqid(mt_rand(), true));
$compiler->_cache[ 'blockName' ][ $compiler->_cache[ 'blockNesting' ] ] = $_attr[ 'name' ];
$compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ] = $_className;
$compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ] = array();
$compiler->_cache[ 'blockParams' ][ 1 ][ 'subBlocks' ][ trim($_attr[ 'name' ], '"\'') ][] = $_className;
$this->openTag(
$compiler,
'block',
array(
$_attr, $compiler->nocache, $compiler->parser->current_buffer,
$compiler->template->compiled->has_nocache_code,
$compiler->template->caching
)
);
$compiler->saveRequiredPlugins(true);
$compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
$compiler->template->compiled->has_nocache_code = false;
$compiler->suppressNocacheProcessing = true;
}
}
/**
* Smarty Internal Plugin Compile BlockClose Class
*/
class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_Compile_Shared_Inheritance
{
/**
* Compiles code for the {/block} tag
*
* @param array $args array with attributes from parser
* @param \Smarty_Internal_TemplateCompilerBase $compiler compiler object
* @param array $parameter array with compilation parameter
*
* @return bool true
*/
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
list($_attr, $_nocache, $_buffer, $_has_nocache_code, $_caching) = $this->closeTag($compiler, array('block'));
// init block parameter
$_block = $compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ];
unset($compiler->_cache[ 'blockParams' ][ $compiler->_cache[ 'blockNesting' ] ]);
$_name = $_attr[ 'name' ];
$_assign = isset($_attr[ 'assign' ]) ? $_attr[ 'assign' ] : null;
unset($_attr[ 'assign' ], $_attr[ 'name' ]);
foreach ($_attr as $name => $stat) {
if ((is_bool($stat) && $stat !== false) || (!is_bool($stat) && $stat !== 'false')) {
$_block[ $name ] = 'true';
}
}
$_className = $compiler->_cache[ 'blockClass' ][ $compiler->_cache[ 'blockNesting' ] ];
// get compiled block code
$_functionCode = $compiler->parser->current_buffer;
// setup buffer for template function code
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
$output = "<?php\n";
$output .= "/* {block {$_name}} */\n";
$output .= "class {$_className} extends Smarty_Internal_Block\n";
$output .= "{\n";
foreach ($_block as $property => $value) {
$output .= "public \${$property} = " . var_export($value, true) . ";\n";
}
$output .= "public function callBlock(Smarty_Internal_Template \$_smarty_tpl) {\n";
$output .= $compiler->compileRequiredPlugins();
$compiler->restoreRequiredPlugins();
if ($compiler->template->compiled->has_nocache_code) {
$output .= "\$_smarty_tpl->cached->hashes['{$compiler->template->compiled->nocache_hash}'] = true;\n";
}
if (isset($_assign)) {
$output .= "ob_start();\n";
}
$output .= "?>\n";
$compiler->parser->current_buffer->append_subtree(
$compiler->parser,
new Smarty_Internal_ParseTree_Tag(
$compiler->parser,
$output
)
);
$compiler->parser->current_buffer->append_subtree($compiler->parser, $_functionCode);
$output = "<?php\n";
if (isset($_assign)) {
$output .= "\$_smarty_tpl->assign({$_assign}, ob_get_clean());\n";
}
$output .= "}\n";
$output .= "}\n";
$output .= "/* {/block {$_name}} */\n\n";
$output .= "?>\n";
$compiler->parser->current_buffer->append_subtree(
$compiler->parser,
new Smarty_Internal_ParseTree_Tag(
$compiler->parser,
$output
)
);
$compiler->blockOrFunctionCode .= $compiler->parser->current_buffer->to_smarty_php($compiler->parser);
$compiler->parser->current_buffer = new Smarty_Internal_ParseTree_Template();
// restore old status
$compiler->template->compiled->has_nocache_code = $_has_nocache_code;
$compiler->tag_nocache = $compiler->nocache;
$compiler->nocache = $_nocache;
$compiler->parser->current_buffer = $_buffer;
$output = "<?php \n";
if ($compiler->_cache[ 'blockNesting' ] === 1) {
$output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name);\n";
} else {
$output .= "\$_smarty_tpl->inheritance->instanceBlock(\$_smarty_tpl, '$_className', $_name, \$this->tplIndex);\n";
}
$output .= "?>\n";
--$compiler->_cache[ 'blockNesting' ];
if ($compiler->_cache[ 'blockNesting' ] === 0) {
unset($compiler->_cache[ 'blockNesting' ]);
}
$compiler->has_code = true;
$compiler->suppressNocacheProcessing = true;
return $output;
}
}