Code

2aea13f301e39d6faffa48f2a6c13e04c190d01e
[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_debug.php
1 <?php
2 /**
3  * Smarty Internal Plugin Debug
4  *
5  * Class to collect data for the Smarty Debugging Consol
6  *
7  * @package Smarty
8  * @subpackage Debug
9  * @author Uwe Tews
10  */
12 /**
13  * Smarty Internal Plugin Debug Class
14  *
15  * @package Smarty
16  * @subpackage Debug
17  */
18 class Smarty_Internal_Debug extends Smarty_Internal_Data {
20     /**
21      * template data
22      *
23      * @var array
24      */
25     public static $template_data = array();
27     /**
28      * Start logging of compile time
29      *
30      * @param object $template
31      */
32     public static function start_compile($template)
33     {
34         $key = self::get_key($template);
35         self::$template_data[$key]['start_time'] = microtime(true);
36     }
38     /**
39      * End logging of compile time
40      *
41      * @param object $template
42      */
43     public static function end_compile($template)
44     {
45         $key = self::get_key($template);
46         self::$template_data[$key]['compile_time'] += microtime(true) - self::$template_data[$key]['start_time'];
47     }
49     /**
50      * Start logging of render time
51      *
52      * @param object $template
53      */
54     public static function start_render($template)
55     {
56         $key = self::get_key($template);
57         self::$template_data[$key]['start_time'] = microtime(true);
58     }
60     /**
61      * End logging of compile time
62      *
63      * @param object $template
64      */
65     public static function end_render($template)
66     {
67         $key = self::get_key($template);
68         self::$template_data[$key]['render_time'] += microtime(true) - self::$template_data[$key]['start_time'];
69     }
71     /**
72      * Start logging of cache time
73      *
74      * @param object $template cached template
75      */
76     public static function start_cache($template)
77     {
78         $key = self::get_key($template);
79         self::$template_data[$key]['start_time'] = microtime(true);
80     }
82     /**
83      * End logging of cache time
84      *
85      * @param object $template cached template
86      */
87     public static function end_cache($template)
88     {
89         $key = self::get_key($template);
90         self::$template_data[$key]['cache_time'] += microtime(true) - self::$template_data[$key]['start_time'];
91     }
93     /**
94      * Opens a window for the Smarty Debugging Consol and display the data
95      *
96      * @param Smarty_Internal_Template|Smarty $obj object to debug
97      */
98     public static function display_debug($obj)
99     {
100         // prepare information of assigned variables
101         $ptr = self::get_debug_vars($obj);
102         if ($obj instanceof Smarty) {
103             $smarty = clone $obj;
104         } else {
105             $smarty = clone $obj->smarty;
106         }
107         $_assigned_vars = $ptr->tpl_vars;
108         ksort($_assigned_vars);
109         $_config_vars = $ptr->config_vars;
110         ksort($_config_vars);
111         $smarty->registered_filters = array();
112         $smarty->autoload_filters = array();
113         $smarty->default_modifiers = array();
114         $smarty->force_compile = false;
115         $smarty->left_delimiter = '{';
116         $smarty->right_delimiter = '}';
117         $smarty->debugging = false;
118         $smarty->force_compile = false;
119         $_template = new Smarty_Internal_Template($smarty->debug_tpl, $smarty);
120         $_template->caching = false;
121         $_template->disableSecurity();
122         $_template->cache_id = null;
123         $_template->compile_id = null;
124         if ($obj instanceof Smarty_Internal_Template) {
125             $_template->assign('template_name', $obj->source->type . ':' . $obj->source->name);
126         }
127         if ($obj instanceof Smarty) {
128             $_template->assign('template_data', self::$template_data);
129         } else {
130             $_template->assign('template_data', null);
131         }
132         $_template->assign('assigned_vars', $_assigned_vars);
133         $_template->assign('config_vars', $_config_vars);
134         $_template->assign('execution_time', microtime(true) - $smarty->start_time);
135         echo $_template->fetch();
136     }
138     /**
139      * Recursively gets variables from all template/data scopes
140      *
141      * @param Smarty_Internal_Template|Smarty_Data $obj object to debug
142      * @return StdClass
143      */
144     public static function get_debug_vars($obj)
145     {
146         $config_vars = $obj->config_vars;
147         $tpl_vars = array();
148         foreach ($obj->tpl_vars as $key => $var) {
149             $tpl_vars[$key] = clone $var;
150             if ($obj instanceof Smarty_Internal_Template) {
151                 $tpl_vars[$key]->scope = $obj->source->type . ':' . $obj->source->name;
152             } elseif ($obj instanceof Smarty_Data) {
153                 $tpl_vars[$key]->scope = 'Data object';
154             } else {
155                 $tpl_vars[$key]->scope = 'Smarty root';
156             }
157         }
159         if (isset($obj->parent)) {
160             $parent = self::get_debug_vars($obj->parent);
161             $tpl_vars = array_merge($parent->tpl_vars, $tpl_vars);
162             $config_vars = array_merge($parent->config_vars, $config_vars);
163         } else {
164             foreach (Smarty::$global_tpl_vars as $name => $var) {
165                 if (!array_key_exists($name, $tpl_vars)) {
166                     $clone = clone $var;
167                     $clone->scope = 'Global';
168                     $tpl_vars[$name] = $clone;
169                 }
170             }
171         }
172         return (object) array('tpl_vars' => $tpl_vars, 'config_vars' => $config_vars);
173     }
175     /**
176      * Return key into $template_data for template
177      *
178      * @param object $template  template object
179      * @return string   key into $template_data
180      */
181     private static function get_key($template)
182     {
183         static $_is_stringy = array('string' => true, 'eval' => true);
184         // calculate Uid if not already done
185         if ($template->source->uid == '') {
186             $template->source->filepath;
187         }
188         $key = $template->source->uid;
189         if (isset(self::$template_data[$key])) {
190             return $key;
191         } else {
192             if (isset($_is_stringy[$template->source->type])) {
193                 self::$template_data[$key]['name'] = '\''.substr($template->source->name,0,25).'...\'';
194             } else {
195                 self::$template_data[$key]['name'] = $template->source->filepath;
196             }
197             self::$template_data[$key]['compile_time'] = 0;
198             self::$template_data[$key]['render_time'] = 0;
199             self::$template_data[$key]['cache_time'] = 0;
200             return $key;
201         }
202     }
206 ?>