Merge pull request #268 from kijin/pr/debugger

편리한 디버그 기능 추가
This commit is contained in:
Kijin Sung 2016-02-16 14:33:44 +09:00
commit e1341584d3
42 changed files with 1693 additions and 730 deletions

View file

@ -34,8 +34,8 @@ class addonController extends addon
$site_module_info = Context::get('site_module_info');
$site_srl = $site_module_info->site_srl;
$addon_path = _XE_PATH_ . 'files/cache/addons/';
$addon_file = $addon_path . $site_srl . $type . '.acivated_addons.cache.php';
$addon_path = RX_BASEDIR . 'files/cache/addons/';
$addon_file = $addon_path . 'addons.' . intval($site_srl) . '.' . $type . '.php';
if($this->addon_file_called)
{
@ -46,7 +46,7 @@ class addonController extends addon
FileHandler::makeDir($addon_path);
if(!file_exists($addon_file))
if(!file_exists($addon_file) || filemtime($addon_file) < filemtime(__FILE__))
{
$this->makeCacheFile($site_srl, $type);
}
@ -88,57 +88,78 @@ class addonController extends addon
|| ($type == "pc" && $val->is_used != 'Y')
|| ($type == "mobile" && $val->is_used_m != 'Y')
|| ($gtype == 'global' && $val->is_fixed != 'Y')
|| !is_dir(_XE_PATH_ . 'addons/' . $addon))
|| !is_dir(RX_BASEDIR . 'addons/' . $addon))
{
continue;
}
$extra_vars = unserialize($val->extra_vars);
if(!$extra_vars)
{
$extra_vars = new stdClass;
}
$mid_list = $extra_vars->mid_list;
if(!is_array($mid_list) || count($mid_list) < 1)
if(!is_array($mid_list))
{
$mid_list = NULL;
$mid_list = array();
}
// Initialize
$buff[] = '$before_time = microtime(true);';
$buff[] = '$rm = \'' . $extra_vars->xe_run_method . "';";
$buff[] = '$ml = array(';
if($mid_list)
// Run method and mid list
$run_method = $extra_vars->xe_run_method ?: 'run_selected';
$buff[] = '$rm = \'' . $run_method . "';";
$buff[] = '$ml = ' . var_export(array_fill_keys($mid_list, true), true) . ';';
// Addon filename
$buff[] = sprintf('$addon_file = RX_BASEDIR . \'addons/%s/%s.addon.php\';', $addon, $addon);
// Addon configuration
$buff[] = '$addon_info = unserialize(' . var_export(serialize($extra_vars), true) . ');';
// Decide whether to run in this mid
if ($run_method === 'no_run_selected')
{
foreach($mid_list as $mid)
{
$buff[] = "'$mid' => 1,";
}
$buff[] = '$run = !isset($ml[$_m]);';
}
$buff[] = ');';
$buff[] = sprintf('$addon_file = \'./addons/%s/%s.addon.php\';', $addon, $addon);
if($val->extra_vars)
elseif (!count($mid_list))
{
unset($extra_vars);
$extra_vars = base64_encode($val->extra_vars);
$buff[] = '$run = true;';
}
$addon_include = sprintf('unset($addon_info); $addon_info = unserialize(base64_decode(\'%s\')); @include($addon_file);', $extra_vars);
$buff[] = 'if(file_exists($addon_file)){';
$buff[] = 'if($rm === \'no_run_selected\'){';
$buff[] = 'if(!isset($ml[$_m])){';
$buff[] = $addon_include;
$buff[] = '}}else{';
$buff[] = 'if(isset($ml[$_m]) || count($ml) === 0){';
$buff[] = $addon_include;
$buff[] = '}}}';
$buff[] = '$after_time = microtime(true);';
$buff[] = '$addon_time_log = new stdClass();';
$buff[] = '$addon_time_log->caller = $called_position;';
$buff[] = '$addon_time_log->called = "' . $addon . '";';
$buff[] = '$addon_time_log->called_extension = "' . $addon . '";';
$buff[] = 'writeSlowlog("addon",$after_time-$before_time,$addon_time_log);';
else
{
$buff[] = '$run = isset($ml[$_m]);';
}
// Write debug info
$buff[] = 'if ($run && file_exists($addon_file)):';
$buff[] = ' include($addon_file);';
$buff[] = ' $after_time = microtime(true);';
$buff[] = ' if (class_exists("Rhymix\\\\Framework\\\\Debug")):';
$buff[] = ' Rhymix\\Framework\\Debug::addTrigger(array(';
$buff[] = ' "name" => "addon." . $called_position,';
$buff[] = ' "target" => "' . $addon . '",';
$buff[] = ' "target_plugin" => "' . $addon . '",';
$buff[] = ' "elapsed_time" => $after_time - $before_time,';
$buff[] = ' ));';
$buff[] = ' endif;';
$buff[] = 'endif;';
$buff[] = '';
}
$addon_path = _XE_PATH_ . 'files/cache/addons/';
FileHandler::makeDir($addon_path);
$addon_file = $addon_path . ($gtype == 'site' ? $site_srl : '') . $type . '.acivated_addons.cache.php';
// Write file in new location
$addon_path = RX_BASEDIR . 'files/cache/addons/';
$addon_file = $addon_path . 'addons.' . ($gtype == 'site' ? intval($site_srl) : 'G') . '.' . $type . '.php';
FileHandler::writeFile($addon_file, join(PHP_EOL, $buff));
// Remove file from old location
$old_addon_file = $addon_path . ($gtype == 'site' ? $site_srl : '') . $type . '.acivated_addons.cache.php';
if (file_exists($old_addon_file))
{
FileHandler::removeFile($old_addon_file);
}
}
/**
@ -176,12 +197,17 @@ class addonController extends addon
*/
function removeAddonConfig($site_srl)
{
$addon_path = _XE_PATH_ . 'files/cache/addons/';
$addon_file = $addon_path . $site_srl . '.acivated_addons.cache.php';
$addon_path = RX_BASEDIR . 'files/cache/addons/';
$addon_file = $addon_path . 'addons.' . intval($site_srl) . '.' . $type . '.php';
if(file_exists($addon_file))
{
FileHandler::removeFile($addon_file);
}
$old_addon_file = $addon_path . ($gtype == 'site' ? $site_srl : '') . $type . '.acivated_addons.cache.php';
if (file_exists($old_addon_file))
{
FileHandler::removeFile($old_addon_file);
}
$args = new stdClass();
$args->site_srl = $site_srl;

View file

@ -693,6 +693,62 @@ class adminAdminController extends admin
$this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigAdvanced'));
}
/**
* Update debug configuration.
*/
function procAdminUpdateDebug()
{
$vars = Context::getRequestVars();
// Debug settings
Rhymix\Framework\Config::set('debug.enabled', $vars->debug_enabled === 'Y');
Rhymix\Framework\Config::set('debug.log_errors', $vars->debug_log_errors === 'Y');
Rhymix\Framework\Config::set('debug.log_queries', $vars->debug_log_queries === 'Y');
Rhymix\Framework\Config::set('debug.log_slow_queries', max(0, floatval($vars->debug_log_slow_queries)));
Rhymix\Framework\Config::set('debug.log_slow_triggers', max(0, floatval($vars->debug_log_slow_triggers)));
Rhymix\Framework\Config::set('debug.log_slow_widgets', max(0, floatval($vars->debug_log_slow_widgets)));
Rhymix\Framework\Config::set('debug.display_type', strval($vars->debug_display_type) ?: 'comment');
Rhymix\Framework\Config::set('debug.display_to', strval($vars->debug_display_to) ?: 'admin');
// Log filename
$log_filename = strval($vars->debug_log_filename);
$log_filename_today = str_replace(array('YYYY', 'YY', 'MM', 'DD'), array(
getInternalDateTime(RX_TIME, 'Y'),
getInternalDateTime(RX_TIME, 'y'),
getInternalDateTime(RX_TIME, 'm'),
getInternalDateTime(RX_TIME, 'd'),
), $log_filename);
if (file_exists(RX_BASEDIR . $log_filename_today) && !is_writable(RX_BASEDIR . $log_filename_today))
{
return new Object(-1, 'msg_debug_log_filename_not_writable');
}
if (!file_exists(dirname(RX_BASEDIR . $log_filename)) && !FileHandler::makeDir(dirname(RX_BASEDIR . $log_filename)))
{
return new Object(-1, 'msg_debug_log_filename_not_writable');
}
if (!is_writable(dirname(RX_BASEDIR . $log_filename)))
{
return new Object(-1, 'msg_debug_log_filename_not_writable');
}
Rhymix\Framework\Config::set('debug.log_filename', $log_filename);
// IP access control
$allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->debug_allowed_ip));
$allowed_ip = array_unique(array_filter($allowed_ip, function($item) {
return $item !== '';
}));
if (!IpFilter::validate($whitelist)) {
return new Object(-1, 'msg_invalid_ip');
}
Rhymix\Framework\Config::set('debug.allow', array_values($allowed_ip));
// Save
Rhymix\Framework\Config::save();
$this->setMessage('success_updated');
$this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigDebug'));
}
/**
* Update sitelock configuration.
*/

