/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to codeigniter/system/libraries/Profiler.php

  • Committer: galaxyAbstractor
  • Date: 2013-04-10 15:58:59 UTC
  • mfrom: (20.1.1 lenasys)
  • mto: This revision was merged to the branch mainline in revision 23.
  • Revision ID: galaxyabstractor@gmail.com-20130410155859-cih60kaz5es8savt
CodeIgniter implementation of basic CMS system

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
2
/**
 
3
 * CodeIgniter
 
4
 *
 
5
 * An open source application development framework for PHP 5.1.6 or newer
 
6
 *
 
7
 * @package             CodeIgniter
 
8
 * @author              ExpressionEngine Dev Team
 
9
 * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc.
 
10
 * @license             http://codeigniter.com/user_guide/license.html
 
11
 * @link                http://codeigniter.com
 
12
 * @since               Version 1.0
 
13
 * @filesource
 
14
 */
 
15
 
 
16
// ------------------------------------------------------------------------
 
17
 
 
18
/**
 
19
 * CodeIgniter Profiler Class
 
20
 *
 
21
 * This class enables you to display benchmark, query, and other data
 
22
 * in order to help with debugging and optimization.
 
23
 *
 
24
 * Note: At some point it would be good to move all the HTML in this class
 
25
 * into a set of template files in order to allow customization.
 
26
 *
 
27
 * @package             CodeIgniter
 
28
 * @subpackage  Libraries
 
29
 * @category    Libraries
 
30
 * @author              ExpressionEngine Dev Team
 
31
 * @link                http://codeigniter.com/user_guide/general/profiling.html
 
32
 */
 
33
class CI_Profiler {
 
34
 
 
35
        protected $_available_sections = array(
 
36
                                                                                'benchmarks',
 
37
                                                                                'get',
 
38
                                                                                'memory_usage',
 
39
                                                                                'post',
 
40
                                                                                'uri_string',
 
41
                                                                                'controller_info',
 
42
                                                                                'queries',
 
43
                                                                                'http_headers',
 
44
                                                                                'session_data',
 
45
                                                                                'config'
 
46
                                                                                );
 
47
 
 
48
        protected $_query_toggle_count = 25;
 
49
 
 
50
        protected $CI;
 
51
 
 
52
        // --------------------------------------------------------------------
 
53
 
 
54
        public function __construct($config = array())
 
55
        {
 
56
                $this->CI =& get_instance();
 
57
                $this->CI->load->language('profiler');
 
58
 
 
59
                if (isset($config['query_toggle_count']))
 
60
                {
 
61
                        $this->_query_toggle_count = (int) $config['query_toggle_count'];
 
62
                        unset($config['query_toggle_count']);
 
63
                }
 
64
 
 
65
                // default all sections to display
 
66
                foreach ($this->_available_sections as $section)
 
67
                {
 
68
                        if ( ! isset($config[$section]))
 
69
                        {
 
70
                                $this->_compile_{$section} = TRUE;
 
71
                        }
 
72
                }
 
73
 
 
74
                $this->set_sections($config);
 
75
        }
 
76
 
 
77
        // --------------------------------------------------------------------
 
78
 
 
79
        /**
 
80
         * Set Sections
 
81
         *
 
82
         * Sets the private _compile_* properties to enable/disable Profiler sections
 
83
         *
 
84
         * @param       mixed
 
85
         * @return      void
 
86
         */
 
87
        public function set_sections($config)
 
88
        {
 
89
                foreach ($config as $method => $enable)
 
90
                {
 
91
                        if (in_array($method, $this->_available_sections))
 
92
                        {
 
93
                                $this->_compile_{$method} = ($enable !== FALSE) ? TRUE : FALSE;
 
94
                        }
 
95
                }
 
96
        }
 
97
 
 
98
        // --------------------------------------------------------------------
 
99
 
 
100
        /**
 
101
         * Auto Profiler
 
102
         *
 
103
         * This function cycles through the entire array of mark points and
 
104
         * matches any two points that are named identically (ending in "_start"
 
105
         * and "_end" respectively).  It then compiles the execution times for
 
106
         * all points and returns it as an array
 
107
         *
 
108
         * @return      array
 
109
         */
 
110
        protected function _compile_benchmarks()
 
111
        {
 
112
                $profile = array();
 
113
                foreach ($this->CI->benchmark->marker as $key => $val)
 
114
                {
 
115
                        // We match the "end" marker so that the list ends
 
116
                        // up in the order that it was defined
 
117
                        if (preg_match("/(.+?)_end/i", $key, $match))
 
118
                        {
 
119
                                if (isset($this->CI->benchmark->marker[$match[1].'_end']) AND isset($this->CI->benchmark->marker[$match[1].'_start']))
 
120
                                {
 
121
                                        $profile[$match[1]] = $this->CI->benchmark->elapsed_time($match[1].'_start', $key);
 
122
                                }
 
123
                        }
 
124
                }
 
125
 
 
126
                // Build a table containing the profile data.
 
127
                // Note: At some point we should turn this into a template that can
 
128
                // be modified.  We also might want to make this data available to be logged
 
129
 
 
130
                $output  = "\n\n";
 
131
                $output .= '<fieldset id="ci_profiler_benchmarks" style="border:1px solid #900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
132
                $output .= "\n";
 
133
                $output .= '<legend style="color:#900;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_benchmarks').'&nbsp;&nbsp;</legend>';
 
134
                $output .= "\n";
 
135
                $output .= "\n\n<table style='width:100%'>\n";
 
136
 
 
137
                foreach ($profile as $key => $val)
 
138
                {
 
139
                        $key = ucwords(str_replace(array('_', '-'), ' ', $key));
 
140
                        $output .= "<tr><td style='padding:5px;width:50%;color:#000;font-weight:bold;background-color:#ddd;'>".$key."&nbsp;&nbsp;</td><td style='padding:5px;width:50%;color:#900;font-weight:normal;background-color:#ddd;'>".$val."</td></tr>\n";
 
141
                }
 
142
 
 
143
                $output .= "</table>\n";
 
144
                $output .= "</fieldset>";
 
145
 
 
146
                return $output;
 
147
        }
 
