]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/installer/WebInstallerExistingWiki.php
MediaWiki 1.30.2-scripts2
[autoinstallsdev/mediawiki.git] / includes / installer / WebInstallerExistingWiki.php
1 <?php
2 /**
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16  * http://www.gnu.org/copyleft/gpl.html
17  *
18  * @file
19  * @ingroup Deployment
20  */
21
22 class WebInstallerExistingWiki extends WebInstallerPage {
23
24         /**
25          * @return string
26          */
27         public function execute() {
28                 // If there is no LocalSettings.php, continue to the installer welcome page
29                 $vars = Installer::getExistingLocalSettings();
30                 if ( !$vars ) {
31                         return 'skip';
32                 }
33
34                 // Check if the upgrade key supplied to the user has appeared in LocalSettings.php
35                 if ( $vars['wgUpgradeKey'] !== false
36                         && $this->getVar( '_UpgradeKeySupplied' )
37                         && $this->getVar( 'wgUpgradeKey' ) === $vars['wgUpgradeKey']
38                 ) {
39                         // It's there, so the user is authorized
40                         $status = $this->handleExistingUpgrade( $vars );
41                         if ( $status->isOK() ) {
42                                 return 'skip';
43                         } else {
44                                 $this->startForm();
45                                 $this->parent->showStatusBox( $status );
46                                 $this->endForm( 'continue' );
47
48                                 return 'output';
49                         }
50                 }
51
52                 // If there is no $wgUpgradeKey, tell the user to add one to LocalSettings.php
53                 if ( $vars['wgUpgradeKey'] === false ) {
54                         if ( $this->getVar( 'wgUpgradeKey', false ) === false ) {
55                                 $secretKey = $this->getVar( 'wgSecretKey' ); // preserve $wgSecretKey
56                                 $this->parent->generateKeys();
57                                 $this->setVar( 'wgSecretKey', $secretKey );
58                                 $this->setVar( '_UpgradeKeySupplied', true );
59                         }
60                         $this->startForm();
61                         $this->addHTML( $this->parent->getInfoBox(
62                                 wfMessage( 'config-upgrade-key-missing', "<pre dir=\"ltr\">\$wgUpgradeKey = '" .
63                                         $this->getVar( 'wgUpgradeKey' ) . "';</pre>" )->plain()
64                         ) );
65                         $this->endForm( 'continue' );
66
67                         return 'output';
68                 }
69
70                 // If there is an upgrade key, but it wasn't supplied, prompt the user to enter it
71
72                 $r = $this->parent->request;
73                 if ( $r->wasPosted() ) {
74                         $key = $r->getText( 'config_wgUpgradeKey' );
75                         if ( !$key || $key !== $vars['wgUpgradeKey'] ) {
76                                 $this->parent->showError( 'config-localsettings-badkey' );
77                                 $this->showKeyForm();
78
79                                 return 'output';
80                         }
81                         // Key was OK
82                         $status = $this->handleExistingUpgrade( $vars );
83                         if ( $status->isOK() ) {
84                                 return 'continue';
85                         } else {
86                                 $this->parent->showStatusBox( $status );
87                                 $this->showKeyForm();
88
89                                 return 'output';
90                         }
91                 } else {
92                         $this->showKeyForm();
93
94                         return 'output';
95                 }
96         }
97
98         /**
99          * Show the "enter key" form
100          */
101         protected function showKeyForm() {
102                 $this->startForm();
103                 $this->addHTML(
104                         $this->parent->getInfoBox( wfMessage( 'config-localsettings-upgrade' )->plain() ) .
105                         '<br />' .
106                         $this->parent->getTextBox( [
107                                 'var' => 'wgUpgradeKey',
108                                 'label' => 'config-localsettings-key',
109                                 'attribs' => [ 'autocomplete' => 'off' ],
110                         ] )
111                 );
112                 $this->endForm( 'continue' );
113         }
114
115         /**
116          * @param string[] $names
117          * @param mixed[] $vars
118          *
119          * @return Status
120          */
121         protected function importVariables( $names, $vars ) {
122                 $status = Status::newGood();
123                 foreach ( $names as $name ) {
124                         if ( !isset( $vars[$name] ) ) {
125                                 $status->fatal( 'config-localsettings-incomplete', $name );
126                         }
127                         $this->setVar( $name, $vars[$name] );
128                 }
129
130                 return $status;
131         }
132
133         /**
134          * Initiate an upgrade of the existing database
135          *
136          * @param mixed[] $vars Variables from LocalSettings.php
137          *
138          * @return Status
139          */
140         protected function handleExistingUpgrade( $vars ) {
141                 // Check $wgDBtype
142                 if ( !isset( $vars['wgDBtype'] ) ||
143                         !in_array( $vars['wgDBtype'], Installer::getDBTypes() )
144                 ) {
145                         return Status::newFatal( 'config-localsettings-connection-error', '' );
146                 }
147
148                 // Set the relevant variables from LocalSettings.php
149                 $requiredVars = [ 'wgDBtype' ];
150                 $status = $this->importVariables( $requiredVars, $vars );
151                 $installer = $this->parent->getDBInstaller();
152                 $status->merge( $this->importVariables( $installer->getGlobalNames(), $vars ) );
153                 if ( !$status->isOK() ) {
154                         return $status;
155                 }
156
157                 if ( isset( $vars['wgDBadminuser'] ) ) {
158                         $this->setVar( '_InstallUser', $vars['wgDBadminuser'] );
159                 } else {
160                         $this->setVar( '_InstallUser', $vars['wgDBuser'] );
161                 }
162                 if ( isset( $vars['wgDBadminpassword'] ) ) {
163                         $this->setVar( '_InstallPassword', $vars['wgDBadminpassword'] );
164                 } else {
165                         $this->setVar( '_InstallPassword', $vars['wgDBpassword'] );
166                 }
167
168                 // Test the database connection
169                 $status = $installer->getConnection();
170                 if ( !$status->isOK() ) {
171                         // Adjust the error message to explain things correctly
172                         $status->replaceMessage( 'config-connection-error',
173                                 'config-localsettings-connection-error' );
174
175                         return $status;
176                 }
177
178                 // All good
179                 $this->setVar( '_ExistingDBSettings', true );
180
181                 // Copy $wgAuthenticationTokenVersion too, if it exists
182                 $this->setVar( 'wgAuthenticationTokenVersion',
183                         isset( $vars['wgAuthenticationTokenVersion'] )
184                                 ? $vars['wgAuthenticationTokenVersion']
185                                 : null
186                 );
187
188                 return $status;
189         }
190
191 }