5.4 버전 내용 적용

This commit is contained in:
thisgun
2019-12-02 10:22:12 +09:00
parent b60daff8f0
commit 22aad37bfb
534 changed files with 19867 additions and 17830 deletions

View File

@ -0,0 +1,254 @@
<?php
if (!defined('_GNUBOARD_')) exit;
add_stylesheet('<link rel="stylesheet" href="'.G5_PLUGIN_URL.'/debugbar/style.css">', 0);
?>
<style>
<?php if (defined('G5_IS_ADMIN') && G5_IS_ADMIN){ ?>
.debug_bar_wrap{z-index:991001}
<?php } ?>
</style>
<div class="debug_bar_wrap">
<div class="debug_bar_text_group">
<div class="debug_bar_btn_group"><button class="view_debug_bar debug_button">디버그</button></div>
<div class="debug_bar_text">
<?php echo 'PHP 실행시간 : '.$php_run_time.' | 메모리 사용량 : '.number_format($memory_usage).' bytes'; ?>
</div>
</div>
<div class="debug_bar_content">
<div class="content_inner">
<div class="debugbar_close_btn_el"><button class="debugbar_close_btn btn">닫기</button></div>
<div id="debugbar">
<ul class="debugbar_tab">
<li class="debug_tab active" data-tab="executed_query"><a href="#debug_executed_query">SQL Query</a></li>
<li class="debug_tab" data-tab="hook_info"><a href="#debug_hook_info">HOOK 정보</a></li>
</ul>
</div>
<div id="debug_executed_query" class="inner_debug">
<h3 class="query_top">
총 쿼리수 : <span><?php echo isset($g5_debug['sql']) ? count($g5_debug['sql']) : 0; ?></span>
</h3>
<div class="sql_query_list">
<table class="debug_table">
<caption>
쿼리 목록
</caption>
<thead>
<tr>
<th scope="col">실행순서</th>
<th scope="col">쿼리문</th>
<th scope="col">실행시간</th>
</tr>
</thead>
<tbody>
<?php
foreach((array) $g5_debug['sql'] as $key=>$query){
if( empty($query) ) continue;
$executed_time = $query['end_time'] - $query['start_time'];
$show_excuted_time = number_format((float)$executed_time * 1000, 2, '.', '');
?>
<tr>
<td scope="row" data-label="실행순서"><?php echo $key; ?></td>
<td class="left" data-label="쿼리문"><?php echo $query['sql']; ?></td>
<td data-label="실행시간"><?php echo $show_excuted_time.' ms'; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
<div id="debug_hook_info" class="inner_debug">
<?php
$event_totals = get_hook_datas('event');
$event_callbacks = get_hook_datas('event', 1);
$replace_totals = get_hook_datas('replace');
$replace_callbacks = get_hook_datas('replace', 1);
?>
<div class="hook_list">
<div class="debug_table_wrap">
<table class="debug_table hook_table">
<caption>
HOOK 목록
</caption>
<thead>
<tr>
<th scope="col" width="20%">event_tag (갯수)</th>
<th scope="col" width="60%">event_function</th>
<th scope="col" width="10%">인수의 수</th>
<th scope="col" width="10%">우선 순위</th>
</tr>
</thead>
<tbody>
<?php
foreach((array) $event_totals as $tag=>$count){
if( $tag === 'count' ) continue;
if( empty($count) ) continue;
$datas = array();
if( isset($event_callbacks[$tag]) ){
$event_callbacks_tag = $event_callbacks[$tag];
ksort($event_callbacks_tag);
foreach((array) $event_callbacks_tag as $priority=>$event_args){
if( empty($event_args) ) continue;
foreach($event_args as $index=>$funcs){
$datas[] = array(
'priority' => $priority,
'function' => $funcs['function'],
'arguments' => $funcs['arguments'],
);
} //end foreach
} //end foreach
$rowspan = $datas ? ' rowspan='.count($datas) : '';
$is_print = $rowspan;
foreach($datas as $data){
?>
<tr>
<?php if ($is_print){ ?>
<td scope="row" data-label="event_tag" <?php echo $rowspan; ?>><?php echo $tag.' <span class="hook_count">('.$count.')</span>'; ?></td>
<?php } ?>
<td data-label="event_function">
<?php echo $data['function']; ?>
</td>
<td data-label="인수의 수"><?php echo $data['arguments']; ?></td>
<td data-label="우선 순위"><?php echo $data['priority']; ?></td>
</tr>
<?php
$is_print = '';
} //end foreach
} else { // else if
?>
<tr>
<td scope="row" data-label="event_tag"><?php echo $tag.' <span class="hook_count">('.$count.')</span>'; ?></td>
<td data-label="event_function">&nbsp;</td>
<td data-label="인수의 수">&nbsp;</td>
<td data-label="우선 순위">&nbsp;</td>
</tr>
<?php
}//end if
} //end foreach
?>
</tbody>
</table>
</div>
<div class="debug_table_wrap">
<table class="debug_table hook_table">
<caption>
HOOK 목록
</caption>
<thead>
<tr>
<th scope="col" width="20%">replace_tag (갯수)</th>
<th scope="col" width="60%">replace_function</th>
<th scope="col" width="10%">인수의 수</th>
<th scope="col" width="10%">우선 순위</th>
</tr>
</thead>
<tbody>
<?php
foreach((array) $replace_totals as $tag=>$count){
if( $tag === 'count' ) continue;
if( empty($count) ) continue;
$datas = array();
if( isset($replace_callbacks[$tag]) ){
$replace_callbacks_tag = $replace_callbacks[$tag];
ksort($replace_callbacks_tag);
foreach((array) $replace_callbacks_tag as $priority=>$replace_args){
if( empty($replace_args) ) continue;
foreach($replace_args as $index=>$funcs){
$datas[] = array(
'priority' => $priority,
'function' => $funcs['function'],
'arguments' => $funcs['arguments'],
);
} //end foreach
} //end foreach
$rowspan = $datas ? ' rowspan='.count($datas) : '';
$is_print = $rowspan;
foreach($datas as $data){
?>
<tr>
<?php if ($is_print){ ?>
<td scope="row" data-label="replace_tag" <?php echo $rowspan; ?>><?php echo $tag.' <span class="hook_count">('.$count.')</span>'; ?></td>
<?php } ?>
<td data-label="replace_function">
<?php echo $data['function']; ?>
</td>
<td data-label="인수의 수"><?php echo $data['arguments']; ?></td>
<td data-label="우선 순위"><?php echo $data['priority']; ?></td>
</tr>
<?php
$is_print = '';
} //end foreach
} else { // else if
?>
<tr>
<td scope="row" data-label="replace_tag"><?php echo $tag.' <span class="hook_count">('.$count.')</span>'; ?></td>
<td data-label="replace_function">&nbsp;</td>
<td data-label="인수의 수">&nbsp;</td>
<td data-label="우선 순위">&nbsp;</td>
</tr>
<?php
}//end if
} //end foreach
?>
</tbody>
</table>
</div>
</div> <!-- end .hook_list -->
</div>
</div> <!-- end .content_inner -->
</div> <!-- end .debug_bar_content -->
</div> <!-- end .debug_bar_wrap -->
<script>
jQuery(function($){
$(".debug_tab").on("click", function() {
$(".inner_debug").hide();
$(this).addClass("active").siblings().removeClass("active");
$("#debug_" + $(this).attr('data-tab')).show();
});
$(".debug_tab").on("click", "a", function(e) {
e.preventDefault();
});
$(".debug_bar_wrap").on("click", ".debugbar_close_btn", function() {
$(".view_debug_bar").trigger("click");
})
.on("click", ".view_debug_bar", function() {
$(".debug_bar_content").toggle();
});
});
</script>

View File

51
plugin/debugbar/style.css Normal file
View File

@ -0,0 +1,51 @@
.debug_bar_wrap{clear:both;display:block;position:relative;z-index:80;height:32px;background-color:#1ABC9C}
.debug_bar_content{display:none;position:absolute;z-index:81;width:100%;top:32px;min-height:300px;overflow:hidden;background:#fff;overflow-y:scroll;box-sizing:content-box;border-top:thin solid gray}
.debug_bar_text_group{position:relative;padding:0 20px 0 120px;line-height:32px;}
.debug_bar_btn_group{position:absolute;top:0;left:1em;line-height:32px;text-align:left}
.debug_bar_text{line-height:32px;display:block;width:100%;color:#fff;text-align:right;font-size:1.2em;overflow:hidden;text-overflow: ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;word-wrap:normal !important}
.sql_query_list li{padding:1em;line-height:1em}
.debug_bar_content .content_inner{position:relative;padding:1em}
.debug_bar_content .debug_table_wrap{margin:10px 0}
.debugbar_tab::after{display:block;visibility:hidden;clear:both;content:""}
.debugbar_tab li{float:left;margin-bottom:-1px;position:relative;display:block;position:relative;display:block;padding:10px 15px}
.debugbar_tab li.debug_tab{border-bottom:2px solid #DDD}
.debugbar_tab li.active a,.debugbar_tab li.active a:focus,.debugbar_tab li.active a:hover{border-width:0}
.debugbar_tab li a{border:none;color:#666}
.debugbar_tab li.active a,.debugbar_tab li a:hover{border:none;color:#4285F4!important;background:transparent}
.debugbar_tab li a::after{content:"";background:#4285F4;height:2px;position:absolute;width:100%;left:0;bottom:-1px;transition:all 250ms ease 0;transform:scale(0)}
.debugbar_tab li.active a::after,.debugbar_tab li:hover a::after{transform:scale(1)}
.debugbar_tab li a::after{background:#21527d none repeat scroll 0 0;color:#fff}
.inner_debug {display:none}
.inner_debug h3.query_top{padding:1em;font-size:1.3em}
#debug_executed_query{display:block}
.lang_domain_list td .num{margin-right:10px;color:#9b9ea5;font-size:9px}
.debugbar_close_btn_el{position:absolute;top:20px;right:20px}
.debug_table{border:1px solid #ccc;border-collapse:collapse;margin:0;padding:0;width:100%}
.debug_table caption{display:none}
.debug_table tr{background:#f8f8f8;border:1px solid #ddd;padding:.35em}
.debug_table th,.debug_table td{padding:.625em;text-align:center}
.debug_table tbody tr:hover td{background:#c7d4dd!important}
.debug_table tbody tr:nth-child(even){background-color:#fff}
.debug_table td.left{text-align:left}
.debug_table th{font-size:.85em;letter-spacing:.1em;text-transform:uppercase}
.debug_table td img{text-align:center}
.debug_table.hook_table th, .debug_table.hook_table td {text-align:left;border:1px solid #ddd;}
.hook_table .hook_count{margin-left:3px;font-size:0.9em;color:#7cbc0a}
.debug_bar_btn_group button.debug_button{margin-top:3px}
button.debug_button{background-color:#7fbf4d;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#7fbf4d),color-stop(100%,#63a62f));background-image:-webkit-linear-gradient(top,#7fbf4d,#63a62f);background-image:-moz-linear-gradient(top,#7fbf4d,#63a62f);background-image:-ms-linear-gradient(top,#7fbf4d,#63a62f);background-image:-o-linear-gradient(top,#7fbf4d,#63a62f);background-image:linear-gradient(top,#7fbf4d,#63a62f);border:1px solid #63a62f;border-bottom:1px solid #5b992b;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 0 #96ca6d;box-shadow:inset 0 1px 0 0 #96ca6d;color:#fff;padding:3px 0 4px;text-align:center;text-shadow:0 -1px 0 #4c9021;width:100px;font-weight:700;font-size:14px;vertical-align:top}
button.debug_button:hover{background-color:#76b347;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#76b347),color-stop(100%,#5e9e2e));background-image:-webkit-linear-gradient(top,#76b347,#5e9e2e);background-image:-moz-linear-gradient(top,#76b347,#5e9e2e);background-image:-ms-linear-gradient(top,#76b347,#5e9e2e);background-image:-o-linear-gradient(top,#76b347,#5e9e2e);background-image:linear-gradient(top,#76b347,#5e9e2e);-webkit-box-shadow:inset 0 1px 0 0 #8dbf67;box-shadow:inset 0 1px 0 0 #8dbf67;cursor:pointer}
button.debug_button:active{border:1px solid #5b992b;border-bottom:1px solid #538c27;-webkit-box-shadow:inset 0 0 8px 4px #548c29,0 1px 0 0 #eee;box-shadow:inset 0 0 8px 4px #548c29,0 1px 0 0 #eee}
@media screen and (max-width: 600px) {
.debug_table{border:0}
.debug_table caption{font-size:1.3em}
.debug_table thead{display:none}
.debug_table tr{border-bottom:3px solid #ddd;display:block;margin-bottom:.625em}
.debug_table td{border-bottom:1px solid #ddd;display:block;font-size:.8em;text-align:right}
.debug_table td.left{text-align:right}
.debug_table td:before{content:attr(data-label);float:left;font-weight:700;text-transform:uppercase}
.debug_table.hook_table th, .debug_table.hook_table td{border:0 none;border-bottom:1px solid #ddd;text-align:right}
.debug_table td:last-child{border-bottom:0 !important}
}