Fixed bug #15576: Enable customization for fatal error messages in the backend and...
authorBenni Mack <benni.mack@typo3.org>
Sat, 16 Oct 2010 17:34:50 +0000 (17:34 +0000)
committerBenni Mack <benni.mack@typo3.org>
Sat, 16 Oct 2010 17:34:50 +0000 (17:34 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9098 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/class.t3lib_befunc.php
t3lib/class.t3lib_timetrack.php
t3lib/core_autoload.php
t3lib/message/class.t3lib_message_errorpagemessage.php [new file with mode: 0644]
typo3/templates/errorpage.html [new file with mode: 0644]

index c080dda..eff5bb4 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
 
 2010-10-16  Benjamin Mack  <benni@typo3.org>
 
+       * Fixed bug #15576: Enable customization for fatal error messages in the backend and frontend / Make all page errors RuntimeExceptions and unify BE and FE fatal errors in a single HTML template (Thanks to Reinhard F├╝hricht, Aske Ertmann)
        * Fixed bug #15877: Put versioning code from TCEmain in version extension - part #2 - moving records
 
 2010-10-16  Ernesto Baschny  <ernst@cron-it.de>
index 9c1a312..0f70691 100644 (file)
@@ -4128,6 +4128,7 @@ final class t3lib_BEfunc {
         * @param       boolean         Will return an alert() with the content of header and text.
         * @param       boolean         Print header.
         * @return      void
+        * @deprecated since TYPO3 4.5, will be removed in TYPO3 4.7 - use RuntimeException from now on
         */
        public static function typo3PrintError($header, $text, $js = '', $head = 1) {
                        // This prints out a TYPO3 error message.
@@ -4135,36 +4136,9 @@ final class t3lib_BEfunc {
                if ($js) {
                        echo "alert('".t3lib_div::slashJS($header.'\n'.$text)."');";
                } else {
-                       echo $head?'<html>
-                               <head>
-                                       <title>Error!</title>
-                               </head>
-                               <body bgcolor="white" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">':'';
-                       echo '<div align="center">
-                                       <table border="0" cellspacing="0" cellpadding="0" width="333">
-                                               <tr>
-                                                       <td align="center">'.
-                                                               ($GLOBALS['TBE_STYLES']['logo_login']?'<img src="'.$GLOBALS['BACK_PATH'].$GLOBALS['TBE_STYLES']['logo_login'].'" alt="" />':'<img src="'.$GLOBALS['BACK_PATH'].'gfx/typo3logo.gif" width="123" height="34" vspace="10" />').
-                                                       '</td>
-                                               </tr>
-                                               <tr>
-                                                       <td bgcolor="black">
-                                                               <table width="100%" border="0" cellspacing="1" cellpadding="10">
-                                                                       <tr>
-                                                                               <td bgcolor="#F4F0E8">
-                                                                                       <font face="verdana,arial,helvetica" size="2">';
-                       echo '<strong><center><font size="+1">'.$header.'</font></center></strong><br />'.$text;
-                       echo '                                                  </font>
-                                                                               </td>
-                                                                       </tr>
-                                                               </table>
-                                                       </td>
-                                               </tr>
-                                       </table>
-                               </div>';
-                       echo $head?'
-                               </body>
-                       </html>':'';
+                       t3lib_div::logDeprecatedFunction();
+                       $messageObj = t3lib_div::makeInstance('t3lib_message_ErrorPageMessage', $text, $header);
+                       $messageObj->output();
                }
        }
 
index b9ddcb8..f8c2b91 100644 (file)
@@ -587,37 +587,15 @@ class t3lib_timeTrack {
         * @param       boolean         If set, then this will produce a alert() line for inclusion in JavaScript.
         * @param       string          URL for the <base> tag (if you want it)
         * @return      string
+        * @deprecated since TYPO3 4.5, will be removed in TYPO3 4.7 - use RuntimeException from now on
         */
        public function debug_typo3PrintError($header, $text, $js, $baseUrl = '') {
                if ($js) {
                        $errorMessage = 'alert(\'' . t3lib_div::slashJS($header . '\n' . $text) . '\');';
                } else {
-                       $errorMessage = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-                                       "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
-                               <?xml version="1.0" encoding="utf-8"?>
-                               <html>
-                                       <head>
-                                               '.($baseUrl ? '<base href="'.htmlspecialchars($baseUrl).'" />' : '').'
-                                               <title>Error!</title>
-                                               <style type="text/css"><!--/*--><![CDATA[/*><!--*/
-                                                       body { font-family:Verdana,Arial,Helvetica,sans-serif; font-size: 90%; text-align: center; background-color: #ffffff; }
-                                                       h1 { font-size: 1.2em; margin: 0 0 1em 0; }
-                                                       p { margin: 0; text-align: left; }
-                                                       img { border: 0; margin: 10px 0; }
-                                                       div.center div { margin: 0 auto; }
-                                                       .errorBox { width: 400px; padding: 0.5em; border: 1px solid black; background-color: #F4F0E8; }
-                                               /*]]>*/--></style>
-                                       </head>
-                                       <body>
-                                               <div class="center">
-                                                       <img src="'.TYPO3_mainDir.'gfx/typo3logo.gif" width="123" height="34" alt="" />
-                                                       <div class="errorBox">
-                                                               <h1>'.$header.'</h1>
-                                                               <p>'.$text.'</p>
-                                                       </div>
-                                               </div>
-                                       </body>
-                               </html>';
+                       t3lib_div::logDeprecatedFunction();
+                       $messageObj = t3lib_div::makeInstance('t3lib_message_ErrorPageMessage', $text, $header);
+                       $errorMessage = $messageObj->render();
                }
 
                        // Hook to modify error message
index ce544e4..2ae936e 100644 (file)
@@ -43,6 +43,7 @@ $t3libClasses = array(
        't3lib_lock' => PATH_t3lib . 'class.t3lib_lock.php',
        't3lib_matchcondition' => PATH_t3lib . 'class.t3lib_matchcondition.php',
        't3lib_message_abstractmessage' => PATH_t3lib . 'message/class.t3lib_message_abstractmessage.php',
+       't3lib_message_errorpagemessage' => PATH_t3lib . 'message/class.t3lib_message_errorpagemessage.php',
        't3lib_modsettings' => PATH_t3lib . 'class.t3lib_modsettings.php',
        't3lib_pageselect' => PATH_t3lib . 'class.t3lib_page.php',
        't3lib_pagerenderer' => PATH_t3lib . 'class.t3lib_pagerenderer.php',
diff --git a/t3lib/message/class.t3lib_message_errorpagemessage.php b/t3lib/message/class.t3lib_message_errorpagemessage.php
new file mode 100644 (file)
index 0000000..efd3b3b
--- /dev/null
@@ -0,0 +1,252 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Benjamin Mack <benni@typo3.org>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A class representing error messages shown on a page.
+ * Classic Example: "No pages are found on rootlevel"
+ *
+ * @author     Benjamin Mack <benni@typo3.org>
+ * @package TYPO3
+ * @subpackage t3lib/message
+ */
+class t3lib_message_ErrorpageMessage extends t3lib_message_AbstractMessage {
+
+       /**
+        * defines whether the message should be stored in the session
+        * (to survive redirects) or only for one request (default)
+        *
+        * @var string
+        */
+       protected $htmlTemplate;
+
+       /**
+        * Constructor for a error message
+        *
+        * @param       string  The message.
+        * @param       string  message title.
+        * @param       integer Optional severity, must be either of t3lib_message_ErrorpageMessage::INFO, t3lib_message_ErrorpageMessage::OK,
+        *                  t3lib_message_ErrorpageMessage::WARNING or t3lib_message_ErrorpageMessage::ERROR. Default is t3lib_message_ErrorpageMessage::ERROR.
+        * @return      void
+        */
+       public function __construct($message, $title, $severity = self::ERROR) {
+               $this->htmlTemplate = TYPO3_mainDir . 'templates/errorpage.html';
+               $this->setMessage($message);
+               $this->setTitle(strlen($title) > 0 ? $title : 'Error!');
+               $this->setSeverity($severity);
+       }
+
+
+       /**
+        * Gets the filename of the HTML template.
+        *
+        * @return      string  The filename of the HTML template.
+        */
+       public function getHtmlTemplate() {
+               return $this->htmlTemplate;
+       }
+
+       /**
+        * Sets the filename to the HTML template
+        *
+        * @param       string  The filename to the HTML template.
+        * @return      void
+        */
+       public function setHtmlTemplate($htmlTemplate) {
+               $this->htmlTemplate = (string) $htmlTemplate;
+       }
+
+       /**
+        * Renders the flash message.
+        *
+        * @return      string  The flash message as HTML.
+        */
+       public function render() {
+               $classes = array(
+                       self::NOTICE  => 'notice',
+                       self::INFO    => 'information',
+                       self::OK      => 'ok',
+                       self::WARNING => 'warning',
+                       self::ERROR   => 'error',
+               );
+               
+               $markers = array(
+                       '###CSS_CLASS###' => $classes[$this->severity],
+                       '###LOGO###'      => '<img src="' . TYPO3_mainDir . 'gfx/typo3logo.gif" width="123" height="34" alt="" />',
+                       '###TITLE###'     => $this->title,
+                       '###MESSAGE###'   => $this->message,
+                       '###BASEURL###'   => t3lib_div::getIndpEnv('TYPO3_SITE_URL')
+               );
+
+               $content = t3lib_div::getUrl(PATH_site . $this->htmlTemplate);
+               $content = t3lib_parseHtml::substituteMarkerArray($content, $markers, '', FALSE, TRUE);
+               return $content;
+       }
+
+       /**
+        * Renders the flash message and echoes it.
+        *
+        * @return      void
+        */
+       public function output() {
+               $content = $this->render();
+               echo $content;
+       }
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/message/class.t3lib_message_errorpagemessage.php']) {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/message/class.t3lib_message_errorpagemessage.php']);
+}
+
+?>
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2010 Benjamin Mack <benni@typo3.org>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+/**
+ * A class representing error messages shown on a page.
+ * Classic Example: "No pages are found on rootlevel"
+ *
+ * @author     Benjamin Mack <benni@typo3.org>
+ * @package TYPO3
+ * @subpackage t3lib/message
+ */
+class t3lib_message_ErrorpageMessage extends t3lib_message_AbstractMessage {
+
+       /**
+        * defines whether the message should be stored in the session
+        * (to survive redirects) or only for one request (default)
+        *
+        * @var string
+        */
+       protected $htmlTemplate;
+
+       /**
+        * Constructor for a error message
+        *
+        * @param       string  The message.
+        * @param       string  message title.
+        * @param       integer Optional severity, must be either of t3lib_message_ErrorpageMessage::INFO, t3lib_message_ErrorpageMessage::OK,
+        *                  t3lib_message_ErrorpageMessage::WARNING or t3lib_message_ErrorpageMessage::ERROR. Default is t3lib_message_ErrorpageMessage::ERROR.
+        * @return      void
+        */
+       public function __construct($message, $title, $severity = self::ERROR) {
+               $this->htmlTemplate = TYPO3_mainDir . 'templates/errorpage.html';
+               $this->setMessage($message);
+               $this->setTitle(strlen($title) > 0 ? $title : 'Error!');
+               $this->setSeverity($severity);
+       }
+
+
+       /**
+        * Gets the filename of the HTML template.
+        *
+        * @return      string  The filename of the HTML template.
+        */
+       public function getHtmlTemplate() {
+               return $this->htmlTemplate;
+       }
+
+       /**
+        * Sets the filename to the HTML template
+        *
+        * @param       string  The filename to the HTML template.
+        * @return      void
+        */
+       public function setHtmlTemplate($htmlTemplate) {
+               $this->htmlTemplate = (string) $htmlTemplate;
+       }
+
+       /**
+        * Renders the flash message.
+        *
+        * @return      string  The flash message as HTML.
+        */
+       public function render() {
+               $classes = array(
+                       self::NOTICE  => 'notice',
+                       self::INFO    => 'information',
+                       self::OK      => 'ok',
+                       self::WARNING => 'warning',
+                       self::ERROR   => 'error',
+               );
+               
+               $markers = array(
+                       '###CSS_CLASS###' => $classes[$this->severity],
+                       '###LOGO###'      => '<img src="' . TYPO3_mainDir . 'gfx/typo3logo.gif" width="123" height="34" alt="" />',
+                       '###TITLE###'     => $this->title,
+                       '###MESSAGE###'   => $this->message,
+                       '###BASEURL###'   => t3lib_div::getIndpEnv('TYPO3_SITE_URL')
+               );
+
+               $content = t3lib_div::getUrl(PATH_site . $this->htmlTemplate);
+               $content = t3lib_parseHtml::substituteMarkerArray($content, $markers, '', FALSE, TRUE);
+               return $content;
+       }
+
+       /**
+        * Renders the flash message and echoes it.
+        *
+        * @return      void
+        */
+       public function output() {
+               $content = $this->render();
+               echo $content;
+       }
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/message/class.t3lib_message_errorpagemessage.php']) {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/message/class.t3lib_message_errorpagemessage.php']);
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/templates/errorpage.html b/typo3/templates/errorpage.html
new file mode 100644 (file)
index 0000000..7a2e491
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
+<?xml version="1.0" encoding="utf-8"?>
+<html>
+       <head>
+               <base href="###BASEURL###" />
+               <title>Error!</title>
+               <style type="text/css"><!--/*--><![CDATA[/*><!--*/
+                       body { font-family:Verdana,Arial,Helvetica,sans-serif; font-size: 90%; text-align: center; background-color: #ffffff; }
+                       h1 { font-size: 1.2em; margin: 0 0 1em 0; }
+                       p { margin: 0; text-align: left; }
+                       img { border: 0; margin: 10px 0; }
+                       div.center div { margin: 0 auto; }
+                       .errorBox { width: 400px; padding: 0.5em; border: 1px solid black; background-color: #F4F0E8; }
+               /*]]>*/--></style>
+       </head>
+       <body>
+               <div class="center">
+                       ###LOGO###
+                       <div class="errorBox">
+                               <h1>###TITLE###</h1>
+                               <p>###MESSAGE###</p>
+                       </div>
+               </div>
+       </body>
+</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
+<?xml version="1.0" encoding="utf-8"?>
+<html>
+       <head>
+               <base href="###BASEURL###" />
+               <title>Error!</title>
+               <style type="text/css"><!--/*--><![CDATA[/*><!--*/
+                       body { font-family:Verdana,Arial,Helvetica,sans-serif; font-size: 90%; text-align: center; background-color: #ffffff; }
+                       h1 { font-size: 1.2em; margin: 0 0 1em 0; }
+                       p { margin: 0; text-align: left; }
+                       img { border: 0; margin: 10px 0; }
+                       div.center div { margin: 0 auto; }
+                       .errorBox { width: 400px; padding: 0.5em; border: 1px solid black; background-color: #F4F0E8; }
+               /*]]>*/--></style>
+       </head>
+       <body>
+               <div class="center">
+                       ###LOGO###
+                       <div class="errorBox">
+                               <h1>###TITLE###</h1>
+                               <p>###MESSAGE###</p>
+                       </div>
+               </div>
+       </body>
+</html>
\ No newline at end of file