View file

@ -483,6 +483,31 @@ class adminAdminView extends admin
$this->setTemplateFile('config_advanced');
}
/**
* Display Debug Settings page
* @return void
*/
function dispAdminConfigDebug()
{
// Load debug settings.
Context::set('debug_enabled', Rhymix\Framework\Config::get('debug.enabled'));
Context::set('debug_log_errors', Rhymix\Framework\Config::get('debug.log_errors'));
Context::set('debug_log_queries', Rhymix\Framework\Config::get('debug.log_queries'));
Context::set('debug_log_slow_queries', Rhymix\Framework\Config::get('debug.log_slow_queries'));
Context::set('debug_log_slow_triggers', Rhymix\Framework\Config::get('debug.log_slow_triggers'));
Context::set('debug_log_slow_widgets', Rhymix\Framework\Config::get('debug.log_slow_widgets'));
Context::set('debug_log_filename', Rhymix\Framework\Config::get('debug.log_filename') ?: 'files/debug/YYYYMMDD.php');
Context::set('debug_display_type', Rhymix\Framework\Config::get('debug.display_type'));
Context::set('debug_display_to', Rhymix\Framework\Config::get('debug.display_to'));
// IP access control
$allowed_ip = Rhymix\Framework\Config::get('debug.allow');
Context::set('debug_allowed_ip', implode(PHP_EOL, $allowed_ip));
Context::set('remote_addr', RX_CLIENT_IP);
$this->setTemplateFile('config_debug');
}
/**
* Display Sitelock Settings page
* @return void

View file

@ -7,6 +7,7 @@
<action name="dispAdminConfigGeneral" type="view" menu_name="adminConfigurationGeneral" menu_index="true" />
<action name="dispAdminConfigSecurity" type="view" menu_name="adminConfigurationGeneral" />
<action name="dispAdminConfigAdvanced" type="view" menu_name="adminConfigurationGeneral" />
<action name="dispAdminConfigDebug" type="view" menu_name="adminConfigurationGeneral" />
<action name="dispAdminConfigSitelock" type="view" menu_name="adminConfigurationGeneral" />
<action name="dispAdminConfigFtp" type="view" menu_name="adminConfigurationFtp" menu_index="true" />
<action name="dispAdminSetup" type="view" menu_name="adminMenuSetup" menu_index="true" />
@ -24,6 +25,7 @@
<action name="procAdminUpdateConfigGeneral" type="controller" />
<action name="procAdminUpdateSecurity" type="controller" />
<action name="procAdminUpdateAdvanced" type="controller" />
<action name="procAdminUpdateDebug" type="controller" />
<action name="procAdminUpdateSitelock" type="controller" />
<action name="procAdminUpdateFTPInfo" type="controller" />
<action name="procAdminRemoveFTPInfo" type="controller" />

View file

@ -4,6 +4,7 @@ $lang->cmd_configure = 'Configure';
$lang->subtitle_primary = 'General Settings';
$lang->subtitle_security = 'Security Settings';
$lang->subtitle_advanced = 'Advanced Settings';
$lang->subtitle_debug = 'Debug Settings';
$lang->subtitle_etc = 'Other Settings';
$lang->current_state = 'Current state';
$lang->latest_documents = 'Latest Documents';
@ -108,6 +109,25 @@ $lang->use_ftp_passive_mode = 'Use FTP Passive Mode';
$lang->use_sftp_support = 'Use SFTP';
$lang->disable_sftp_support = 'You should install ssh2 PHP module to use SFTP.';
$lang->msg_self_restart_cache_engine = 'Please restart Memcached or cache daemon.';
$lang->debug_enabled = 'Enable Debugging';
$lang->debug_log_errors = 'Log Errors';
$lang->debug_log_queries = 'Log Queries';
$lang->debug_log_slow_queries = 'Log Slow Queries';
$lang->debug_log_slow_triggers = 'Log Slow Triggers';
$lang->debug_log_slow_widgets = 'Log Slow Widgets';
$lang->debug_seconds = 'seconds or longer';
$lang->debug_display_type = 'Display Debug Info As';
$lang->debug_display_type_comment = 'HTML source comment';
$lang->debug_display_type_panel = 'On-screen panel';
$lang->debug_display_type_file = 'Write to file';
$lang->debug_display_to = 'Display Debug Info To';
$lang->debug_display_to_admin = 'Administrator only';
$lang->debug_display_to_ip = 'Visitors from IP adresses listed below';
$lang->debug_display_to_everyone = 'Everyone';
$lang->debug_log_filename = 'Log filename';
$lang->about_debug_log_filename = 'YYYYMMDD in the filename will be replaced with the current date.<br>It is recommended to split the log file by date to prevent it from getting too large.';
$lang->msg_debug_log_filename_not_writable = 'Rhymix cannot write log files in the specified path.';
$lang->debug_allowed_ip = 'Allowed IP addresses';
$lang->autoinstall = 'EasyInstall';
$lang->last_week = 'Last Week';
$lang->this_week = 'This Week';

View file

@ -4,6 +4,7 @@ $lang->cmd_configure = '설정하기';
$lang->subtitle_primary = '기본 설정';
$lang->subtitle_security = '보안 설정';
$lang->subtitle_advanced = '고급 설정';
$lang->subtitle_debug = '디버그 설정';
$lang->subtitle_etc = '기타';
$lang->current_state = '현황';
$lang->latest_documents = '최근 글';
@ -105,6 +106,25 @@ $lang->use_ftp_passive_mode = 'Passive 모드 사용';
$lang->use_sftp_support = 'SFTP 사용';
$lang->disable_sftp_support = 'SFTP를 사용하려면 PHP에 ssh2 모듈이 설치되어 있어야 합니다.';
$lang->msg_self_restart_cache_engine = 'Memcached 또는 캐시 서비스를 재시작해 주세요.';
$lang->debug_enabled = '디버그 기능 사용';
$lang->debug_log_errors = '에러 기록';
$lang->debug_log_queries = '쿼리 기록';
$lang->debug_log_slow_queries = '느린 쿼리 기록';
$lang->debug_log_slow_triggers = '느린 트리거 기록';
$lang->debug_log_slow_widgets = '느린 위젯 기록';
$lang->debug_seconds = '초 이상 소요시 기록';
$lang->debug_display_type = '디버그 정보 표시 방법';
$lang->debug_display_type_comment = 'HTML 소스에 표시 (주석)';
$lang->debug_display_type_panel = '화면에 표시 (패널)';
$lang->debug_display_type_file = '파일에 기록';
$lang->debug_display_to = '디버그 정보 표시 대상';
$lang->debug_display_to_admin = '관리자에게만 표시';
$lang->debug_display_to_ip = '아래 IP의 방문자에게만 표시';
$lang->debug_display_to_everyone = '모두에게 표시';
$lang->debug_log_filename = '디버그 정보 기록 파일';
$lang->about_debug_log_filename = '파일명에 YYYYMMDD가 포함된 경우 날짜별로 파일을 분리하여 기록합니다.<br>파일을 분리하지 않으면 용량이 매우 커질 수 있으니 주의하십시오.';
$lang->msg_debug_log_filename_not_writable = '지정한 경로에 로그 파일을 작성할 수 없습니다.';
$lang->debug_allowed_ip = '디버그 허용 IP';
$lang->autoinstall = '쉬운 설치';
$lang->last_week = '지난주';
$lang->this_week = '이번주';

View file

@ -0,0 +1,87 @@
<include target="config_header.html" />
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/admin/tpl/config_debug/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<section class="section">
<form action="./" method="post" class="x_form-horizontal">
<input type="hidden" name="module" value="admin" />
<input type="hidden" name="act" value="procAdminUpdateDebug" />
<input type="hidden" name="xe_validator_id" value="modules/admin/tpl/config_debug/1" />
<div class="x_control-group">
<label class="x_control-label">{$lang->debug_enabled}</label>
<div class="x_controls">
<label for="debug_enabled_y" class="x_inline"><input type="radio" name="debug_enabled" id="debug_enabled_y" value="Y" checked="checked"|cond="$debug_enabled" /> {$lang->cmd_yes}</label>
<label for="debug_enabled_n" class="x_inline"><input type="radio" name="debug_enabled" id="debug_enabled_n" value="N" checked="checked"|cond="!$debug_enabled" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->debug_log_errors}</label>
<div class="x_controls">
<label for="debug_log_errors_y" class="x_inline"><input type="radio" name="debug_log_errors" id="debug_log_errors_y" value="Y" checked="checked"|cond="$debug_log_errors" /> {$lang->cmd_yes}</label>
<label for="debug_log_errors_n" class="x_inline"><input type="radio" name="debug_log_errors" id="debug_log_errors_n" value="N" checked="checked"|cond="!$debug_log_errors" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->debug_log_queries}</label>
<div class="x_controls">
<label for="debug_log_queries_y" class="x_inline"><input type="radio" name="debug_log_queries" id="debug_log_queries_y" value="Y" checked="checked"|cond="$debug_log_queries" /> {$lang->cmd_yes}</label>
<label for="debug_log_queries_n" class="x_inline"><input type="radio" name="debug_log_queries" id="debug_log_queries_n" value="N" checked="checked"|cond="!$debug_log_queries" /> {$lang->cmd_no}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_slow_queries">{$lang->debug_log_slow_queries}</label>
<div class="x_controls">
<input type="text" name="debug_log_slow_queries" id="debug_log_slow_queries" size="5" value="{$debug_log_slow_queries}" />
&nbsp;{$lang->debug_seconds}
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_slow_triggers">{$lang->debug_log_slow_triggers}</label>
<div class="x_controls">
<input type="text" name="debug_log_slow_triggers" id="debug_log_slow_triggers" size="5" value="{$debug_log_slow_triggers}" />
&nbsp;{$lang->debug_seconds}
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_slow_widgets">{$lang->debug_log_slow_widgets}</label>
<div class="x_controls">
<input type="text" name="debug_log_slow_widgets" id="debug_log_slow_widgets" size="5" value="{$debug_log_slow_widgets}" />
&nbsp;{$lang->debug_seconds}
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_slow_widgets">{$lang->debug_display_type}</label>
<div class="x_controls">
<label for="debug_display_type_comment" class="x_inline"><input type="radio" name="debug_display_type" id="debug_display_type_comment" value="comment" checked="checked"|cond="$debug_display_type=='comment'" /> {$lang->debug_display_type_comment}</label>
<label for="debug_display_type_panel" class="x_inline"><input type="radio" name="debug_display_type" id="debug_display_type_panel" value="panel" checked="checked"|cond="$debug_display_type=='panel'" /> {$lang->debug_display_type_panel}</label>
<label for="debug_display_type_file" class="x_inline"><input type="radio" name="debug_display_type" id="debug_display_type_file" value="file" checked="checked"|cond="$debug_display_type=='file'" /> {$lang->debug_display_type_file}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_filename">{$lang->debug_log_filename}</label>
<div class="x_controls">
<input type="text" name="debug_log_filename" id="debug_log_filename" value="{$debug_log_filename}" />
<p class="x_help-block">{$lang->about_debug_log_filename}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_log_slow_widgets">{$lang->debug_display_to}</label>
<div class="x_controls">
<label for="debug_display_to_admin" class="x_inline"><input type="radio" name="debug_display_to" id="debug_display_to_admin" value="admin" checked="checked"|cond="$debug_display_to=='admin'" /> {$lang->debug_display_to_admin}</label>
<label for="debug_display_to_ip" class="x_inline"><input type="radio" name="debug_display_to" id="debug_display_to_ip" value="ip" checked="checked"|cond="$debug_display_to=='ip'" /> {$lang->debug_display_to_ip}</label>
<label for="debug_display_to_everyone" class="x_inline"><input type="radio" name="debug_display_to" id="debug_display_to_everyone" value="everyone" checked="checked"|cond="$debug_display_to=='everyone'" /> {$lang->debug_display_to_everyone}</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="debug_allowed_ip">{$lang->debug_allowed_ip}</label>
<div class="x_controls">
<textarea name="debug_allowed_ip" id="debug_allowed_ip" rows="4" cols="42" placeholder="{$remote_addr} ({$lang->local_ip_address})" style="margin-right:10px">{$debug_allowed_ip}</textarea>
</div>
</div>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</form>
</section>

View file

@ -7,5 +7,6 @@
<li class="x_active"|cond="$act == 'dispAdminConfigGeneral'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigGeneral')}">{$lang->subtitle_primary}</a></li>
<li class="x_active"|cond="$act == 'dispAdminConfigSecurity'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigSecurity')}">{$lang->subtitle_security}</a></li>
<li class="x_active"|cond="$act == 'dispAdminConfigAdvanced'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigAdvanced')}">{$lang->subtitle_advanced}</a></li>
<li class="x_active"|cond="$act == 'dispAdminConfigDebug'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigDebug')}">{$lang->subtitle_debug}</a></li>
<li class="x_active"|cond="$act == 'dispAdminConfigSitelock'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispAdminConfigSitelock')}">{$lang->subtitle_sitelock}</a></li>
</ul>

View file

@ -17,7 +17,7 @@ class messageView extends message
/**
* @brief Display messages
*/
function dispMessage()
function dispMessage($detail = null)
{
// Get configurations (using module model object)
$oModuleModel = getModel('module');
@ -58,9 +58,10 @@ class messageView extends message
{
if(strncasecmp('https://', Context::getRequestUri(), 8) === 0) $ssl_mode = true;
}
Context::set('ssl_mode',$ssl_mode);
Context::set('ssl_mode', $ssl_mode);
Context::set('system_message', nl2br($this->getMessage()));
Context::set('system_message_detail', nl2br($detail));
$this->setTemplateFile('system_message');
}

