1<?php
2/**
3 * Smarty Internal Plugin Compile Registered Block
4 * Compiles code for the execution of a registered block function
5 *
6 * @package    Smarty
7 * @subpackage Compiler
8 * @author     Uwe Tews
9 */
10
11/**
12 * Smarty Internal Plugin Compile Registered Block Class
13 *
14 * @package    Smarty
15 * @subpackage Compiler
16 */
17class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_Compile_Private_Block_Plugin
18{
19    /**
20     * Setup callback, parameter array and nocache mode
21     *
22     * @param \Smarty_Internal_TemplateCompilerBase $compiler
23     * @param array                                 $_attr attributes
24     * @param string                                $tag
25     * @param null                                  $function
26     *
27     * @return array
28     */
29    public function setup(Smarty_Internal_TemplateCompilerBase $compiler, $_attr, $tag, $function)
30    {
31        if (isset($compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ])) {
32            $tag_info = $compiler->smarty->registered_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
33            $callback = $tag_info[ 0 ];
34            if (is_array($callback)) {
35                if (is_object($callback[ 0 ])) {
36                    $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
37                    $callback =
38                        array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "->{$callback[1]}");
39                } else {
40                    $callable = "array(\$_block_plugin{$this->nesting}, '{$callback[1]}')";
41                    $callback =
42                        array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0][0]", "::{$callback[1]}");
43                }
44            } else {
45                $callable = "\$_block_plugin{$this->nesting}";
46                $callback = array("\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0]", '');
47            }
48        } else {
49            $tag_info = $compiler->default_handler_plugins[ Smarty::PLUGIN_BLOCK ][ $tag ];
50            $callback = $tag_info[ 0 ];
51            if (is_array($callback)) {
52                $callable = "array('{$callback[0]}', '{$callback[1]}')";
53                $callback = "{$callback[1]}::{$callback[1]}";
54            } else {
55                $callable = null;
56            }
57        }
58        $compiler->tag_nocache = !$tag_info[ 1 ] | $compiler->tag_nocache;
59        $_paramsArray = array();
60        foreach ($_attr as $_key => $_value) {
61            if (is_int($_key)) {
62                $_paramsArray[] = "$_key=>$_value";
63            } elseif ($compiler->template->caching && in_array($_key, $tag_info[ 2 ])) {
64                $_value = str_replace('\'', "^#^", $_value);
65                $_paramsArray[] = "'$_key'=>^#^.var_export($_value,true).^#^";
66            } else {
67                $_paramsArray[] = "'$_key'=>$_value";
68            }
69        }
70        return array($callback, $_paramsArray, $callable);
71    }
72}
73