]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/installer/CliInstaller.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / installer / CliInstaller.php
index 9e8fb2c5a83b4cbdb12a02f06097f17777436a78..715f5dff1f7dabb2e3d9d60e0e6122133dfb6348 100644 (file)
@@ -2,6 +2,21 @@
 /**
  * Core installer command line interface.
  *
+ * This program 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.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
  * @file
  * @ingroup Deployment
  */
@@ -13,8 +28,9 @@
  * @since 1.17
  */
 class CliInstaller extends Installer {
+       private $specifiedScriptPath = false;
 
-       private $optionMap = array(
+       private $optionMap = [
                'dbtype' => 'wgDBtype',
                'dbserver' => 'wgDBserver',
                'dbname' => 'wgDBname',
@@ -23,28 +39,27 @@ class CliInstaller extends Installer {
                'dbprefix' => 'wgDBprefix',
                'dbtableoptions' => 'wgDBTableOptions',
                'dbmysql5' => 'wgDBmysql5',
-               'dbserver' => 'wgDBserver',
                'dbport' => 'wgDBport',
-               'dbname' => 'wgDBname',
-               'dbuser' => 'wgDBuser',
-               'dbpass' => 'wgDBpassword',
                'dbschema' => 'wgDBmwschema',
                'dbpath' => 'wgSQLiteDataDir',
+               'server' => 'wgServer',
                'scriptpath' => 'wgScriptPath',
-       );
+       ];
 
        /**
-        * Constructor.
-        *
-        * @param $siteName
-        * @param $admin
-        * @param $option Array
+        * @param string $siteName
+        * @param string $admin
+        * @param array $option
         */
-       function __construct( $siteName, $admin = null, array $option = array() ) {
+       function __construct( $siteName, $admin = null, array $option = [] ) {
                global $wgContLang;
 
                parent::__construct();
 
+               if ( isset( $option['scriptpath'] ) ) {
+                       $this->specifiedScriptPath = true;
+               }
+
                foreach ( $this->optionMap as $opt => $global ) {
                        if ( isset( $option[$opt] ) ) {
                                $GLOBALS[$global] = $option[$opt];
@@ -58,6 +73,7 @@ class CliInstaller extends Installer {
                        $wgContLang = Language::factory( $option['lang'] );
                        $wgLang = Language::factory( $option['lang'] );
                        $wgLanguageCode = $option['lang'];
+                       RequestContext::getMain()->setLanguage( $wgLang );
                }
 
                $this->setVar( 'wgSitename', $siteName );
@@ -81,12 +97,29 @@ class CliInstaller extends Installer {
                        $this->setVar( '_InstallUser',
                                $option['installdbuser'] );
                        $this->setVar( '_InstallPassword',
-                               $option['installdbpass'] );
+                               isset( $option['installdbpass'] ) ? $option['installdbpass'] : "" );
+
+                       // Assume that if we're given the installer user, we'll create the account.
+                       $this->setVar( '_CreateDBAccount', true );
                }
 
                if ( isset( $option['pass'] ) ) {
                        $this->setVar( '_AdminPassword', $option['pass'] );
                }
+
+               // Detect and inject any extension found
+               if ( isset( $option['with-extensions'] ) ) {
+                       $this->setVar( '_Extensions', array_keys( $this->findExtensions() ) );
+               }
+
+               // Set up the default skins
+               $skins = array_keys( $this->findExtensions( 'skins' ) );
+               $this->setVar( '_Skins', $skins );
+
+               if ( $skins ) {
+                       $skinNames = array_map( 'strtolower', $skins );
+                       $this->setVar( 'wgDefaultSkin', $this->getDefaultSkin( $skinNames ) );
+               }
        }
 
        /**
@@ -94,29 +127,32 @@ class CliInstaller extends Installer {
         */
        public function execute() {
                $vars = Installer::getExistingLocalSettings();
-               if( $vars ) {
+               if ( $vars ) {
                        $this->showStatusMessage(
                                Status::newFatal( "config-localsettings-cli-upgrade" )
                        );
                }
 
                $this->performInstallation(
-                       array( $this, 'startStage' ),
-                       array( $this, 'endStage' )
+                       [ $this, 'startStage' ],
+                       [ $this, 'endStage' ]
                );
        }
 
        /**
         * Write LocalSettings.php to a given path
         *
-        * @param $path String Full path to write LocalSettings.php to
+        * @param string $path Full path to write LocalSettings.php to
         */
        public function writeConfigurationFile( $path ) {
-               $ls = new LocalSettingsGenerator( $this );
+               $ls = InstallerOverrides::getLocalSettingsGenerator( $this );
                $ls->writeFile( "$path/LocalSettings.php" );
        }
 
        public function startStage( $step ) {
+               // Messages: config-install-database, config-install-tables, config-install-interwiki,
+               // config-install-stats, config-install-keys, config-install-sysop, config-install-mainpage,
+               // config-install-extensions
                $this->showMessage( "config-install-$step" );
        }
 
@@ -136,15 +172,18 @@ class CliInstaller extends Installer {
        }
 
        /**
+        * @param array $params
+        *
         * @return string
         */
        protected function getMessageText( $params ) {
                $msg = array_shift( $params );
 
-               $text = wfMsgExt( $msg, array( 'parseinline' ), $params );
+               $text = wfMessage( $msg, $params )->parse();
 
                $text = preg_replace( '/<a href="(.*?)".*?>(.*?)<\/a>/', '$2 &lt;$1&gt;', $text );
-               return html_entity_decode( strip_tags( $text ), ENT_QUOTES );
+
+               return Sanitizer::stripAllTags( $text );
        }
 
        /**
@@ -159,13 +198,31 @@ class CliInstaller extends Installer {
 
                if ( count( $warnings ) !== 0 ) {
                        foreach ( $warnings as $w ) {
-                               call_user_func_array( array( $this, 'showMessage' ), $w );
+                               call_user_func_array( [ $this, 'showMessage' ], $w );
                        }
                }
 
-               if ( !$status->isOk() ) {
+               if ( !$status->isOK() ) {
                        echo "\n";
-                       exit;
+                       exit( 1 );
+               }
+       }
+
+       public function envCheckPath() {
+               if ( !$this->specifiedScriptPath ) {
+                       $this->showMessage( 'config-no-cli-uri', $this->getVar( "wgScriptPath" ) );
                }
+
+               return parent::envCheckPath();
+       }
+
+       protected function envGetDefaultServer() {
+               return null; // Do not guess if installing from CLI
+       }
+
+       public function dirIsExecutable( $dir, $url ) {
+               $this->showMessage( 'config-no-cli-uploads-check', $dir );
+
+               return false;
        }
 }