mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-04 17:21:39 +09:00
Show where an Exception was thrown or error object was returned
- 관리자에게만 표시함 - 오류 화면을 표시하는 방식에 따라서는 표시되지 않을 수 있음 - 코어 내부에서 발생하는 오류는 표시되지 않을 수 있음 - message 모듈 스킨에 의존함
This commit is contained in:
parent
9042e4110c
commit
339fd234a5
10 changed files with 81 additions and 10 deletions
|
|
@ -1524,7 +1524,7 @@ class Context
|
|||
* @param string $message
|
||||
* @return void
|
||||
*/
|
||||
public static function displayErrorPage($title = 'Error', $message = '', $status = 500)
|
||||
public static function displayErrorPage($title = 'Error', $message = '', $status = 500, $location = '')
|
||||
{
|
||||
// Change current directory to the Rhymix installation path.
|
||||
chdir(\RX_BASEDIR);
|
||||
|
|
@ -1541,6 +1541,18 @@ class Context
|
|||
$oMessageObject->setHttpStatusCode($status);
|
||||
}
|
||||
|
||||
// Find out the caller's location.
|
||||
if (!$location)
|
||||
{
|
||||
$backtrace = debug_backtrace(false);
|
||||
$caller = array_shift($backtrace);
|
||||
$location = $caller['file'] . ':' . $caller['line'];
|
||||
if (starts_with(\RX_BASEDIR, $location))
|
||||
{
|
||||
$location = substr($location, strlen(\RX_BASEDIR));
|
||||
}
|
||||
}
|
||||
|
||||
if (in_array(Context::getRequestMethod(), array('XMLRPC', 'JSON', 'JS_CALLBACK')))
|
||||
{
|
||||
$oMessageObject->setMessage(trim($title . "\n\n" . $message));
|
||||
|
|
@ -1548,7 +1560,7 @@ class Context
|
|||
else
|
||||
{
|
||||
$oMessageObject->setMessage($title);
|
||||
$oMessageObject->dispMessage($message);
|
||||
$oMessageObject->dispMessage($message, $location);
|
||||
}
|
||||
|
||||
// Display the message.
|
||||
|
|
|
|||
|
|
@ -993,7 +993,7 @@ class ModuleHandler extends Handler
|
|||
$oMessageObject = self::getModuleInstance('message', $type);
|
||||
$oMessageObject->setError(-1);
|
||||
$oMessageObject->setMessage($this->error);
|
||||
$oMessageObject->dispMessage();
|
||||
$oMessageObject->dispMessage(null, $oModule->get('rx_error_location'));
|
||||
|
||||
// display Error Page
|
||||
if(!in_array($oMessageObject->getHttpStatusCode(), array(200, 403)))
|
||||
|
|
|
|||
|
|
@ -363,12 +363,17 @@ class ModuleObject extends BaseObject
|
|||
$this->setError(-1);
|
||||
$this->setMessage($msg_code);
|
||||
|
||||
// Get backtrace
|
||||
$backtrace = debug_backtrace(false);
|
||||
$caller = array_shift($backtrace);
|
||||
$location = $caller['file'] . ':' . $caller['line'];
|
||||
|
||||
// Error message display by message module
|
||||
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
|
||||
$oMessageObject = ModuleHandler::getModuleInstance('message', $type);
|
||||
$oMessageObject->setError(-1);
|
||||
$oMessageObject->setMessage($msg_code);
|
||||
$oMessageObject->dispMessage();
|
||||
$oMessageObject->dispMessage(null, $location);
|
||||
|
||||
$this->setTemplatePath($oMessageObject->getTemplatePath());
|
||||
$this->setTemplateFile($oMessageObject->getTemplateFile());
|
||||
|
|
@ -597,6 +602,8 @@ class ModuleObject extends BaseObject
|
|||
catch (Rhymix\Framework\Exception $e)
|
||||
{
|
||||
$output = new BaseObject(-2, $e->getMessage());
|
||||
$location = $e->getFile() . ':' . $e->getLine();
|
||||
$output->add('rx_error_location', $location);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -609,6 +616,10 @@ class ModuleObject extends BaseObject
|
|||
{
|
||||
$this->setError($output->getError());
|
||||
$this->setMessage($output->getMessage());
|
||||
if($output->getError() && $output->get('rx_error_location'))
|
||||
{
|
||||
$this->add('rx_error_location', $output->get('rx_error_location'));
|
||||
}
|
||||
$original_output = clone $output;
|
||||
}
|
||||
else
|
||||
|
|
@ -622,6 +633,10 @@ class ModuleObject extends BaseObject
|
|||
{
|
||||
$this->setError($triggerOutput->getError());
|
||||
$this->setMessage($triggerOutput->getMessage());
|
||||
if($output->get('rx_error_location'))
|
||||
{
|
||||
$this->add('rx_error_location', $output->get('rx_error_location'));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -639,6 +654,10 @@ class ModuleObject extends BaseObject
|
|||
{
|
||||
$this->setError($output->getError());
|
||||
$this->setMessage($output->getMessage());
|
||||
if($output->get('rx_error_location'))
|
||||
{
|
||||
$this->add('rx_error_location', $output->get('rx_error_location'));
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,19 @@ class BaseObject
|
|||
{
|
||||
$this->setError($error);
|
||||
$this->setMessage($message);
|
||||
|
||||
if ($error)
|
||||
{
|
||||
$backtrace = debug_backtrace(false);
|
||||
$caller = array_shift($backtrace);
|
||||
$nextcaller = array_shift($backtrace);
|
||||
if ($nextcaller && $nextcaller['function'] === 'createObject')
|
||||
{
|
||||
$caller = $nextcaller;
|
||||
}
|
||||
$location = $caller['file'] . ':' . $caller['line'];
|
||||
$this->add('rx_error_location', $location);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -298,4 +311,4 @@ if (version_compare(PHP_VERSION, '7.2', '<'))
|
|||
}
|
||||
|
||||
/* End of file Object.class.php */
|
||||
/* Location: ./classes/object/Object.class.php */
|
||||
/* Location: ./classes/object/Object.class.php */
|
||||
|
|
|
|||
|
|
@ -6,6 +6,9 @@
|
|||
<div class="message" cond="$system_message_detail">
|
||||
{$system_message_detail}
|
||||
</div>
|
||||
<div class="message location" cond="$system_message_location && $logged_info->is_admin === 'Y'">
|
||||
{$system_message_location}
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/message/m.skin/default/system_message/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ class messageView extends message
|
|||
/**
|
||||
* @brief Display messages
|
||||
*/
|
||||
function dispMessage($detail = null)
|
||||
function dispMessage($detail = null, $location = null)
|
||||
{
|
||||
// Get configurations (using module model object)
|
||||
$oModuleModel = getModel('module');
|
||||
|
|
@ -47,10 +47,17 @@ class messageView extends message
|
|||
{
|
||||
if(strncasecmp('https://', Context::getRequestUri(), 8) === 0) $ssl_mode = true;
|
||||
}
|
||||
|
||||
// Remove basedir from location (if any)
|
||||
if ($location && starts_with(\RX_BASEDIR, $location))
|
||||
{
|
||||
$location = substr($location, strlen(\RX_BASEDIR));
|
||||
}
|
||||
|
||||
Context::set('ssl_mode', $ssl_mode);
|
||||
Context::set('system_message', nl2br($this->getMessage()));
|
||||
Context::set('system_message_detail', nl2br($detail));
|
||||
Context::set('system_message_location', escape($location));
|
||||
|
||||
$this->setTemplateFile('system_message');
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ body, #access table, #access input, #access textarea, #access select, #access bu
|
|||
#access>.login-footer:after{display:table;line-height:0;content:"";clear:both}
|
||||
#access .control-group{position:relative;padding:0 14px 0 0;margin:0;clear:both}
|
||||
#access .control-group:before{content:"";display:block;clear:both}
|
||||
#access .message{padding:0.8em 1em}
|
||||
#access .message.location{word-break:break-all}
|
||||
#access form{margin:0}
|
||||
#access fieldset{margin:0}
|
||||
#access label{cursor:pointer;display:inline-block}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,12 @@
|
|||
<div id="access">
|
||||
<div class="login-header">
|
||||
<h1><i class="icon-user"></i> {$system_message}</h1>
|
||||
<div class="message" cond="$system_message_detail">{$system_message_detail}</div>
|
||||
<div class="message" cond="$system_message_detail">
|
||||
{$system_message_detail}
|
||||
</div>
|
||||
<div class="message location" cond="$system_message_location && $logged_info->is_admin === 'Y'">
|
||||
{$system_message_location}
|
||||
</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}">
|
||||
|
|
|
|||
|
|
@ -2,7 +2,12 @@
|
|||
<div class="signin">
|
||||
<section class="sw-body">
|
||||
<h1>{$system_message}</h1>
|
||||
<div class="rx_message-notice error" cond="$system_message_detail">{$system_message_detail}</div>
|
||||
<div class="rx_message-notice error" cond="$system_message_detail">
|
||||
{$system_message_detail}
|
||||
</div>
|
||||
<div class="rx_message-notice location" cond="$system_message_location && $logged_info->is_admin === 'Y'">
|
||||
{$system_message_location}
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/message/skins/simple_world/system_message/1'" class="rx_message-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
|
|
@ -51,4 +56,4 @@ $(function($){
|
|||
});
|
||||
});
|
||||
</script>
|
||||
<include target="./common_footer.html" />
|
||||
<include target="./common_footer.html" />
|
||||
|
|
|
|||
|
|
@ -5,7 +5,12 @@
|
|||
<div id="access">
|
||||
<div class="login-header">
|
||||
<h1>{$system_message}</h1>
|
||||
<div class="message" cond="$system_message_detail">{$system_message_detail}</div>
|
||||
<div class="message" cond="$system_message_detail">
|
||||
{$system_message_detail}
|
||||
</div>
|
||||
<div class="message location" cond="$system_message_location && $logged_info->is_admin === 'Y'">
|
||||
{$system_message_location}
|
||||
</div>
|
||||
</div>
|
||||
<div cond="!$is_logged">
|
||||
<div class="login-body">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue