From 35df568ce45479984c5a5fc55d0e3087d293d6bc Mon Sep 17 00:00:00 2001 From: Kevin Israel Date: Mon, 22 Apr 2013 23:15:39 -0400 Subject: [PATCH] Web installer: always autoselect some DB type If the PHP mysql extension were not available, none of the DB type radio buttons would be selected, and if the form were submitted without selecting any of them, a PHP fatal error would occur because of a lack of input validation. So have the installer autoselect a DB type other than mysql if necessary, and add a simple check to prevent a fatal error if all radio buttons nevertheless end up deselected for some unknown reason. Bug: 47489 Change-Id: Ic456899028c054a761d172df8ec32f6a26dc5b97 --- RELEASE-NOTES-1.21 | 2 ++ includes/installer/WebInstallerPage.php | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/RELEASE-NOTES-1.21 b/RELEASE-NOTES-1.21 index 6c68d820a3..5adf80e1fb 100644 --- a/RELEASE-NOTES-1.21 +++ b/RELEASE-NOTES-1.21 @@ -209,6 +209,8 @@ production. * (bug 45143) jquery.badge: Treat non-Latin variants of zero as zero as well. * (bug 46151) mwdocgen.php should not ignore exit code of doxygen command. * (bug 41889) Fix $.tablesorter rowspan exploding for complex cases. +* (bug 47489) Installer now automatically selects the next-best database type if + the PHP mysql extension is not loaded, preventing fatal errors in some cases. === API changes in 1.21 === * prop=revisions can now report the contentmodel and contentformat. diff --git a/includes/installer/WebInstallerPage.php b/includes/installer/WebInstallerPage.php index b640fb882b..382288c801 100644 --- a/includes/installer/WebInstallerPage.php +++ b/includes/installer/WebInstallerPage.php @@ -467,7 +467,14 @@ class WebInstaller_DBConnect extends WebInstallerPage { $this->addHTML( $this->parent->getInfoBox( wfMessage( 'config-support-info', trim( $dbSupport ) )->text() ) ); - foreach ( $this->parent->getVar( '_CompiledDBs' ) as $type ) { + // It's possible that the library for the default DB type is not compiled in. + // In that case, instead select the first supported DB type in the list. + $compiledDBs = $this->parent->getVar( '_CompiledDBs' ); + if ( !in_array( $defaultType, $compiledDBs ) ) { + $defaultType = $compiledDBs[0]; + } + + foreach ( $compiledDBs as $type ) { $installer = $this->parent->getDBInstaller( $type ); $types .= '
  • ' . @@ -503,6 +510,9 @@ class WebInstaller_DBConnect extends WebInstallerPage { public function submit() { $r = $this->parent->request; $type = $r->getVal( 'DBType' ); + if ( !$type ) { + return Status::newFatal( 'config-invalid-db-type' ); + } $this->setVar( 'wgDBtype', $type ); $installer = $this->parent->getDBInstaller( $type ); if ( !$installer ) { -- 2.20.1