[FEATURE] Show string value for PHP error codes in install tool 94/23794/9
authorWouter Wolters <typo3@wouterwolters.nl>
Thu, 12 Sep 2013 17:29:56 +0000 (19:29 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Sun, 15 Sep 2013 13:12:26 +0000 (15:12 +0200)
"All configuration" in install tool shows the integer representation
of the bit mask of the PHP error codes in settings like
['SYS']['errorHandlerErrors']. This change adds a view helper to
show the current setting in an E_* constants representation.

Resolves: #51376
Releases: 6.2
Change-Id: Ia69251d97c07b1180f8e7ad99b687b5639396892
Reviewed-on: https://review.typo3.org/23794
Tested-by: Wouter Wolters
Reviewed-by: Christian Kuhn
Tested-by: Christian Kuhn
Reviewed-by: Anja Leichsenring
Tested-by: Anja Leichsenring
typo3/sysext/core/Configuration/DefaultConfiguration.php
typo3/sysext/install/Classes/Controller/Action/Tool/AllConfiguration.php
typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php [new file with mode: 0644]
typo3/sysext/install/Resources/Private/Partials/Action/Tool/AllConfiguration/SubSection.html
typo3/sysext/install/Resources/Public/Stylesheets/Action/Common/Install.css
typo3/sysext/install/Tests/Unit/ViewHelpers/Format/PhpErrorCodeViewHelperTest.php [new file with mode: 0644]

index 2970f68..4014186 100644 (file)
@@ -183,8 +183,8 @@ return array(
                'productionExceptionHandler' => 'TYPO3\\CMS\\Core\\Error\\ProductionExceptionHandler',          // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: "TYPO3\\CMS\\Core\\Error\\ProductionExceptionHandler". This exception handler displays a nice error message when something went wrong. The error message is logged to the configured logs. Note: The configured "productionExceptionHandler" is used if displayErrors is set to "0" or to "-1" and devIPmask doesn't match the users IP.
                'debugExceptionHandler' => 'TYPO3\\CMS\\Core\\Error\\DebugExceptionHandler',            // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: "TYPO3\\CMS\\Core\\Error\\DebugExceptionHandler". This exception handler displays the complete stack trace of any encountered exception. The error message and the stack trace  is logged to the configured logs. Note: The configured "debugExceptionHandler" is used if displayErrors is set to "1" and if displayErrors is "-1"  or "2" and the devIPmask matches the users IP.
                'errorHandler' => 'TYPO3\\CMS\\Core\\Error\\ErrorHandler',              // String: Classname to handle PHP errors. E.g.: t3lib_error_ErrorHandler. This class displays and logs all errors that are registered as "errorHandlerErrors" (<a href="#SYS-errorHandlerErrors">[SYS][errorHandlerErrors]</a>). Leave empty to disable error handling. Errors can be logged to syslog (see: <a href="#SYS-systemLog">[SYS][systemLog]</a>) to the installed developer log and to the "syslog" table. If an error is registered in "exceptionalErrors" ([SYS][exceptionalErrors]) it will be turned into an exception to be handled by the configured exceptionHandler.
-               'errorHandlerErrors' => E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR),               // Integer: The E_* constant that will be handled by the errorhandler. Not all PHP error types can be handled! Default is <tt>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR)</tt>.
-               'exceptionalErrors' => E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING),             // Integer: The E_* constant that will be handled as an exception by TYPO3\\CMS\\Core\\Error\\ErrorHandler. Default is <tt>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)</tt> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>).
+               'errorHandlerErrors' => E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR),               // Integer: The E_* constant that will be handled by the errorhandler. Not all PHP error types can be handled! Default is <code>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR)</code>.
+               'exceptionalErrors' => E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING),             // Integer: The E_* constant that will be handled as an exception by TYPO3\\CMS\\Core\\Error\\ErrorHandler. Default is <code>E_ALL & ~(E_STRICT | E_NOTICE | E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR | E_DEPRECATED | E_WARNING | E_USER_ERROR | E_USER_NOTICE | E_USER_WARNING)</code> (see <a href="http://php.net/manual/en/errorfunc.constants.php" target="_blank">PHP documentation</a>).
                'enable_errorDLOG' => 0,        // Boolean: If set, errors are written to the developer log (requires an installed *devlog* extension).
                'enable_exceptionDLOG' => 0,// Boolean: If set, exceptions are written to the developer log (requires an installed *devlog* extension).
                'syslogErrorReporting' => E_ALL & ~(E_STRICT | E_NOTICE),               // Integer: Configures which PHP errors should be logged to the configured syslogs (see: [SYS][systemLog]). If set to "0" no PHP errors are logged to the syslog. Default is "E_ALL & ~(E_STRICT | E_NOTICE)" (22519).
