PHPVersionCheck: Remove obsolete load.php code and simplify
authorTimo Tijhof <krinklemail@gmail.com>
Sun, 28 Oct 2018 21:12:54 +0000 (14:12 -0700)
committerTimo Tijhof <krinklemail@gmail.com>
Sun, 28 Oct 2018 21:12:54 +0000 (14:12 -0700)
* Remove obsolete handling for 'load.php', which no longer
  uses this check. This hasn't been used for several releases.

* Remove the 'entryPoint' parameter in favour of 'format',
  which it was already a proxy for.

* Move the double dirname() logic to mw-config/index.php.

Bug: T189966
Change-Id: I343216442475d36e61213900f196ab6ec5f6b747

includes/PHPVersionCheck.php
index.php
maintenance/Maintenance.php
mw-config/index.php

index aee2a0c..8406bfb 100644 (file)
  * Check PHP Version, as well as for composer dependencies in entry points,
  * and display something vaguely comprehensible in the event of a totally
  * unrecoverable error.
+ *
+ * @note Since we can't rely on anything external, the minimum PHP versions
+ * and MW current version are hardcoded in this class.
+ *
+ * @note This class uses setter methods instead of a constructor so that
+ * it can be compatible with PHP 4, PHP 5 and PHP 7 (without warnings).
+ *
  * @class
  */
 class PHPVersionCheck {
@@ -41,29 +48,35 @@ class PHPVersionCheck {
        );
 
        /**
-        * @var string Which entry point we are protecting. One of:
-        *   - index.php
-        *   - load.php
-        *   - api.php
-        *   - mw-config/index.php
-        *   - cli
+        * @var string $format The format used for errors. One of "text" or "html"
+        */
+       var $format = 'text';
+
+       /**
+        * @var string $scriptPath
         */
-       var $entryPoint = null;
+       var $scriptPath = '/';
 
        /**
-        * @param string $entryPoint Which entry point we are protecting. One of:
-        *   - index.php
-        *   - load.php
-        *   - api.php
-        *   - mw-config/index.php
-        *   - cli
+        * Set the format used for errors.
+        *
+        * @param string $format One of "text" or "html"
         */
-       function setEntryPoint( $entryPoint ) {
-               $this->entryPoint = $entryPoint;
+       function setFormat( $format ) {
+               $this->format = $format;
        }
 
        /**
-        * Returns the version of the installed PHP implementation.
+        * Set the script path used for images in HTML-formatted errors.
+        *
+        * @param string $scriptPath
+        */
+       function setScriptPath( $scriptPath ) {
+               $this->scriptPath = $scriptPath;
+       }
+
+       /**
+        * Return the version of the installed PHP implementation.
         *
         * @param string $impl By default, the function returns the info of the currently installed PHP
         *  implementation. Using this parameter the caller can decide, what version info will be
@@ -236,14 +249,8 @@ HTML;
         * @return string
         */
        function getIndexErrorOutput( $title, $longHtml, $shortText ) {
-               $pathinfo = pathinfo( $_SERVER['SCRIPT_NAME'] );
-               if ( $this->entryPoint == 'mw-config/index.php' ) {
-                       $dirname = dirname( $pathinfo['dirname'] );
-               } else {
-                       $dirname = $pathinfo['dirname'];
-               }
                $encLogo =
-                       htmlspecialchars( str_replace( '//', '/', $dirname . '/' ) .
+                       htmlspecialchars( str_replace( '//', '/', $this->scriptPath . '/' ) .
                                'resources/assets/mediawiki.png' );
                $shortHtml = htmlspecialchars( $shortText );
 
@@ -308,23 +315,13 @@ HTML;
         * @param string $longHtml
         */
        function triggerError( $title, $shortText, $longText, $longHtml ) {
-               switch ( $this->entryPoint ) {
-                       case 'cli':
-                               $finalOutput = $longText;
-                               break;
-                       case 'index.php':
-                       case 'mw-config/index.php':
-                               $this->outputHTMLHeader();
-                               $finalOutput = $this->getIndexErrorOutput( $title, $longHtml, $shortText );
-                               break;
-                       case 'load.php':
-                               $this->outputHTMLHeader();
-                               $finalOutput = "/* $shortText */";
-                               break;
-                       default:
-                               $this->outputHTMLHeader();
-                               // Handle everything that's not index.php
-                               $finalOutput = $shortText;
+               if ( $this->format === 'html' ) {
+                       // Used by index.php and mw-config/index.php
+                       $this->outputHTMLHeader();
+                       $finalOutput = $this->getIndexErrorOutput( $title, $longHtml, $shortText );
+               } else {
+                       // Used by Maintenance.php (CLI)
+                       $finalOutput = $longText;
                }
 
                echo "$finalOutput\n";
@@ -336,12 +333,13 @@ HTML;
  * Check PHP version and that external dependencies are installed, and
  * display an informative error if either condition is not satisfied.
  *
- * @note Since we can't rely on anything, the minimum PHP versions and MW current
- * version are hardcoded here.
+ * @param string $format One of "text" or "html"
+ * @param string $scriptPath Used when an error is formatted as HTML.
  */
-function wfEntryPointCheck( $entryPoint ) {
+function wfEntryPointCheck( $format = 'text', $scriptPath = '/' ) {
        $phpVersionCheck = new PHPVersionCheck();
-       $phpVersionCheck->setEntryPoint( $entryPoint );
+       $phpVersionCheck->setFormat( $format );
+       $phpVersionCheck->setScriptPath( $scriptPath );
        $phpVersionCheck->checkRequiredPHPVersion();
        $phpVersionCheck->checkVendorExistence();
        $phpVersionCheck->checkExtensionExistence();
index 791ffb1..0df4cd0 100644 (file)
--- a/index.php
+++ b/index.php
@@ -34,7 +34,7 @@
 // dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
 // phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound
 require_once dirname( __FILE__ ) . '/includes/PHPVersionCheck.php';
-wfEntryPointCheck( 'index.php' );
+wfEntryPointCheck( 'html', dirname( $_SERVER['SCRIPT_NAME'] ) );
 
 require __DIR__ . '/includes/WebStart.php';
 
index 6219476..04c4f53 100644 (file)
@@ -23,7 +23,7 @@
 // Bail on old versions of PHP, or if composer has not been run yet to install
 // dependencies.
 require_once __DIR__ . '/../includes/PHPVersionCheck.php';
-wfEntryPointCheck( 'cli' );
+wfEntryPointCheck( 'text' );
 
 use MediaWiki\Shell\Shell;
 
index a47822b..804d0a1 100644 (file)
@@ -25,7 +25,7 @@
 // dependencies. Using dirname( __FILE__ ) here because __DIR__ is PHP5.3+.
 // phpcs:ignore MediaWiki.Usage.DirUsage.FunctionFound
 require_once dirname( __FILE__ ) . '/../includes/PHPVersionCheck.php';
-wfEntryPointCheck( 'mw-config/index.php' );
+wfEntryPointCheck( 'html', dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) );
 
 define( 'MW_CONFIG_CALLBACK', 'Installer::overrideConfig' );
 define( 'MEDIAWIKI_INSTALL', true );