diff --git a/libraries/classes/Config/PageSettings.php b/libraries/classes/Config/PageSettings.php
index 872e8c8017..cf8a7dd150 100644
--- a/libraries/classes/Config/PageSettings.php
+++ b/libraries/classes/Config/PageSettings.php
@@ -98,7 +98,7 @@ class PageSettings
// reload page
$response = ResponseRenderer::getInstance();
Core::sendHeaderLocation($response->getSelfUrl());
- exit;
+ $response->callExit();
}
return $result;
diff --git a/libraries/classes/Controllers/AbstractController.php b/libraries/classes/Controllers/AbstractController.php
index 83f8dd5c6b..ec1e37233d 100644
--- a/libraries/classes/Controllers/AbstractController.php
+++ b/libraries/classes/Controllers/AbstractController.php
@@ -133,9 +133,7 @@ abstract class AbstractController
$this->response->setRequestStatus(false);
$this->response->addHTML(Message::error($errorMessage)->getDisplay());
- if (! defined('TESTSUITE')) {
- exit;
- }
+ $this->response->callExit();
}
/** @psalm-param int<400,599> $statusCode */
diff --git a/libraries/classes/Controllers/Export/ExportController.php b/libraries/classes/Controllers/Export/ExportController.php
index 2647111a80..cff1fafb19 100644
--- a/libraries/classes/Controllers/Export/ExportController.php
+++ b/libraries/classes/Controllers/Export/ExportController.php
@@ -311,7 +311,7 @@ final class ExportController extends AbstractController
/** @var DatabaseExportController $controller */
$controller = Core::getContainerBuilder()->get(DatabaseExportController::class);
$controller($request);
- exit;
+ $this->response->callExit();
}
}
diff --git a/libraries/classes/Controllers/Table/RelationController.php b/libraries/classes/Controllers/Table/RelationController.php
index 872ab61d1f..151c93c8fa 100644
--- a/libraries/classes/Controllers/Table/RelationController.php
+++ b/libraries/classes/Controllers/Table/RelationController.php
@@ -269,7 +269,7 @@ final class RelationController extends AbstractController
if (isset($_POST['preview_sql'])) {
Core::previewSQL($previewSqlData);
- exit;
+ $this->response->callExit();
}
if (empty($displayQuery) || $seenError) {
diff --git a/libraries/classes/Controllers/Table/Structure/SaveController.php b/libraries/classes/Controllers/Table/Structure/SaveController.php
index c5651e0f2b..eaa4d5d624 100644
--- a/libraries/classes/Controllers/Table/Structure/SaveController.php
+++ b/libraries/classes/Controllers/Table/Structure/SaveController.php
@@ -147,7 +147,7 @@ final class SaveController extends AbstractController
if (isset($_POST['preview_sql'])) {
Core::previewSQL($changes !== [] ? $sqlQuery : '');
- exit;
+ $this->response->callExit();
}
$columnsWithIndex = $this->dbi
diff --git a/libraries/classes/Database/Events.php b/libraries/classes/Database/Events.php
index 81f2792ba2..3be72ed573 100644
--- a/libraries/classes/Database/Events.php
+++ b/libraries/classes/Database/Events.php
@@ -200,7 +200,7 @@ class Events
}
$this->response->addJSON('tableType', 'events');
- exit;
+ $this->response->callExit();
}
}
@@ -508,7 +508,7 @@ class Events
unset($_POST);
}
- exit;
+ $this->response->callExit();
}
$message = __('Error in processing request:') . ' ';
@@ -521,7 +521,7 @@ class Events
if ($this->response->isAjax()) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
echo $message->getDisplay();
@@ -549,7 +549,7 @@ class Events
$this->response->addJSON('message', $exportData);
$this->response->addJSON('title', $title);
- exit;
+ $this->response->callExit();
}
$output = '
';
@@ -574,7 +574,7 @@ class Events
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
$this->response->addHTML($message->getDisplay());
diff --git a/libraries/classes/Database/Routines.php b/libraries/classes/Database/Routines.php
index a91d403bc0..4760fe0058 100644
--- a/libraries/classes/Database/Routines.php
+++ b/libraries/classes/Database/Routines.php
@@ -134,7 +134,7 @@ class Routines
echo "\n\n
" . $title . "
\n\n" . $editor;
}
- exit;
+ $this->response->callExit();
}
$message = __('Error in processing request:') . ' ';
@@ -153,7 +153,7 @@ class Routines
if ($this->response->isAjax()) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
echo $message->getDisplay();
@@ -268,7 +268,7 @@ class Routines
if (! $GLOBALS['message']->isSuccess()) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $output);
- exit;
+ $this->response->callExit();
}
$routines = self::getDetails($this->dbi, $db, $_POST['item_type'], $_POST['item_name']);
@@ -283,7 +283,7 @@ class Routines
$this->response->addJSON('insert', ! empty($routine));
$this->response->addJSON('message', $output);
$this->response->addJSON('tableType', 'routines');
- exit;
+ $this->response->callExit();
}
/**
@@ -1127,7 +1127,7 @@ class Routines
if ($this->response->isAjax()) {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
echo $message->getDisplay();
@@ -1237,14 +1237,14 @@ class Routines
$this->response->setRequestStatus($message->isSuccess());
$this->response->addJSON('message', $message->getDisplay() . $output);
$this->response->addJSON('dialog', false);
- exit;
+ $this->response->callExit();
}
echo $message->getDisplay() , $output;
if ($message->isError()) {
// At least one query has failed, so shouldn't
// execute any more queries, so we quit.
- exit;
+ $this->response->callExit();
}
unset($_POST);
@@ -1280,7 +1280,7 @@ class Routines
echo $form;
}
- exit;
+ $this->response->callExit();
}
if ($this->response->isAjax()) {
@@ -1294,7 +1294,7 @@ class Routines
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
}
}
@@ -1545,7 +1545,7 @@ class Routines
$this->response->addJSON('message', $exportData);
$this->response->addJSON('title', $title);
- exit;
+ $this->response->callExit();
}
$output = '
';
@@ -1573,7 +1573,7 @@ class Routines
$this->response->setRequestStatus(false);
$this->response->addJSON('message', $message);
- exit;
+ $this->response->callExit();
}
$this->response->addHTML($message->getDisplay());
diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php
index 80dc82a039..f77587ccf6 100644
--- a/libraries/classes/DatabaseInterface.php
+++ b/libraries/classes/DatabaseInterface.php
@@ -165,7 +165,7 @@ class DatabaseInterface implements DbalInterface
// The following statement will exit
Generator::mysqlDie($this->getError($connectionType), $query);
- exit;
+ ResponseRenderer::getInstance()->callExit();
}
return $result;
diff --git a/libraries/classes/DbTableExists.php b/libraries/classes/DbTableExists.php
index 3a62acaa32..b141e930a2 100644
--- a/libraries/classes/DbTableExists.php
+++ b/libraries/classes/DbTableExists.php
@@ -46,7 +46,7 @@ final class DbTableExists
Message::error(__('No databases selected.')),
);
- exit;
+ $response->callExit();
}
$urlParams = ['reload' => 1];
@@ -65,7 +65,7 @@ final class DbTableExists
Core::sendHeaderLocation('./index.php?route=/' . Url::getCommonRaw($urlParams, '&'));
- exit;
+ $response->callExit();
}
private static function checkTable(string $db, string $table, bool $isTransformationWrapper): void
@@ -90,7 +90,7 @@ final class DbTableExists
}
if ($isTransformationWrapper) {
- exit;
+ ResponseRenderer::getInstance()->callExit();
}
if ($table !== '') {
@@ -110,6 +110,6 @@ final class DbTableExists
$controller = Core::getContainerBuilder()->get(SqlController::class);
$controller(Common::getRequest());
- exit;
+ ResponseRenderer::getInstance()->callExit();
}
}
diff --git a/libraries/classes/ErrorHandler.php b/libraries/classes/ErrorHandler.php
index 4fd667c74f..7d628fd2d8 100644
--- a/libraries/classes/ErrorHandler.php
+++ b/libraries/classes/ErrorHandler.php
@@ -300,9 +300,6 @@ class ErrorHandler
default:
// FATAL error, display it and exit
$this->dispFatalError($error);
- if (! defined('TESTSUITE')) {
- exit;
- }
}
}
@@ -325,7 +322,7 @@ class ErrorHandler
*
* @param Error $error the error
*/
- protected function dispFatalError(Error $error): void
+ protected function dispFatalError(Error $error): never
{
$response = ResponseRenderer::getInstance();
if (! $response->headersSent()) {
@@ -337,9 +334,7 @@ class ErrorHandler
$response->addHTML($error->getDisplay());
$response->addHTML('