/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: Erik Wikström
  • Date: 2013-04-09 09:09:31 UTC
  • mfrom: (21 lenasys)
  • mto: (21.1.1 lenasys)
  • mto: This revision was merged to the branch mainline in revision 22.
  • Revision ID: wikxen@gmail.com-20130409090931-9jcs9kzg8et0912g
Remerged! Changed password hashes to VARCHAR(32)

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'