148
 
 
149
        // --------------------------------------------------------------------
 
150
 
 
151
        /**
 
152
         * Compile Queries
 
153
         *
 
154
         * @return      string
 
155
         */
 
156
        protected function _compile_queries()
 
157
        {
 
158
                $dbs = array();
 
159
 
 
160
                // Let's determine which databases are currently connected to
 
161
                foreach (get_object_vars($this->CI) as $CI_object)
 
162
                {
 
163
                        if (is_object($CI_object) && is_subclass_of(get_class($CI_object), 'CI_DB') )
 
164
                        {
 
165
                                $dbs[] = $CI_object;
 
166
                        }
 
167
                }
 
168
 
 
169
                if (count($dbs) == 0)
 
170
                {
 
171
                        $output  = "\n\n";
 
172
                        $output .= '<fieldset id="ci_profiler_queries" style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
173
                        $output .= "\n";
 
174
                        $output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').'&nbsp;&nbsp;</legend>';
 
175
                        $output .= "\n";
 
176
                        $output .= "\n\n<table style='border:none; width:100%;'>\n";
 
177
                        $output .="<tr><td style='width:100%;color:#0000FF;font-weight:normal;background-color:#eee;padding:5px'>".$this->CI->lang->line('profiler_no_db')."</td></tr>\n";
 
178
                        $output .= "</table>\n";
 
179
                        $output .= "</fieldset>";
 
180
 
 
181
                        return $output;
 
182
                }
 
183
 
 
184
                // Load the text helper so we can highlight the SQL
 
185
                $this->CI->load->helper('text');
 
186
 
 
187
                // Key words we want bolded
 
188
                $highlight = array('SELECT', 'DISTINCT', 'FROM', 'WHERE', 'AND', 'LEFT&nbsp;JOIN', 'ORDER&nbsp;BY', 'GROUP&nbsp;BY', 'LIMIT', 'INSERT', 'INTO', 'VALUES', 'UPDATE', 'OR&nbsp;', 'HAVING', 'OFFSET', 'NOT&nbsp;IN', 'IN', 'LIKE', 'NOT&nbsp;LIKE', 'COUNT', 'MAX', 'MIN', 'ON', 'AS', 'AVG', 'SUM', '(', ')');
 
189
 
 
190
                $output  = "\n\n";
 
191
 
 
192
                $count = 0;
 
193
 
 
194
                foreach ($dbs as $db)
 
195
                {
 
196
                        $count++;
 
197
 
 
198
                        $hide_queries = (count($db->queries) > $this->_query_toggle_count) ? ' display:none' : '';
 
199
 
 
200
                        $show_hide_js = '(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_queries_db_'.$count.'\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_hide').'\'?\''.$this->CI->lang->line('profiler_section_show').'\':\''.$this->CI->lang->line('profiler_section_hide').'\';">'.$this->CI->lang->line('profiler_section_hide').'</span>)';
 
201
 
 
202
                        if ($hide_queries != '')
 
203
                        {
 
204
                                $show_hide_js = '(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_queries_db_'.$count.'\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)';
 
205
                        }
 
206
 
 
207
                        $output .= '<fieldset style="border:1px solid #0000FF;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
208
                        $output .= "\n";
 
209
                        $output .= '<legend style="color:#0000FF;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_database').':&nbsp; '.$db->database.'&nbsp;&nbsp;&nbsp;'.$this->CI->lang->line('profiler_queries').': '.count($db->queries).'&nbsp;&nbsp;'.$show_hide_js.'</legend>';
 
