From c650e5c1e31e23bd80d26fb3bc45f3f2c1bb52d3 Mon Sep 17 00:00:00 2001
From: "Alexander A. Klimov" <alexander.klimov@icinga.com>
Date: Fri, 19 Jan 2018 11:39:22 +0100
Subject: [PATCH] /error/error: show the whole exception chain

---
 application/controllers/ErrorController.php | 17 +++++++++++++++--
 application/views/scripts/error/error.phtml | 18 +++++++++++++-----
 2 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/application/controllers/ErrorController.php b/application/controllers/ErrorController.php
index 07bb5dff4..684758348 100644
--- a/application/controllers/ErrorController.php
+++ b/application/controllers/ErrorController.php
@@ -86,9 +86,22 @@ class ErrorController extends ActionController
                         Logger::error("%s\n%s", $exception, $exception->getTraceAsString());
                         break;
                 }
-                $this->view->message = $exception->getMessage();
+
+                $this->view->messages = array();
+
                 if ($this->getInvokeArg('displayExceptions')) {
-                    $this->view->stackTrace = $exception->getTraceAsString();
+                    $this->view->stackTraces = array();
+
+                    do {
+                        $this->view->messages[] = $exception->getMessage();
+                        $this->view->stackTraces[] = $exception->getTraceAsString();
+                        $exception = $exception->getPrevious();
+                    } while ($exception !== null);
+                } else {
+                    do {
+                        $this->view->messages[] = $exception->getMessage();
+                        $exception = $exception->getPrevious();
+                    } while ($exception !== null);
                 }
 
                 break;
diff --git a/application/views/scripts/error/error.phtml b/application/views/scripts/error/error.phtml
index 1e0c29b0e..2dd87ee34 100644
--- a/application/views/scripts/error/error.phtml
+++ b/application/views/scripts/error/error.phtml
@@ -4,9 +4,17 @@
 </div>
 <?php endif ?>
 <div class="content">
-    <p tabindex="-1" class="autofocus error-message"><?= nl2br($this->escape($message)) ?></p>
-<?php if (isset($stackTrace)): ?>
-    <hr>
-    <pre><?= $this->escape($stackTrace) ?></pre>
-<?php endif ?>
+<?php
+if (isset($stackTraces)) {
+    foreach ($messages as $i => $message) {
+        echo '<p tabindex="-1" class="autofocus error-message">' . nl2br($this->escape($message)) . '</p>'
+            . '<hr>'
+            . '<pre>' . $this->escape($stackTraces[$i]) . '</pre>';
+    }
+} else {
+    foreach ($messages as $message) {
+        echo '<p tabindex="-1" class="autofocus error-message">' . nl2br($this->escape($message)) . '</p>';
+    }
+}
+?>
 </div>