From e31704ffc2a4015308412e38d19ec445b0a2ca34 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 8 Aug 2023 00:49:14 +0900 Subject: [PATCH] Move friendly error message feature to Message module --- common/framework/Debug.php | 12 ++----- common/lang/en.php | 1 - common/lang/ko.php | 3 +- modules/message/lang/en.php | 2 ++ modules/message/lang/ko.php | 1 + .../m.skins/default/system_message.html | 3 ++ modules/message/message.view.php | 33 ++++++++++++++----- .../message/skins/default/system_message.html | 3 ++ .../skins/xedition/system_message.html | 3 ++ 9 files changed, 41 insertions(+), 20 deletions(-) diff --git a/common/framework/Debug.php b/common/framework/Debug.php index 5469bbc5c..2eb8f1776 100644 --- a/common/framework/Debug.php +++ b/common/framework/Debug.php @@ -632,17 +632,11 @@ class Debug { $log_entry = str_replace("\0", '', sprintf('%s #%d "%s" in %s on line %d (via %s on line %d)', get_class($e), $e->getCode(), $e->getMessage(), $caller_errfile, $caller_errline, $errfile, $e->getLine())); - $friendly_entry = $log_entry; } else { $log_entry = str_replace("\0", '', sprintf('%s #%d "%s" in %s on line %d', get_class($e), $e->getCode(), $e->getMessage(), $errfile, $e->getLine())); - $friendly_entry = $log_entry; - if ($e->getMessage() === 'Class "Object" not found') - { - $friendly_entry .= "\n\n" . lang('msg_baseobject_fix'); - } } if (!isset(self::$_config['write_error_log']) || self::$_config['write_error_log'] !== 'none') @@ -651,7 +645,7 @@ class Debug } // Display the error screen. - self::displayErrorScreen($friendly_entry); + self::displayErrorScreen($log_entry); exit; } @@ -741,7 +735,7 @@ class Debug * @param string $message * @return void */ - public static function displayErrorScreen($message) + public static function displayErrorScreen($message, $location = '') { // Do not display error screen in CLI. if (php_sapi_name() === 'cli') @@ -773,7 +767,7 @@ class Debug // Display a generic error page. try { - \Context::displayErrorPage($title, $message, 500); + \Context::displayErrorPage($title, $message, 500, $location); } catch (\Error $e) { diff --git a/common/lang/en.php b/common/lang/en.php index 429ac4e73..c735d68fa 100644 --- a/common/lang/en.php +++ b/common/lang/en.php @@ -342,7 +342,6 @@ $lang->filter['invalid_number'] = 'The format of %s is invalid. Please enter num $lang->filter['invalid_float'] = 'The format of %s is invalid. Please enter numbers only.'; $lang->filter['invalid_extension'] = 'The format of %s is invalid. e.g. gif, jpg, png'; $lang->security_warning_embed = 'Due to security concern, administrators are not allowed to view embedded items.
To view them, please use another non-administrator ID.'; -$lang->msg_baseobject_fix = 'Object → BaseObject conversion is required in a third-party program. Please fix it by consulting the file name and line number shown above.'; $lang->msg_pc_to_mobile = 'View mobile optimized version of this page'; $lang->cmd_yes = 'Yes'; $lang->cmd_no = 'No'; diff --git a/common/lang/ko.php b/common/lang/ko.php index ed36878c1..0f27231c7 100644 --- a/common/lang/ko.php +++ b/common/lang/ko.php @@ -346,7 +346,6 @@ $lang->filter['invalid_float'] = '%s의 형식이 잘못되었습니다. 숫자 $lang->filter['invalid_extension'] = '%s의 형식이 잘못되었습니다. gif, jpg, png 등 쉼표로 구분하여 입력해야 합니다.'; $lang->security_invalid_session = '바르지 않은 접근입니다. 인증을 위해 다시 로그인해야 합니다.'; $lang->security_warning_embed = '보안 문제로 관리자 아이디로는 embed를 볼 수 없습니다. 확인하려면 다른 아이디로 접속하세요'; -$lang->msg_baseobject_fix = 'Object → BaseObject 변환이 필요한 서드파티 자료가 있습니다. 위의 에러 메시지에 포함된 파일명과 줄 번호를 참고하여 수정하세요.'; $lang->msg_pc_to_mobile = '모바일에 최적화된 화면으로 보기'; $lang->cmd_yes = '예'; $lang->cmd_no = '아니오'; @@ -381,4 +380,4 @@ $lang->image_quality = '화질'; $lang->standard = '표준'; $lang->unlimited = '제한 없음'; $lang->admin = '관리자'; -$lang->stop = '중지'; \ No newline at end of file +$lang->stop = '중지'; diff --git a/modules/message/lang/en.php b/modules/message/lang/en.php index 0863a7f0c..958e3ce08 100644 --- a/modules/message/lang/en.php +++ b/modules/message/lang/en.php @@ -1,3 +1,5 @@ message = 'Display Errors'; $lang->about_skin = 'You may select skins for error messages.'; +$lang->msg_administrator_login = 'Administrator Login'; +$lang->error_help['baseobject'] = 'Object → BaseObject conversion is required in a third-party program. Please fix it by consulting the file name and line number shown above.'; diff --git a/modules/message/lang/ko.php b/modules/message/lang/ko.php index 3ad2d40b6..6c86c0752 100644 --- a/modules/message/lang/ko.php +++ b/modules/message/lang/ko.php @@ -2,3 +2,4 @@ $lang->message = '오류 표시'; $lang->about_skin = '오류 메시지용 스킨을 지정할 수 있습니다.'; $lang->msg_administrator_login = '관리자 로그인'; +$lang->error_help['baseobject'] = 'Object → BaseObject 변환이 필요한 서드파티 자료가 있습니다. 위의 에러 메시지에 포함된 파일명과 줄 번호를 참고하여 수정하세요.'; diff --git a/modules/message/m.skins/default/system_message.html b/modules/message/m.skins/default/system_message.html index 146449e3b..042a9f9da 100644 --- a/modules/message/m.skins/default/system_message.html +++ b/modules/message/m.skins/default/system_message.html @@ -6,6 +6,9 @@
{$system_message_detail}
+
+ {$system_message_help} +
{$system_message_location}
diff --git a/modules/message/message.view.php b/modules/message/message.view.php index 0179da2ae..3b7686d96 100644 --- a/modules/message/message.view.php +++ b/modules/message/message.view.php @@ -7,17 +7,10 @@ */ class MessageView extends Message { - /** - * @brief Initialization - */ - function init() - { - } - /** * @brief Display messages */ - function dispMessage($detail = null, $location = null) + public function dispMessage($detail = null, $location = null) { // Get skin configuration $config = ModuleModel::getModuleConfig('message') ?: new stdClass; @@ -79,6 +72,7 @@ class MessageView extends Message Context::set('ssl_mode', \RX_SSL); Context::set('system_message', nl2br($this->getMessage())); Context::set('system_message_detail', nl2br($detail)); + Context::set('system_message_help', self::getErrorHelp($detail)); Context::set('system_message_location', escape($location)); if ($this->getError()) @@ -101,6 +95,29 @@ class MessageView extends Message $this->setHttpStatusCode(403); } } + + /** + * Get friendly help message for common types of errors. + * + * @param string $error_message + * @return string + */ + public static function getErrorHelp(string $error_message): string + { + $regexp_list = [ + '/Class [\'"]Object[\'"] not found/' => 'baseobject', + ]; + + foreach ($regexp_list as $regexp => $key) + { + if (preg_match($regexp, $error_message)) + { + return lang('message.error_help.' . $key); + } + } + + return ''; + } } /* End of file message.view.php */ /* Location: ./modules/message/message.view.php */ diff --git a/modules/message/skins/default/system_message.html b/modules/message/skins/default/system_message.html index 14fbbd252..4deba92d0 100644 --- a/modules/message/skins/default/system_message.html +++ b/modules/message/skins/default/system_message.html @@ -11,6 +11,9 @@
{$system_message_detail}
+
+ {$system_message_help} +
{$system_message_location}
diff --git a/modules/message/skins/xedition/system_message.html b/modules/message/skins/xedition/system_message.html index 5626ca4c9..44e0e5634 100644 --- a/modules/message/skins/xedition/system_message.html +++ b/modules/message/skins/xedition/system_message.html @@ -8,6 +8,9 @@
{$system_message_detail}
+
+ {$system_message_help} +
{$system_message_location}