210
                        $output .= "\n";
 
211
                        $output .= "\n\n<table style='width:100%;{$hide_queries}' id='ci_profiler_queries_db_{$count}'>\n";
 
212
 
 
213
                        if (count($db->queries) == 0)
 
214
                        {
 
215
                                $output .= "<tr><td style='width:100%;color:#0000FF;font-weight:normal;background-color:#eee;padding:5px;'>".$this->CI->lang->line('profiler_no_queries')."</td></tr>\n";
 
216
                        }
 
217
                        else
 
218
                        {
 
219
                                foreach ($db->queries as $key => $val)
 
220
                                {
 
221
                                        $time = number_format($db->query_times[$key], 4);
 
222
 
 
223
                                        $val = highlight_code($val, ENT_QUOTES);
 
224
 
 
225
                                        foreach ($highlight as $bold)
 
226
                                        {
 
227
                                                $val = str_replace($bold, '<strong>'.$bold.'</strong>', $val);
 
228
                                        }
 
229
 
 
230
                                        $output .= "<tr><td style='padding:5px; vertical-align: top;width:1%;color:#900;font-weight:normal;background-color:#ddd;'>".$time."&nbsp;&nbsp;</td><td style='padding:5px; color:#000;font-weight:normal;background-color:#ddd;'>".$val."</td></tr>\n";
 
231
                                }
 
232
                        }
 
233
 
 
234
                        $output .= "</table>\n";
 
235
                        $output .= "</fieldset>";
 
236
 
 
237
                }
 
238
 
 
239
                return $output;
 
240
        }
 
241
 
 
242
 
 
243
        // --------------------------------------------------------------------
 
244
 
 
245
        /**
 
246
         * Compile $_GET Data
 
247
         *
 
248
         * @return      string
 
249
         */
 
250
        protected function _compile_get()
 
251
        {
 
252
                $output  = "\n\n";
 
253
                $output .= '<fieldset id="ci_profiler_get" style="border:1px solid #cd6e00;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
254
                $output .= "\n";
 
255
                $output .= '<legend style="color:#cd6e00;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_get_data').'&nbsp;&nbsp;</legend>';
 
256
                $output .= "\n";
 
257
 
 
258
                if (count($_GET) == 0)
 
259
                {
 
260
                        $output .= "<div style='color:#cd6e00;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_get')."</div>";
 
261
                }
 
262
                else
 
263
                {
 
264
                        $output .= "\n\n<table style='width:100%; border:none'>\n";
 
265
 
 
266
                        foreach ($_GET as $key => $val)
 
267
                        {
 
268
                                if ( ! is_numeric($key))
 
269
                                {
 
270
                                        $key = "'".$key."'";
 
271
                                }
 
272
 
 
273
                                $output .= "<tr><td style='width:50%;color:#000;background-color:#ddd;padding:5px'>&#36;_GET[".$key."]&nbsp;&nbsp; </td><td style='width:50%;padding:5px;color:#cd6e00;font-weight:normal;background-color:#ddd;'>";
 
274
                                if (is_array($val))
 
275
                                {
 
276
                                        $output .= "<pre>" . htmlspecialchars(stripslashes(print_r($val, true))) . "</pre>";
 
277
                                }
 
278
                                else
 
279
                                {
 
280
                                        $output .= htmlspecialchars(stripslashes($val));
 
281
                                }
 
282
                                $output .= "</td></tr>\n";
 
283
                        }
 
284
 
 
285
                        $output .= "</table>\n";
 
286
                }
 
287
                $output .= "</fieldset>";
 
288
 
 
289
                return $output;
 
290
        }
 
291
 
 
292
        // --------------------------------------------------------------------
 
293
 
 
294
        /**
 
295
         * Compile $_POST Data
 
296
         *
 
297
         * @return      string
 
298
         */
 
299
        protected function _compile_post()
 
300
        {
 
301
                $output  = "\n\n";
 
302
                $output .= '<fieldset id="ci_profiler_post" style="border:1px solid #009900;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
303
                $output .= "\n";
 
304
                $output .= '<legend style="color:#009900;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_post_data').'&nbsp;&nbsp;</legend>';
 
305
                $output .= "\n";
 
306
 
 
307
                if (count($_POST) == 0)
 
308
                {
 
309
                        $output .= "<div style='color:#009900;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_post')."</div>";
 
310
                }
 
311
                else
 
312
                {
 
313
                        $output .= "\n\n<table style='width:100%'>\n";
 
314
 
 
315
                        foreach ($_POST as $key => $val)
 
316
                        {
 
317
                                if ( ! is_numeric($key))
 
318
                                {
 
319
                                        $key = "'".$key."'";
 
320
                                }
 
321
 
 
322
                                $output .= "<tr><td style='width:50%;padding:5px;color:#000;background-color:#ddd;'>&#36;_POST[".$key."]&nbsp;&nbsp; </td><td style='width:50%;padding:5px;color:#009900;font-weight:normal;background-color:#ddd;'>";
 
323
                                if (is_array($val))
 
324
                                {
 
325
                                        $output .= "<pre>" . htmlspecialchars(stripslashes(print_r($val, TRUE))) . "</pre>";
 
326
                                }
 
327
                                else
 
328
                                {
 
329
                                        $output .= htmlspecialchars(stripslashes($val));
 
330
                                }
 
331
                                $output .= "</td></tr>\n";
 
332
                        }
 
333
 
 
334
                        $output .= "</table>\n";
 
335
                }
 
336
                $output .= "</fieldset>";
 
337
 
 
338
                return $output;
 
339
        }
 
340
 
 
341
        // --------------------------------------------------------------------
 
342
 
 
343
        /**
 
344
         * Show query string
 
345
         *
 
346
         * @return      string
 
347
         */
 
348
        protected function _compile_uri_string()
 
349
        {
 
350
                $output  = "\n\n";
 
351
                $output .= '<fieldset id="ci_profiler_uri_string" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
352
                $output .= "\n";
 
353
                $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_uri_string').'&nbsp;&nbsp;</legend>';
 
354
                $output .= "\n";
 
355
 
 
356
                if ($this->CI->uri->uri_string == '')
 
357
                {
 
358
                        $output .= "<div style='color:#000;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_uri')."</div>";
 
359
                }
 
360
                else
 
361
                {
 
362
                        $output .= "<div style='color:#000;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->uri->uri_string."</div>";
 
363
                }
 
364
 
 
365
                $output .= "</fieldset>";
 
366
 
 
367
                return $output;
 
368
        }
 
369
 
 
370
        // --------------------------------------------------------------------
 
371
 
 
372
        /**
 
373
         * Show the controller and function that were called
 
374
         *
 
375
         * @return      string
 
376
         */
 
377
        protected function _compile_controller_info()
 
378
        {
 
379
                $output  = "\n\n";
 
380
                $output .= '<fieldset id="ci_profiler_controller_info" style="border:1px solid #995300;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
381
                $output .= "\n";
 
382
                $output .= '<legend style="color:#995300;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_controller_info').'&nbsp;&nbsp;</legend>';
 
383
                $output .= "\n";
 
384
 
 
385
                $output .= "<div style='color:#995300;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->router->fetch_class()."/".$this->CI->router->fetch_method()."</div>";
 
386
 
 
387
                $output .= "</fieldset>";
 
388
 
 
389
                return $output;
 
390
        }
 
391
 
 
392
        // --------------------------------------------------------------------
 
393
 
 
394
        /**
 
395
         * Compile memory usage
 
396
         *
 
397
         * Display total used memory
 
398
         *
 
399
         * @return      string
 
400
         */
 
401
        protected function _compile_memory_usage()
 
402
        {
 
403
                $output  = "\n\n";
 
404
                $output .= '<fieldset id="ci_profiler_memory_usage" style="border:1px solid #5a0099;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
405
                $output .= "\n";
 
406
                $output .= '<legend style="color:#5a0099;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_memory_usage').'&nbsp;&nbsp;</legend>';
 
407
                $output .= "\n";
 
408
 
 
409
                if (function_exists('memory_get_usage') && ($usage = memory_get_usage()) != '')
 
410
                {
 
411
                        $output .= "<div style='color:#5a0099;font-weight:normal;padding:4px 0 4px 0'>".number_format($usage).' bytes</div>';
 
412
                }
 
413
                else
 
414
                {
 
415
                        $output .= "<div style='color:#5a0099;font-weight:normal;padding:4px 0 4px 0'>".$this->CI->lang->line('profiler_no_memory')."</div>";
 
416
                }
 
417
 
 
418
                $output .= "</fieldset>";
 
419
 
 
420
                return $output;
 
421
        }
 
422
 
 
423
        // --------------------------------------------------------------------
 
424
 
 
425
        /**
 
426
         * Compile header information
 
427
         *
 
428
         * Lists HTTP headers
 
429
         *
 
430
         * @return      string
 
431
         */
 
432
        protected function _compile_http_headers()
 
433
        {
 
434
                $output  = "\n\n";
 
435
                $output .= '<fieldset id="ci_profiler_http_headers" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
436
                $output .= "\n";
 
437
                $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_headers').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_httpheaders_table\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
 
438
                $output .= "\n";
 
439
 
 
440
                $output .= "\n\n<table style='width:100%;display:none' id='ci_profiler_httpheaders_table'>\n";
 
441
 
 
442
                foreach (array('HTTP_ACCEPT', 'HTTP_USER_AGENT', 'HTTP_CONNECTION', 'SERVER_PORT', 'SERVER_NAME', 'REMOTE_ADDR', 'SERVER_SOFTWARE', 'HTTP_ACCEPT_LANGUAGE', 'SCRIPT_NAME', 'REQUEST_METHOD',' HTTP_HOST', 'REMOTE_HOST', 'CONTENT_TYPE', 'SERVER_PROTOCOL', 'QUERY_STRING', 'HTTP_ACCEPT_ENCODING', 'HTTP_X_FORWARDED_FOR') as $header)
 
443
                {
 
444
                        $val = (isset($_SERVER[$header])) ? $_SERVER[$header] : '';
 
445
                        $output .= "<tr><td style='vertical-align: top;width:50%;padding:5px;color:#900;background-color:#ddd;'>".$header."&nbsp;&nbsp;</td><td style='width:50%;padding:5px;color:#000;background-color:#ddd;'>".$val."</td></tr>\n";
 
446
                }
 
447
 
 
448
                $output .= "</table>\n";
 
449
                $output .= "</fieldset>";
 
450
 
 
451
                return $output;
 
452
        }
 
453
 
 
454
        // --------------------------------------------------------------------
 
455
 
 
456
        /**
 
457
         * Compile config information
 
458
         *
 
459
         * Lists developer config variables
 
460
         *
 
461
         * @return      string
 
462
         */
 
463
        protected function _compile_config()
 
