Blame view

application/_libs/Smarty-3.0.9/libs/sysplugins/smarty_internal_compile_call.php 4.11 KB
8d65d0ce   andryeyev   init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  <?php
  
  /**
   * Smarty Internal Plugin Compile Function_Call
   * 
   * Compiles the calls of user defined tags defined by {function}
   * 
   * @package Smarty
   * @subpackage Compiler
   * @author Uwe Tews 
   */
  
  /**
   * Smarty Internal Plugin Compile Function_Call Class
   */
  class Smarty_Internal_Compile_Call extends Smarty_Internal_CompileBase {
  	// attribute definitions
      public $required_attributes = array('name');
      public $shorttag_order = array('name');
      public $optional_attributes = array('_any'); 
  
      /**
       * Compiles the calls of user defined tags defined by {function}
       * 
       * @param array $args array with attributes from parser
       * @param object $compiler compiler object
       * @param array $parameter array with compilation parameter
       * @return string compiled code
       */
      public function compile($args, $compiler)
      {
          $this->compiler = $compiler;
          $this->smarty = $compiler->smarty;
          // check and get attributes
          $_attr = $this->_get_attributes($args); 
          // save possible attributes
          if (isset($_attr['assign'])) {
              // output will be stored in a smarty variable instead of beind displayed
              $_assign = $_attr['assign'];
          } 
          $_name = $_attr['name'];
          unset($_attr['name'], $_attr['assign'], $_attr['nocache']); 
          // set flag (compiled code of {function} must be included in cache file
          if ($compiler->nocache || $compiler->tag_nocache) {
              $_nocache = 'true';
          } else {
              $_nocache = 'false';
          } 
          $_paramsArray = array();
          foreach ($_attr as $_key => $_value) {
              if (is_int($_key)) {
                  $_paramsArray[] = "$_key=>$_value";
              } else {
                  $_paramsArray[] = "'$_key'=>$_value";
              } 
          }
          if (isset($compiler->template->properties['function'][$_name]['parameter'])) {
              foreach ($compiler->template->properties['function'][$_name]['parameter'] as $_key => $_value) {
                  if (!isset($_attr[$_key])) {
                      if (is_int($_key)) {
                          $_paramsArray[] = "$_key=>$_value";
                      } else {
                          $_paramsArray[] = "'$_key'=>$_value";
                      } 
                  } 
              } 
          } elseif (isset($this->smarty->template_functions[$_name]['parameter'])) {
             foreach ($this->smarty->template_functions[$_name]['parameter'] as $_key => $_value) {
                  if (!isset($_attr[$_key])) {
                      if (is_int($_key)) {
                          $_paramsArray[] = "$_key=>$_value";
                      } else {
                          $_paramsArray[] = "'$_key'=>$_value";
                      } 
                  } 
              } 
          }
          //varibale name?
          if (!(strpos($_name,'$')===false)) {
          	$call_cache = $_name;
          	$call_function = '$tmp = "smarty_template_function_".'.$_name.'; $tmp';
         	} else {
          	$_name = trim($_name, "'\"");
         		$call_cache = "'{$_name}'";
           	$call_function = 'smarty_template_function_'.$_name;
          }
        	
          $_params = 'array(' . implode(",", $_paramsArray) . ')';
      	$_hash = str_replace('-','_',$compiler->template->properties['nocache_hash']);
          // was there an assign attribute
          if (isset($_assign)) {
              if ($compiler->template->caching) {
                  $_output = "<?php ob_start(); Smarty_Internal_Function_Call_Handler::call ({$call_cache},\$_smarty_tpl,{$_params},'{$_hash}',{$_nocache}); \$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
              } else {
                  $_output = "<?php ob_start(); {$call_function}(\$_smarty_tpl,{$_params}); \$_smarty_tpl->assign({$_assign}, ob_get_clean());?>\n";
              } 
          } else {
              if ($compiler->template->caching) {
                  $_output = "<?php Smarty_Internal_Function_Call_Handler::call ({$call_cache},\$_smarty_tpl,{$_params},'{$_hash}',{$_nocache});?>\n";
              } else {
                  $_output = "<?php {$call_function}(\$_smarty_tpl,{$_params});?>\n";
              } 
          } 
          return $_output;
      } 
  } 
  
  ?>