Pannous

Pannous Git Source Tree

Root/fuel/core/vendor/phpquickprofiler/display.php

1<?php
2
3/* - - - - - - - - - - - - - - - - - - - - - - - - - - -
4
5 Title : HTML Output for Php Quick Profiler
6 Author : Created by Ryan Campbell
7 URL : https://github.com/particletree ( http://www.particletree.com no longer works )
8
9 Last Updated : August 19, 2012 by Peter Schmalfeldt <manifestinteractive@gmail.com>
10
11 Description : This is a horribly ugly function used to output
12 the PQP HTML. This is great because it will just work in your project,
13 but it is hard to maintain and read. See the README file for how to use
14 the Smarty file we provided with PQP.
15
16- - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
17
18function displayPqp($output) {
19
20$css = preg_replace('/[\n\r]/', '', <<<CSS
21.pQp {width:100%;z-index:9999;text-align:center;position:fixed;bottom:0;}
22* html .pQp {position:absolute;}
23.pQp * {margin:0 ;padding:0;border:none;background:transparent;}
24#pQp {margin:0 auto;width:85%;min-width:960px;background-color:#222;border:12px solid #000;border-bottom:none;font-family:"Lucida Grande",Tahoma,Arial,sans-serif;-webkit-border-top-left-radius:15px;-webkit-border-top-right-radius:15px;-moz-border-radius-topleft:15px;-moz-border-radius-topright:15px;border-top-left-radius:15px;border-top-right-radius:15px;}
25#pQp tbody {background:transparent;}
26#pQp .pqp-box h3 {font-weight:normal;line-height:200px;padding:0 15px;color:#fff;}
27.pQp,.pQp td {color:#444}
28#pqp-metrics {background:#000;width:100%}
29#pqp-console,#pqp-speed,#pqp-queries,#pqp-memory,#pqp-files,#pqp-config,#pqp-session,#pqp-get,#pqp-post {background-color:#000;border-top:1px solid #ccc;height:200px;overflow:auto}
30.pQp .pqp-green {color:#588e13!important}
31.pQp .pqp-blue {color:#3769a0!important}
32.pQp .pqp-purple {color:#953fa1!important}
33.pQp .pqp-orange {color:#d28c00!important}
34.pQp .pqp-red {color:#b72f09!important}
35.pQp .pqp-yellow {color:#CDCF3A!important}
36.pQp .pqp-cyan {color:#3EC4D3!important}
37.pQp .pqp-pink {color:#FF7CAD!important}
38.pQp .pqp-flesh {color:#FFA46E!important}
39.pQp strong {color:#fff}
40#pQp,#pqp-console,#pqp-speed,#pqp-queries,#pqp-memory,#pqp-files,#pqp-config,#pqp-session,#pqp-get,#pqp-post {display:none}
41.pQp .pqp-console,.pQp .pqp-speed,.pQp .pqp-queries,.pQp .pqp-memory,.pQp .pqp-files,.pQp .pqp-config,.pQp .pqp-session,.pQp .pqp-get,.pQp .pqp-post {display:block!important}
42.pQp .pqp-console #pqp-console,.pQp .pqp-speed #pqp-speed,.pQp .pqp-queries #pqp-queries,.pQp .pqp-memory #pqp-memory,.pQp .pqp-files #pqp-files,.pQp .pqp-config #pqp-config,.pQp .pqp-session #pqp-session,.pQp .pqp-get #pqp-get,.pQp .pqp-post #pqp-post {display:block}
43.pqp-console td.pqp-green,.pqp-speed td.pqp-blue,.pqp-queries td.pqp-purple,.pqp-memory td.pqp-orange,.pqp-files td.pqp-red,.pqp-config td.pqp-yellow,.pqp-session td.pqp-cyan,.pqp-get td.pqp-pink,.pqp-post td.pqp-flesh {background:#222!important;border-bottom:6px solid #fff!important;cursor:default!important}
44.pqp-tallDetails #pQp .pqp-box {height:500px}
45.pqp-tallDetails #pQp .pqp-box h3 {line-height:500px}
46.pqp-hideDetails #pQp .pqp-box {display:none!important}
47.pqp-hideDetails #pqp-footer {border-top:1px dotted #444}
48.pqp-hideDetails #pQp #pqp-metrics td {height:50px;background:#000!important;border-bottom:none!important;cursor:default!important}
49#pQp var {font-size:18px;margin:0 0 2px 0}
50#pQp h4 {font-size:10px}
51.pqp-hideDetails .heightToggle {visibility:hidden}
52#pqp-metrics td {height:80px;width:11%;text-align:center;cursor:pointer;border:4px solid #000;border-bottom:6px solid #444;-webkit-border-top-left-radius:15px;-moz-border-radius-topleft:15px;-webkit-border-top-right-radius:15px;-moz-border-radius-topright:15px;border-top-left-radius:15px;border-top-right-radius:15px;background-color:#222;}
53#pqp-metrics td:hover {background:#222;border-bottom:6px solid #777}
54#pqp-metrics .pqp-green {border-left:none}
55#pqp-metrics .pqp-red {border-right:none}
56#pqp-metrics h4 {text-shadow:#000 1px 1px 1px}
57.pqp-side var {text-shadow:#444 1px 1px 1px;background-color:transparent;}
58.pQp var {font-size:23px;font-weight:bold;font-style:normal;margin:0 0 3px 0;display:block; margin-top: 16px !important;}
59.pQp h4 {font-size:12px;color:#fff;margin:0 0 4px 0}
60.pQp .pqp-main {width:80%; float: left;}
61.pQp .pqp-main table {width:100%;}
62*+html .pQp .pqp-main {width:78%}
63* html .pQp .pqp-main {width:77%}
64.pQp .pqp-main td {padding:7px 15px;text-align:left;border-left:1px solid #333;border-right:1px solid #333;border-bottom:1px dotted #323232;color:#FFF;}
65.pQp .pqp-main td,.pQp .pqp-main pre {font-family:Monaco,"Consolas","Lucida Console","Courier New",monospace;font-size:11px; background: #222;}
66.pQp .pqp-main td.pqp-alt {background:#111}
67.pQp .pqp-main tr.pqp-alt td {background:#2e2e2e;border-top:1px dotted #4e4e4e}
68.pQp .pqp-main tr.pqp-alt td.pqp-alt {background:#333}
69.pQp .pqp-main td b {float:right;font-weight:normal;color:#e6f387}
70.pQp .pqp-main td:hover {background:#2e2e2e}
71.pQp .pqp-side {float:left;width:20%;background:#000;color:#fff;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px;text-align:center}
72.pQp .pqp-side tr {background-color: #000;}
73.pQp .pqp-side td {padding:10px 0 5px 0;background-color: #000; text-align: center !important}
74.pQp .pqp-side var {color:#fff;font-size:15px}
75.pQp .pqp-side h4 {font-weight:normal;color:#f4fcca;font-size:11px;background-color:transparent;}
76#pqp-console .pqp-side td {padding:12px 0; text-align: center !important}
77#pqp-console .pqp-side td.pqp-alt1 {background:#588e13;width:51%}
78#pqp-console .pqp-side td.pqp-alt2 {background-color:#b72f09}
79#pqp-console .pqp-side td.pqp-alt3 {background:#d28c00;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
80#pqp-console .pqp-side td.pqp-alt4 {background-color:#3769a0;border-bottom:1px solid #274b74}
81#pqp-console .pqp-main table {width:100%}
82#pqp-console td div {width:100%;overflow:hidden;background-color:transparent;}
83#pqp-console td.pqp-type {font-family:"Lucida Grande",Tahoma,Arial,sans-serif;text-align:center;text-transform:uppercase;font-size:9px;padding-top:9px;color:#f4fcca;vertical-align:top;width:40px}
84.pQp .pqp-log-log td.pqp-type {background:#47740d!important}
85.pQp .pqp-log-error td.pqp-type {background:#9b2700!important}
86.pQp .pqp-log-memory td.pqp-type {background:#d28c00!important}
87.pQp .pqp-log-speed td.pqp-type {background:#2b5481!important}
88.pQp .pqp-log-log prepqp-{color:#999;background-color:transparent;}
89.pQp .pqp-log-log td:hover pre {color:#fff}
90.pQp .pqp-log-log em,.pqp-log-memory em,.pQp .pqp-log-speed em {float:left;font-style:normal;display:block;color:#fff;background-color:transparent;}
91.pQp .pqp-log-memory pre,.pQp .pqp-log-speed pre {float:right;white-space:normal;display:block;color:#fffd70;background-color:transparent;}
92#pqp-speed .pqp-side td {padding:12px 0;border-left:1px solid #1e3c5c;border-bottom:1px solid #1e3c5c;border-right:1px solid #1e3c5c;}
93#pqp-speed .pqp-side td.pqp-alt {background-color:#2b5481;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
94#pqp-queries .pqp-side td {border-bottom:1px solid #662a6e;border-left:1px solid #662a6e;border-right:1px solid #662a6e}
95#pqp-queries .pqp-side td.pqp-alt {background-color:#7b3384;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
96#pqp-queries .pqp-main b {float:none;background-color:transparent;}
97#pqp-queries .pqp-main em {display:block;padding:2px 0 0 0;font-style:normal;color:#aaa;background-color:transparent;}
98#pqp-memory .pqp-side td {padding:12px 0;background-color:#c48200;border-bottom:1px solid #865900;border-left:1px solid #865900;border-right:1px solid #865900}
99#pqp-memory .pqp-side td.pqp-alt {background-color:#ac7200;border-bottom:bone;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
100#pqp-files .pqp-side td {border-bottom:1px solid #7c1f00;border-left:1px solid #7c1f00;border-right:1px solid #7c1f00}
101#pqp-files .pqp-side td.pqp-alt {background-color:#9b2700;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
102#pqp-config .pqp-side td {border-bottom:1px solid #CDCF3A;border-left:1px solid #CDCF3A;border-right:1px solid #CDCF3A}
103#pqp-config .pqp-side td.pqp-alt {background-color:#CDCF3A;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
104#pqp-session .pqp-side td {border-bottom:1px solid #3EC4D3;border-left:1px solid #3EC4D3;border-right:1px solid #3EC4D3}
105#pqp-session .pqp-side td.pqp-alt {background-color:#3EC4D3;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
106#pqp-get .pqp-side td {border-bottom:1px solid #FF7CAD;border-left:1px solid #FF7CAD;border-right:1px solid #FF7CAD}
107#pqp-get .pqp-side td.pqp-alt {background-color:#FF7CAD;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
108#pqp-post .pqp-side td {border-bottom:1px solid #FFA46E;border-left:1px solid #FFA46E;border-right:1px solid #FFA46E}
109#pqp-post .pqp-side td.pqp-alt {background-color:#FFA46E;border-bottom:none;border-left:none;-webkit-border-bottom-left-radius:30px;-moz-border-radius-bottomleft:30px;border-bottom-left-radius:30px}
110#pqp-footer {width:100%;background:#000;font-size:11px;border-top:1px solid #ccc}
111#pqp-footer td {padding:0!important;border:none!important}
112#pqp-footer strong {color:#fff}
113#pqp-footer a {color:#999;padding:5px 10px;text-decoration:none}
114#pqp-footer .pqp-credit {width:20%;text-align:left}
115#pqp-footer .pqp-credit a {line-height: 30px}
116#pqp-footer .pqp-actions {width:80%;text-align:right}
117#pqp-footer .pqp-actions a {float:right;width:auto}
118#pqp-footer a:hover,#pqp-footer a:hover strong,#pqp-footer a:hover b {background:#fff;color:black!important;text-decoration:none}
119#pqp-footer a:active,#pqp-footer a:active strong,#pqp-footer a:active b {background:#ecf488;color:green!important}
120#openProfiler { position: fixed; bottom: 0; right: 20px; z-index:999999; }
121#openProfiler a { height:32px;text-align:center;width:100px;background-color:#222;border:2px solid #000;border-bottom:none;font-size:12px;font-family:"Lucida Grande",Tahoma,Arial,sans-serif;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;-moz-border-radius-topleft:4px;-moz-border-radius-topright:4px;;border-top-right-radius:4px;color:#999;line-height: 32px;display:block;}
122#openProfiler a:hover {color:white;text-decoration:none}
123CSS
124);
125
126$return_output = '';
127$return_output .=<<<JAVASCRIPT
128<!-- JavaScript -->
129<script type="text/javascript">
130var PQP_SHOWONLOAD = (typeof PQP_SHOWONLOAD != "undefined" && PQP_SHOWONLOAD) ? "open" : "closed";
131var PQP_HEIGHT = (typeof PQP_HEIGHT != "undefined" && PQP_HEIGHT == "tall") ? "tall" : "short";
132var PQP_DETAILS = (typeof PQP_DETAILS != "undefined" && PQP_DETAILS) ? true : false;
133var PQP_BOTTOM = (typeof PQP_BOTTOM == "undefined" || PQP_BOTTOM == true) ? true : false;
134
135addEvent(window, 'load', loadCSS);
136
137function changeTab(tab) {
138var pQp = document.getElementById('pQp');
139hideAllTabs();
140addClassName(pQp, tab, true);
141}
142
143function hideAllTabs() {
144var pQp = document.getElementById('pQp');
145removeClassName(pQp, 'pqp-console');
146removeClassName(pQp, 'pqp-speed');
147removeClassName(pQp, 'pqp-queries');
148removeClassName(pQp, 'pqp-memory');
149removeClassName(pQp, 'pqp-files');
150removeClassName(pQp, 'pqp-config');
151removeClassName(pQp, 'pqp-session');
152removeClassName(pQp, 'pqp-get');
153removeClassName(pQp, 'pqp-post');
154}
155
156function toggleDetails(){
157var container = document.getElementById('pqp-container');
158
159if(PQP_DETAILS){
160addClassName(container, 'pqp-hideDetails', true);
161PQP_DETAILS = false;
162}
163else{
164removeClassName(container, 'pqp-hideDetails');
165PQP_DETAILS = true;
166}
167}
168function toggleHeight(){
169var container = document.getElementById('pqp-container');
170
171if(PQP_HEIGHT == "short"){
172addClassName(container, 'pqp-tallDetails', true);
173PQP_HEIGHT = "tall";
174}
175else{
176removeClassName(container, 'pqp-tallDetails');
177PQP_HEIGHT = "short";
178}
179}
180function toggleBottom(){
181var container = document.getElementById('pqp-container');
182if (container.style.position == "inherit")
183{
184container.style.position="";
185}
186else
187{
188container.style.position="inherit";
189}
190}
191
192function loadCSS() {
193var sheet = document.createElement("style");
194sheet.setAttribute("type", "text/css");
195sheet.innerHTML = '$css';
196document.getElementsByTagName("head")[0].appendChild(sheet);
197}
198
199
200//http://www.bigbold.com/snippets/posts/show/2630
201function addClassName(objElement, strClass, blnMayAlreadyExist){
202 if ( objElement.className ){
203 var arrList = objElement.className.split(' ');
204 if ( blnMayAlreadyExist ){
205 var strClassUpper = strClass.toUpperCase();
206 for ( var i = 0; i < arrList.length; i++ ){
207 if ( arrList[i].toUpperCase() == strClassUpper ){
208 arrList.splice(i, 1);
209 i--;
210 }
211 }
212 }
213 arrList[arrList.length] = strClass;
214 objElement.className = arrList.join(' ');
215 }
216 else{
217 objElement.className = strClass;
218 }
219}
220
221//http://www.bigbold.com/snippets/posts/show/2630
222function removeClassName(objElement, strClass){
223 if ( objElement.className ){
224 var arrList = objElement.className.split(' ');
225 var strClassUpper = strClass.toUpperCase();
226 for ( var i = 0; i < arrList.length; i++ ){
227 if ( arrList[i].toUpperCase() == strClassUpper ){
228 arrList.splice(i, 1);
229 i--;
230 }
231 }
232 objElement.className = arrList.join(' ');
233 }
234}
235
236//http://ejohn.org/projects/flexible-javascript-events/
237function addEvent( obj, type, fn ) {
238 if ( obj.attachEvent ) {
239 obj["e"+type+fn] = fn;
240 obj[type+fn] = function() { obj["e"+type+fn]( window.event ) };
241 obj.attachEvent( "on"+type, obj[type+fn] );
242 }
243 else{
244 obj.addEventListener( type, fn, false );
245 }
246}
247
248function openProfiler()
249{
250document.getElementById("pqp-container").style.display = "block";
251document.getElementById("openProfiler").style.display = "none";
252}
253
254function closeProfiler()
255{
256document.getElementById("pqp-container").style.display = "none";
257document.getElementById("openProfiler").style.display = "block";
258}
259
260function preventDefault(e) {
261 e = e || window.event;
262 if (e.preventDefault)
263 e.preventDefault();
264 e.returnValue = false;
265}
266
267window.onload = function() {
268document.getElementById('pqp-console').onmousewheel = function(e){
269 document.getElementById('pqp-console').scrollTop -= e.wheelDeltaY;
270 preventDefault(e);
271}
272document.getElementById('pqp-speed').onmousewheel = function(e){
273 document.getElementById('pqp-speed').scrollTop -= e.wheelDeltaY;
274 preventDefault(e);
275}
276document.getElementById('pqp-queries').onmousewheel = function(e){
277 document.getElementById('pqp-queries').scrollTop -= e.wheelDeltaY;
278 preventDefault(e);
279}
280document.getElementById('pqp-memory').onmousewheel = function(e){
281 document.getElementById('pqp-memory').scrollTop -= e.wheelDeltaY;
282 preventDefault(e);
283}
284document.getElementById('pqp-files').onmousewheel = function(e){
285 document.getElementById('pqp-files').scrollTop -= e.wheelDeltaY;
286 preventDefault(e);
287}
288document.getElementById('pqp-config').onmousewheel = function(e){
289 document.getElementById('pqp-config').scrollTop -= e.wheelDeltaY;
290 preventDefault(e);
291}
292document.getElementById('pqp-session').onmousewheel = function(e){
293 document.getElementById('pqp-session').scrollTop -= e.wheelDeltaY;
294 preventDefault(e);
295}
296document.getElementById('pqp-get').onmousewheel = function(e){
297 document.getElementById('pqp-get').scrollTop -= e.wheelDeltaY;
298 preventDefault(e);
299}
300document.getElementById('pqp-post').onmousewheel = function(e){
301 document.getElementById('pqp-post').scrollTop -= e.wheelDeltaY;
302 preventDefault(e);
303}
304if (PQP_BOTTOM)
305{
306toggleBottom();
307}
308if (PQP_SHOWONLOAD == 'open')
309{
310setTimeout(function() {
311openProfiler();
312if (PQP_HEIGHT == 'short')
313{
314PQP_HEIGHT = 'tall';
315toggleHeight();
316}
317if (PQP_DETAILS == false)
318{
319PQP_DETAILS = true;
320toggleDetails();
321}
322});
323}
324}
325</script>
326JAVASCRIPT;
327
328$return_output .='<div style="clear:both;"></div><div id="pqp-container" class="pQp pqp-tallDetails" style="display:none;position:inherit;">';
329
330$logCount = count($output['logs']['console']);
331$fileCount = count($output['files']);
332$memoryUsed = $output['memoryTotals']['used'];
333$queryCount = $output['queryTotals']['count'];
334$speedTotal = $output['speedTotals']['total'];
335
336$printarray = function($items, $depth, &$class, &$count) use(&$printarray)
337{
338$output = '';
339foreach($items as $item => $value) {
340$count++;
341$output .='<tr><td class="'.$class.'">';
342if (is_bool($value))
343{
344$output .= '<b>'.($value?'true':'false').'</b>';
345}
346elseif (is_null($value))
347{
348$output .= '<b>null</b>';
349}
350elseif( ! is_array($value) AND ! is_object($value))
351{
352$output .= '<b>'.\Security::htmlentities($value).'</b>';
353}
354$output .= str_repeat('&rsaquo;&nbsp;', $depth).\Security::htmlentities($item).'</td></tr>';
355if($class == '') $class = 'pqp-alt'; else $class = '';
356is_array($value) and $output .= $printarray($value, $depth + 1, $class, $count);
357is_object($value) and $output .= $printarray($value, $depth + 1, $class, $count);
358}
359return $output;
360};
361
362$class = '';
363$configCount = 0;
364$output['configItems'] = $printarray(\Config::$items, 0, $class, $configCount);
365
366$class = '';
367$sessionCount = 0;
368$output['sessionItems'] = $printarray(\Session::get(null), 0, $class, $sessionCount);
369
370$class = '';
371$getCount = 0;
372$output['getItems'] = $printarray(\Input::get(), 0, $class, $getCount);
373
374$class = '';
375$postCount = 0;
376$output['postItems'] = $printarray(\Input::post(), 0, $class, $postCount);
377
378$return_output .=<<<PQPTABS
379<div id="pQp" class="pqp-console">
380<table id="pqp-metrics" cellspacing="0">
381<tr>
382<td class="pqp-green" onclick="changeTab('pqp-console');">
383<var>$logCount</var>
384<h4>Console</h4>
385</td>
386<td class="pqp-blue" onclick="changeTab('pqp-speed');">
387<var>$speedTotal</var>
388<h4>Load Time</h4>
389</td>
390<td class="pqp-purple" onclick="changeTab('pqp-queries');">
391<var>$queryCount Queries</var>
392<h4>Database</h4>
393</td>
394<td class="pqp-orange" onclick="changeTab('pqp-memory');">
395<var>$memoryUsed</var>
396<h4>Memory Used</h4>
397</td>
398<td class="pqp-red" onclick="changeTab('pqp-files');">
399<var>{$fileCount} Files</var>
400<h4>Included</h4>
401</td>
402<td class="pqp-yellow" onclick="changeTab('pqp-config');">
403<var>{$configCount} Config</var>
404<h4>items loaded</h4>
405</td>
406<td class="pqp-cyan" onclick="changeTab('pqp-session');">
407<var>{$sessionCount} Session</var>
408<h4>vars loaded</h4>
409</td>
410<td class="pqp-pink" onclick="changeTab('pqp-get');">
411<var>{$getCount} GET</var>
412<h4>vars loaded</h4>
413</td>
414<td class="pqp-flesh" onclick="changeTab('pqp-post');">
415<var>{$postCount} POST</var>
416<h4>vars loaded</h4>
417</td>
418</tr>
419</table>
420PQPTABS;
421
422$return_output .='<div id="pqp-console" class="pqp-box">';
423
424if($logCount == 0) {
425$return_output .='<h3>This panel has no log items.</h3>';
426}
427else {
428$return_output .='<table class="pqp-side" cellspacing="0">
429<tr>
430<td class="pqp-alt1"><var>'.$output['logs']['logCount'].'</var><h4>Logs</h4></td>
431<td class="pqp-alt2"><var>'.$output['logs']['errorCount'].'</var> <h4>Errors</h4></td>
432</tr>
433<tr>
434<td class="pqp-alt3"><var>'.$output['logs']['memoryCount'].'</var> <h4>Memory</h4></td>
435<td class="pqp-alt4"><var>'.$output['logs']['speedCount'].'</var> <h4>Speed</h4></td>
436</tr>
437</table>
438<div class="pqp-main"><table cellspacing="0">';
439
440$class = '';
441foreach($output['logs']['console'] as $log) {
442$log['data'] = \Security::htmlentities($log['data']);
443$return_output .='<tr class="pqp-log-'.$log['type'].'">
444<td class="pqp-type">'.$log['type'].'</td>
445<td class="'.$class.'">';
446if($log['type'] == 'log') {
447$return_output .='<div><pre></pre><em>'.$log['data'].'</em></div>';
448}
449elseif($log['type'] == 'memory') {
450$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['dataType'].'</em>: '.$log['name'].' </div>';
451}
452elseif($log['type'] == 'speed') {
453$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['name'].'</em></div>';
454}
455elseif($log['type'] == 'error') {
456$return_output .='<div><em>Line '.$log['line'].'</em> : '.$log['data'].' <pre>'.$log['file'].'</pre></div>';
457}
458
459$return_output .='</td></tr>';
460if($class == '') $class = 'pqp-alt';
461else $class = '';
462}
463
464$return_output .='</table></div>';
465}
466
467$return_output .='</div>';
468
469$return_output .='<div id="pqp-speed" class="pqp-box">';
470
471if($output['logs']['speedCount'] == 0) {
472$return_output .='<h3>This panel has no log items.</h3>';
473}
474else {
475$return_output .='<table class="pqp-side" cellspacing="0">
476 <tr><td><var>'.$output['speedTotals']['total'].'</var><h4>Load Time</h4></td></tr>
477 <tr><td class="pqp-alt"><var>'.$output['speedTotals']['allowed'].' s</var> <h4>Max Execution Time</h4></td></tr>
478 </table>
479<div class="pqp-main"><table cellspacing="0">';
480
481$class = '';
482foreach($output['logs']['console'] as $log) {
483if($log['type'] == 'speed') {
484$return_output .='<tr class="pqp-log-'.$log['type'].'">
485<td class="'.$class.'">';
486$return_output .='<div><pre>'.$log['data'].'</pre> <em>'.$log['name'].'</em></div>';
487$return_output .='</td></tr>';
488if($class == '') $class = 'pqp-alt';
489else $class = '';
490}
491}
492
493$return_output .='</table></div>';
494}
495
496$return_output .='</div>';
497
498$return_output .='<div id="pqp-queries" class="pqp-box">';
499
500if($output['queryTotals']['count'] == 0) {
501$return_output .='<h3>This panel has no log items.</h3>';
502}
503else {
504$return_output .='<table class="pqp-side" cellspacing="0">
505 <tr><td><var>'.$output['queryTotals']['count'].'</var><h4>Total Queries</h4></td></tr>
506 <tr><td><var>'.$output['queryTotals']['time'].'</var> <h4>Total Time</h4></td></tr>
507 <tr><td class="pqp-alt"><var>'.$output['queryTotals']['duplicates'].'</var> <h4>Duplicates</h4></td></tr>
508 </table>
509<div class="pqp-main"><table cellspacing="0">';
510
511$class = '';
512foreach($output['queries'] as $query) {
513$return_output .='<tr>
514<td class="'.$class.'">'.$query['sql'];
515$return_output .='<em>';
516$return_output .='Connection name: <b>'.$query['dbname'].'</b><br />Speed: <b>'.$query['time'].'</b>';
517$query['duplicate'] and $return_output .=' &middot; <b>DUPLICATE</b>';
518if(isset($query['explain'])) {
519$return_output .= '<br />Query analysis:';
520foreach($query['explain'] as $qe)
521{
522isset($qe['select_type']) and $return_output .='<br /> &middot; Query: <b>'.$qe['select_type'].'</b>';
523empty($qe['table']) or $return_output .=' on <b>'.htmlentities($qe['table']).'</b>';
524isset($qe['possible_keys']) and $return_output .=' &middot; Possible keys: <b>'.$qe['possible_keys'].'</b>';
525isset($qe['key']) and $return_output .=' &middot; Key Used: <b>'.$qe['key'].'</b>';
526isset($qe['type']) and $return_output .=' &middot; Type: <b>'.$qe['type'].'</b>';
527isset($qe['rows']) and $return_output .=' &middot; Rows: <b>'.$qe['rows'].'</b>';
528empty($qe['Extra']) or $return_output .=' ('.$qe['Extra'].')';
529//$return_output .='<br />';
530}
531}
532if ( ! empty($query['stacktrace']))
533{
534$return_output .='<br />Call trace for this query:</em>';
535foreach ($query['stacktrace'] as $st)
536{
537$return_output .='<em>File: <b>'.$st['file'].'</b>, line <b>'.$st['line'].'</b></em>';
538}
539}
540else
541{
542$return_output .='</em>';
543}
544$return_output .='</td></tr>';
545if($class == '') $class = 'pqp-alt';
546else $class = '';
547}
548
549$return_output .='</table></div>';
550}
551
552$return_output .='</div>';
553
554$return_output .='<div id="pqp-memory" class="pqp-box">';
555
556if($output['logs']['memoryCount'] == 0) {
557$return_output .='<h3>This panel has no log items.</h3>';
558}
559else {
560$return_output .='<table class="pqp-side" cellspacing="0">
561 <tr><td><var>'.$output['memoryTotals']['used'].'</var><h4>Used Memory</h4></td></tr>
562 <tr><td class="pqp-alt"><var>'.$output['memoryTotals']['total'].'</var> <h4>Total Available</h4></td></tr>
563 </table>
564<div class="pqp-main"><table cellspacing="0">';
565
566$class = '';
567foreach($output['logs']['console'] as $log) {
568if($log['type'] == 'memory') {
569$return_output .='<tr class="pqp-log-'.$log['type'].'">';
570$return_output .='<td class="'.$class.'"><b>'.$log['data'].'</b> <em>'.$log['dataType'].'</em>: '.$log['name'].'</td>';
571$return_output .='</tr>';
572if($class == '') $class = 'pqp-alt';
573else $class = '';
574}
575}
576
577$return_output .='</table></div>';
578}
579
580$return_output .='</div>';
581
582$return_output .='<div id="pqp-files" class="pqp-box">';
583
584if($output['fileTotals']['count'] + $output['pathTotals']['count'] == 0) {
585$return_output .='<h3>This panel has no log items.</h3>';
586}
587else {
588$return_output .='<table class="pqp-side" cellspacing="0">
589 <tr><td><var>'.count($output['paths']).'</var><h4>Finder Paths</h4></td></tr>
590 <tr><td><var>'.$output['fileTotals']['count'].'</var><h4>Total Files</h4></td></tr>
591<tr><td><var>'.$output['fileTotals']['size'].'</var> <h4>Total Size</h4></td></tr>
592<tr><td class="pqp-alt"><var>'.$output['fileTotals']['largest'].'</var> <h4>Largest</h4></td></tr>
593 </table>
594<div class="pqp-main"><table cellspacing="0">';
595
596$class ='';
597$return_output .='<tr><td><strong style="font-size:120%;">Finder paths:</strong></td></tr>';
598foreach($output['paths'] as $path) {
599$return_output .='<tr><td class="'.$class.'">'.$path.'</td></tr>';
600if($class == '') $class = 'pqp-alt';
601else $class = '';
602}
603$return_output .='<tr><td><strong style="font-size:120%;">Loaded files:</strong></td></tr>';
604foreach($output['files'] as $file) {
605$return_output .='<tr><td class="'.$class.'"><b>'.$file['size'].'</b> '.$file['name'].'</td></tr>';
606if($class == '') $class = 'pqp-alt';
607else $class = '';
608}
609
610$return_output .='</table></div>';
611}
612
613$return_output .='</div>';
614
615$return_output .='<div id="pqp-config" class="pqp-box">';
616
617if($configCount == 0) {
618$return_output .='<h3>This panel has no config items.</h3>';
619}
620else {
621$return_output .='<table class="pqp-side" cellspacing="0">
622<tr><td class="pqp-alt"><var>'.$configCount.'</var> <h4>Configuration items</h4></td></tr>
623 </table>
624<div class="pqp-main"><table cellspacing="0">';
625
626$return_output .= $output['configItems'];
627
628$return_output .='</table></div>';
629}
630
631$return_output .='</div>';
632
633$return_output .='<div id="pqp-session" class="pqp-box">';
634
635if($sessionCount == 0) {
636$return_output .='<h3>This panel has no session variables.</h3>';
637}
638else {
639$return_output .='<table class="pqp-side" cellspacing="0">
640<tr><td class="pqp-alt"><var>'.$sessionCount.'</var> <h4>Session variables</h4></td></tr>
641 </table>
642<div class="pqp-main"><table cellspacing="0">';
643
644$return_output .= $output['sessionItems'];
645
646$return_output .='</table></div>';
647}
648
649$return_output .='</div>';
650
651$return_output .='<div id="pqp-get" class="pqp-box">';
652
653if($getCount == 0) {
654$return_output .='<h3>This panel has no GET variables.</h3>';
655}
656else {
657$return_output .='<table class="pqp-side" cellspacing="0">
658<tr><td class="pqp-alt"><var>'.$getCount.'</var> <h4>GET variables</h4></td></tr>
659 </table>
660<div class="pqp-main"><table cellspacing="0">';
661
662$return_output .= $output['getItems'];
663
664$return_output .='</table></div>';
665}
666
667$return_output .='</div>';
668
669$return_output .='<div id="pqp-post" class="pqp-box">';
670
671if($postCount == 0) {
672$return_output .='<h3>This panel has no POST variables.</h3>';
673}
674else {
675$return_output .='<table class="pqp-side" cellspacing="0">
676<tr><td class="pqp-alt"><var>'.$postCount.'</var> <h4>POST variables</h4></td></tr>
677 </table>
678<div class="pqp-main"><table cellspacing="0">';
679
680$return_output .= $output['postItems'];
681
682$return_output .='</table></div>';
683}
684
685$return_output .='</div>';
686
687$return_output .=<<<FOOTER
688<table id="pqp-footer" cellspacing="0">
689<tr>
690<td class="pqp-credit">
691<a href="https://github.com/particletree" target="_blank">
692Based on
693<strong>PHP</strong>
694<b class="pqp-green">Q</b><b class="pqp-blue">u</b><b class="pqp-purple">i</b><b class="pqp-orange">c</b><b class="pqp-red">k</b>
695Profiler</a></td>
696<td class="pqp-actions">
697<a class="pqp-closeProfiler" href="#" onclick="closeProfiler();return false" title="Close Code Profiler">Close</a>
698<a class="pqp-heightToggle" href="#" onclick="toggleHeight();return false" title="Toggle Height">Height</a>
699<a class="pqp-bottomToggle" href="#" onclick="toggleBottom();return false" title="Toggle Bottom">Bottom</a>
700</td>
701</tr>
702</table>
703FOOTER;
704
705$return_output .='</div></div><div id="openProfiler"><a href="#" onclick="openProfiler();return false" title="Open Code Profiler">Code Profiler</a></div>';
706
707return $return_output;
708}

Archive Download this file

Branches