464
        {
 
465
                $output  = "\n\n";
 
466
                $output .= '<fieldset id="ci_profiler_config" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
467
                $output .= "\n";
 
468
                $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_config').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_config_table\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
 
469
                $output .= "\n";
 
470
 
 
471
                $output .= "\n\n<table style='width:100%; display:none' id='ci_profiler_config_table'>\n";
 
472
 
 
473
                foreach ($this->CI->config->config as $config=>$val)
 
474
                {
 
475
                        if (is_array($val))
 
476
                        {
 
477
                                $val = print_r($val, TRUE);
 
478
                        }
 
479
 
 
480
                        $output .= "<tr><td style='padding:5px; vertical-align: top;color:#900;background-color:#ddd;'>".$config."&nbsp;&nbsp;</td><td style='padding:5px; color:#000;background-color:#ddd;'>".htmlspecialchars($val)."</td></tr>\n";
 
481
                }
 
482
 
 
483
                $output .= "</table>\n";
 
484
                $output .= "</fieldset>";
 
485
 
 
486
                return $output;
 
487
        }
 
488
 
 
489
        // --------------------------------------------------------------------
 
490
 
 
491
        /**
 
492
         * Compile session userdata
 
493
         *
 
494
         * @return      string
 
495
         */
 
496
        private function _compile_session_data()
 
497
        {
 
498
                if ( ! isset($this->CI->session))
 
499
                {
 
500
                        return;
 
501
                }
 
502
 
 
503
                $output = '<fieldset id="ci_profiler_csession" style="border:1px solid #000;padding:6px 10px 10px 10px;margin:20px 0 20px 0;background-color:#eee">';
 
504
                $output .= '<legend style="color:#000;">&nbsp;&nbsp;'.$this->CI->lang->line('profiler_session_data').'&nbsp;&nbsp;(<span style="cursor: pointer;" onclick="var s=document.getElementById(\'ci_profiler_session_data\').style;s.display=s.display==\'none\'?\'\':\'none\';this.innerHTML=this.innerHTML==\''.$this->CI->lang->line('profiler_section_show').'\'?\''.$this->CI->lang->line('profiler_section_hide').'\':\''.$this->CI->lang->line('profiler_section_show').'\';">'.$this->CI->lang->line('profiler_section_show').'</span>)</legend>';
 
505
                $output .= "<table style='width:100%;display:none' id='ci_profiler_session_data'>";
 
506
 
 
507
                foreach ($this->CI->session->all_userdata() as $key => $val)
 
508
                {
 
509
                        if (is_array($val) OR is_object($val))
 
510
                        {
 
511
                                $val = print_r($val, TRUE);
 
512
                        }
 
513
 
 
514
                        $output .= "<tr><td style='padding:5px; vertical-align: top;color:#900;background-color:#ddd;'>".$key."&nbsp;&nbsp;</td><td style='padding:5px; color:#000;background-color:#ddd;'>".htmlspecialchars($val)."</td></tr>\n";
 
515
                }
 
516
 
 
517
                $output .= '</table>';
 
518
                $output .= "</fieldset>";
 
519
                return $output;
 
520
        }
 
521
 
 
522
        // --------------------------------------------------------------------
 
523
 
 
524
        /**
 
525
         * Run the Profiler
 
526
         *
 
527
         * @return      string
 
528
         */
 
529
        public function run()
 
530
        {
 
531
                $output = "<div id='codeigniter_profiler' style='clear:both;background-color:#fff;padding:10px;'>";
 
532
                $fields_displayed = 0;
 
533
 
 
534
                foreach ($this->_available_sections as $section)
 
535
                {
 
536
                        if ($this->_compile_{$section} !== FALSE)
 
537
                        {
 
538
                                $func = "_compile_{$section}";
 
539
                                $output .= $this->{$func}();
 
540
                                $fields_displayed++;
 
541
                        }
 
542
                }
 
543
 
 
544
                if ($fields_displayed == 0)
 
545
                {
 
546
                        $output .= '<p style="border:1px solid #5a0099;padding:10px;margin:20px 0;background-color:#eee">'.$this->CI->lang->line('profiler_no_profiles').'</p>';
 
547
                }
 
548
 
 
549
                $output .= '</div>';
 
550
 
 
551
                return $output;
 
552
        }
 
553
}
 
554
 
 
555
// END CI_Profiler class
 
556
 
 
557
/* End of file Profiler.php */
 
558
/* Location: ./system/libraries/Profiler.php */
 
 
b'\\ No newline at end of file'