From 665b49820f5bfc3e89a462c02c51c00614549ce8 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Tue, 9 Dec 2014 13:25:07 +1300 Subject: [PATCH] CRM-15683 Tim's proposed changes --- CRM/Core/LegacyErrorHandler.php | 27 +++++++++++++++++++++++++++ CRM/Utils/Hook.php | 5 ++++- Civi/Core/Container.php | 1 + 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 CRM/Core/LegacyErrorHandler.php diff --git a/CRM/Core/LegacyErrorHandler.php b/CRM/Core/LegacyErrorHandler.php new file mode 100644 index 0000000000..fff6d204bf --- /dev/null +++ b/CRM/Core/LegacyErrorHandler.php @@ -0,0 +1,27 @@ +getErrorData(); + $message = $e->getMessage(); + $session = CRM_Core_Session::singleton(); + $session->setStatus( + $message, + CRM_Utils_Array::value('message_title', $params), + CRM_Utils_Array::value('message_type', $params, 'error') + ); + + // @todo remove this code - legacy redirect path is an interim measure for moving redirects out of BAO + // to somewhere slightly more acceptable. they should not be part of the exception class & should + // be managed @ the form level - if you find a form that is triggering this piece of code + // you should log a ticket for it to be removed with details about the form you were on. + if (!empty($params['legacy_redirect_path'])) { + if (CRM_Utils_System::isDevelopment()) { + // here we could set a message telling devs to log it per above + } + CRM_Utils_System::redirect($params['legacy_redirect_path'], $params['legacy_redirect_query']); + } + } + } +} diff --git a/CRM/Utils/Hook.php b/CRM/Utils/Hook.php index f7f0c01222..6787614073 100644 --- a/CRM/Utils/Hook.php +++ b/CRM/Utils/Hook.php @@ -1461,7 +1461,10 @@ abstract class CRM_Utils_Hook { * @param CRM_Core_Exception Exception $exception */ static function unhandledException($exception) { - self::singleton()->invoke(1, $exception, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, 'civicrm_unhandled_exception'); + self::singleton()->invoke(1, $exception, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject, self::$_nullObject,'civicrm_unhandled_exception'); + // == 4.5+ == + $event = new \Civi\Core\Event\UnhandledExceptionEvent(self::$_nullObject, $exception); + \Civi\Core\Container::singleton()->get('dispatcher')->dispatch("unhandled_exception", $event); } /** diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index 2a8464547f..9db59203d9 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -96,6 +96,7 @@ class Container { $dispatcher->addListener('DAO::post-insert', array('\CRM_Core_BAO_RecurringEntity', 'triggerInsert')); $dispatcher->addListener('DAO::post-update', array('\CRM_Core_BAO_RecurringEntity', 'triggerUpdate')); $dispatcher->addListener('DAO::post-delete', array('\CRM_Core_BAO_RecurringEntity', 'triggerDelete')); + $dispatcher->addListener('hook_civicrm_unhandled_exception', array('CRM_Core_LegacyErrorHandler', 'handleException'); return $dispatcher; } -- 2.25.1