/** * Exception handler * @param Exception $exception The exception raised */ function exceptionHandler($exception) { try { $exceptionMessage = NULL; // If a transaction is in progress, rollback it if (DatabaseFactory::isTransactionInProgress()) { DatabaseFactory::rollback(); } // logs exception before doing anything else, for logs to be filled even if an exception will occur during the exception treatment $logInstance = LogTool::getInstance(); // debug exception in web context if ($exception instanceof GenericWarningException) { // logs warning $logInstance->logException($exception, LogTool::WARNING_LEVEL); } else { // logs error $logInstance->logException($exception); } $exceptionClass = get_class($exception); if ($exception instanceof GenericException) { // Displays message if (TranslationTool::isTranslationAllowed()) { $exceptionMessage = $exception->getUserLocalizedMessage(); } else { $exceptionMessage = $exception->getMessage(); } } else { // If error is not managed, displays generic message $exceptionMessage = 'GENERIC_EXCEPTION'; } if (SystemTool::isAjaxContext()) { echo json_encode(array('error' => $exceptionMessage), true); } else { echo $exceptionMessage; } } catch (Exception $e) { echo $e->getMessage(); try { LogTool::getInstance()->logException($e); echo $exceptionClass . ' raised : ' . $exceptionMessage; echo '+ ' . get_class($e) . ' while handling exception : ' . $e->getMessage(); exit(LogTool::KO_RETURN_CODE); } catch (Exception $e2) { try { LogTool::getInstance()->logException($e2); echo $exceptionClass . ' raised (unable to display exception details)'; exit(LogTool::KO_RETURN_CODE); } catch (Exception $e3) { echo 'unable to display exception details'; exit; } } } }