View file

@ -8,7 +8,7 @@
<div id="access">
<div class="login-header">
<h1><i class="icon-user"></i> {$system_message}</h1>
<div class="message" cond="defined('_XE_SITELOCK_MESSAGE_')">{constant('_XE_SITELOCK_MESSAGE_')}</div>
<div class="message" cond="$system_message_detail">{$system_message_detail}</div>
</div>
<div class="login-body">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/message/skins/default/system_message/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">

View file

@ -5,7 +5,7 @@
<div id="access">
<div class="login-header">
<h1>{$system_message}</h1>
<div class="message" cond="defined('_XE_SITELOCK_MESSAGE_')">{constant('_XE_SITELOCK_MESSAGE_')}</div>
<div class="message" cond="$system_message_detail">{$system_message_detail}</div>
</div>
<div cond="!$is_logged">
<div class="login-body">
@ -21,13 +21,13 @@
<input type="text" name="user_id" id="uid" title="{$lang->user_id}" placeholder="{$lang->user_id}" required autofocus cond="$member_config->identifier != 'email_address'" />
<input type="email" name="user_id" id="uid" title="{$lang->email_address}" placeholder="{$lang->email_address}" required autofocus cond="$member_config->identifier == 'email_address'" />
<input type="password" name="password" id="upw" title="{$lang->password}" placeholder="{$lang->password}" required />
<label for="keepid" cond="!defined('_XE_SITELOCK_MESSAGE_')">
<label for="keepid" cond="!$system_message_detail">
<input type="checkbox" name="keep_signed" id="keepid" class="inputCheck" value="Y" onclick="jQuery('#warning')[(jQuery('#keepid:checked').size()&gt;0?'addClass':'removeClass')]('open');" />
{$lang->keep_signed}
</label>
</div>
<p><button type="submit" class="button" href="#" onclick="$('#message_login_form').submit()">
<!--@if(defined('_XE_SITELOCK_MESSAGE_'))-->
<!--@if($system_message_detail)-->
{$lang->msg_administrator_login}
<!--@else-->
{$lang->cmd_login}
@ -35,7 +35,7 @@
</button></p>
</form>
</div>
<div class="login-footer" cond="!defined('_XE_SITELOCK_MESSAGE_')">
<div class="login-footer" cond="!$system_message_detail">
<a href="{getUrl('', 'act', 'dispMemberFindAccount')}">{$lang->cmd_find_member_account}</a>
<span class="bar">|</span>
<a href="{getUrl('', 'act', 'dispMemberSignUpForm')}">{$lang->cmd_signup}</a>

