From e81619ee30c3d49334578a70eb6d0040491573ba Mon Sep 17 00:00:00 2001
From: Daniel Siepmann <daniel.siepmann@typo3.org>
Date: Wed, 19 Feb 2020 08:31:20 +0100
Subject: [PATCH] [BUGFIX] Render exception for backend preview as error
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Prior only an warning was logged, and a fallback rendering jumped in.
With this change an error is rendered in addition to logging. No
fallback will be triggered anymore.

This should raise awareness and ease integration for integrators.
Please note that already broken elements might now show an error
instead of fallback preview.

This is only activated for admin users and enabled BE|debug system
setting.

Resolves: #90427
Releases: master
Change-Id: I1f24a1e775ba4f12917ed26dc29b0ea78ab81a1f
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/63318
Reviewed-by: Susanne Moog <look@susi.dev>
Reviewed-by: Björn Jacob <bjoern.jacob@tritum.de>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Christian Eßl <indy.essl@gmail.com>
Reviewed-by: Ingo Fabbri <ingo.fabbri@gmail.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Christian Eßl <indy.essl@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
---
 typo3/sysext/backend/Classes/View/PageLayoutView.php | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/typo3/sysext/backend/Classes/View/PageLayoutView.php b/typo3/sysext/backend/Classes/View/PageLayoutView.php
index aca6a02b3e34..2b1ec2780dbf 100644
--- a/typo3/sysext/backend/Classes/View/PageLayoutView.php
+++ b/typo3/sysext/backend/Classes/View/PageLayoutView.php
@@ -26,6 +26,7 @@ use TYPO3\CMS\Backend\Utility\BackendUtility;
 use TYPO3\CMS\Backend\View\Event\AfterSectionMarkupGeneratedEvent;
 use TYPO3\CMS\Backend\View\Event\BeforeSectionMarkupGeneratedEvent;
 use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
+use TYPO3\CMS\Core\Core\Environment;
 use TYPO3\CMS\Core\Database\Connection;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
@@ -1243,11 +1244,22 @@ class PageLayoutView implements LoggerAwareInterface
                         $fluidTemplateFile,
                         $e->getMessage()
                     ));
+
+                    if ($GLOBALS['TYPO3_CONF_VARS']['BE']['debug'] && $this->getBackendUser()->isAdmin()) {
+                        $view = GeneralUtility::makeInstance(StandaloneView::class);
+                        $view->assign('error', [
+                            'message' => str_replace(Environment::getProjectPath(), '', $e->getMessage()),
+                            'title' => 'Error while rendering FluidTemplate preview using ' . str_replace(Environment::getProjectPath(), '', $fluidTemplateFile),
+                        ]);
+                        $view->setTemplateSource('<f:be.infobox title="{error.title}" state="2">{error.message}</f:be.infobox>');
+                        return $view->render();
+                    }
                 }
             }
         }
         return null;
     }
+
     /**
      * Renders the preview part of a content element
      * @param array $row given tt_content database record
-- 
GitLab