index e9f12b0..281eb51 100644 (file)
@@ -33,6 +33,20 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 class AllConfiguration extends Action\AbstractAction implements Action\ActionInterface {
 
        /**
+        * Error handlers are a bit mask in PHP. This register hints the View to
+        * add a fluid view helper resolving the bit mask to its representation
+        * as constants again for the specified items in ['SYS'].
+        *
+        * @var array
+        */
+       protected $phpErrorCodesSettings = array(
+               'errorHandlerErrors',
+               'exceptionalErrors',
+               'syslogErrorReporting',
+               'belogErrorReporting',
+       );
+
+       /**
         * Handle this action
         *
         * @return string content
@@ -93,6 +107,12 @@ class AllConfiguration extends Action\AbstractAction implements Action\ActionInt
                                                $itemData['type'] = 'input';
                                                $itemData['value'] = $value;
                                        }
+
+                                       // Check if the setting is a PHP error code, will trigger a view helper in fluid
+                                       if ($sectionName === 'SYS' && in_array($key, $this->phpErrorCodesSettings)) {
+                                               $itemData['phpErrorCode'] = TRUE;
+                                       }
+
                                        $data[$sectionName][] = $itemData;
                                }
                        }
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php
new file mode 100644 (file)
index 0000000..2ea047a
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+namespace TYPO3\CMS\Install\ViewHelpers\Format;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Wouter Wolters <typo3@wouterwolters.nl>
+ *  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.
+ *
+ *  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!
+ ***************************************************************/
+
+/**
+ * Transform PHP error code to readable text
+ */
+class PhpErrorCodeViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
+
+       /**
+        * @var array
+        */
+       protected $levelNames = array(
+               E_ERROR => 'E_ERROR',
+               E_WARNING => 'E_WARNING',
+               E_PARSE => 'E_PARSE',
+               E_NOTICE => 'E_NOTICE',
+               E_CORE_ERROR => 'E_CORE_ERROR',
+               E_CORE_WARNING => 'E_CORE_WARNING',
+               E_COMPILE_ERROR => 'E_COMPILE_ERROR',
+               E_COMPILE_WARNING => 'E_COMPILE_WARNING',
+               E_USER_ERROR => 'E_USER_ERROR',
+               E_USER_WARNING => 'E_USER_WARNING',
+               E_USER_NOTICE => 'E_USER_NOTICE',
+               E_STRICT => 'E_STRICT',
+               E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
+               E_DEPRECATED => 'E_DEPRECATED',
+               E_USER_DEPRECATED => 'E_USER_DEPRECATED',
+       );
+
+       /**
+        * Render a readable string for PHP error code
+        *
+        * @param integer $phpErrorCode
+        * @return string
+        */
+       public function render($phpErrorCode) {
+               $levels = array();
+               if (($phpErrorCode & E_ALL) == E_ALL) {
+                       $levels[] = 'E_ALL';
+                       $phpErrorCode &= ~E_ALL;
+               }
+               foreach ($this->levelNames as $level => $name) {
+                       if (($phpErrorCode & $level) == $level) {
+                               $levels[] = $name;
+                       }
+               }
+
+               $output = '';
+               if (!empty($levels)) {
+                       $output = implode(' | ', $levels);
+               }
+
+               return $output;
+       }
+
+}
+?>
\ No newline at end of file
index d82195e..d7905eb 100644 (file)
                                                        class="t3-install-form-input-text"
                                                />
                                        </f:if>
+
+                                       <f:if condition="{item.phpErrorCode}">
+                                               <div class="fieldNote">
+                                                       Current PHP error code <strong>{item.value}</strong> represents:<br/>
+                                                       <code><i:format.phpErrorCode phpErrorCode="{item.value}" /></code>
+                                               </div>
+                                       </f:if>
                                </div>
                        </div>
                        <p></p>
index d6ccd20..b401102 100644 (file)
@@ -439,6 +439,11 @@ button span.t3-install-form-button-icon-negative {
     background-image: url('../../../Images/Icon/arrowdown.png');
 }
 
+#t3-install-box-body .fieldNote {
+       font-style: italic;
+       margin-top: 0.5em;
+}
+
 .t3-install-tool-configuration-radio {
        float: none;
 }
diff --git a/typo3/sysext/install/Tests/Unit/ViewHelpers/Format/PhpErrorCodeViewHelperTest.php b/typo3/sysext/install/Tests/Unit/ViewHelpers/Format/PhpErrorCodeViewHelperTest.php
new file mode 100644 (file)
index 0000000..a6e66cc
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+namespace TYPO3\CMS\Install\Tests\Unit\ViewHelpers\Format;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2013 Ernesto Baschny <ernst@cron-it.de>
+ *  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!
+ ***************************************************************/
+
+/**
+ * Test case
+ */
+class PhpErrorCodeViewHelperTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
+
+       /**
+        * @var \TYPO3\CMS\Fluid\ViewHelpers\Format\NumberViewHelper
+        */
+       protected $viewHelper;
+
+       /**
+        * Setup the test case scenario
+        */
+       public function setUp() {
+               $this->viewHelper = $this->getMock('TYPO3\CMS\Install\ViewHelpers\Format\PhpErrorCodeViewHelper', array('dummy'));
+       }
+
+       /**
+        * @return array
+        */
+       public function errorCodesDataProvider() {
+               return array(
+                       array(
+                               'errorCode' => E_ERROR,
+                               'expectedString' => 'E_ERROR',
+                       ),
+                       array(
+                               'errorCode' => E_ALL,
+                               'expectedString' => 'E_ALL',
+                       ),
+                       array(
+                               'errorCode' => E_ERROR ^ E_WARNING ^ E_PARSE,
+                               'expectedString' => 'E_ERROR | E_WARNING | E_PARSE',
+                       ),
+                       array(
+                               'errorCode' => E_RECOVERABLE_ERROR ^ E_USER_DEPRECATED,
+                               'expectedString' => 'E_RECOVERABLE_ERROR | E_USER_DEPRECATED',
+                       )
+               );
+       }
+
+       /**
+        * @param $errorCode
+        * @param $expectedString
+        * @test
+        * @dataProvider errorCodesDataProvider
+        */
+       public function renderPhpCodesCorrectly($errorCode, $expectedString) {
+               $actualString = $this->viewHelper->render($errorCode);
+               $this->assertEquals($expectedString, $actualString);
+       }
+
+}
+?>
\ No newline at end of file