View file

@ -442,8 +442,8 @@ class widgetController extends widget
function execute($widget, $args, $javascript_mode = false, $escaped = true)
{
// Save for debug run-time widget
if(__DEBUG__==3) $start = microtime(true);
$before = microtime(true);
$start = microtime(true);
// urldecode the value of args haejum
$object_vars = get_object_vars($args);
if(count($object_vars))
@ -640,18 +640,14 @@ class widgetController extends widget
if($args->widgetstyle) $widget_content_body = $this->compileWidgetStyle($args->widgetstyle,$widget, $widget_content_body, $args, $javascript_mode);
$output = $widget_content_header . $widget_content_body . $widget_content_footer;
// Debug widget creation time information added to the results
if(__DEBUG__==3) $GLOBALS['__widget_excute_elapsed__'] += microtime(true) - $start;
$after = microtime(true);
$elapsed_time = $after - $before;
$slowlog = new stdClass;
$slowlog->caller = "widget.execute";
$slowlog->called = $widget;
$slowlog->called_extension = $widget;
writeSlowlog('widget', $elapsed_time, $slowlog);
$elapsed_time = microtime(true) - $start;
$GLOBALS['__widget_excute_elapsed__'] += $elapsed_time;
Rhymix\Framework\Debug::addWidget(array(
'name' => $widget,
'elapsed_time' => $elapsed_time,
));
// Return result
return $output;