MediaWiki  master
WebInstallerExistingWiki.php
Go to the documentation of this file.
1 <?php
23 
27  public function execute() {
28  // If there is no LocalSettings.php, continue to the installer welcome page
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 
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 
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 
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  $this->setVar( '_InstallUser', $vars['wgDBadminuser'] ?? $vars['wgDBuser'] );
158  $this->setVar( '_InstallPassword', $vars['wgDBadminpassword'] ?? $vars['wgDBpassword'] );
159 
160  // Test the database connection
161  $status = $installer->getConnection();
162  if ( !$status->isOK() ) {
163  // Adjust the error message to explain things correctly
164  $status->replaceMessage( 'config-connection-error',
165  'config-localsettings-connection-error' );
166 
167  return $status;
168  }
169 
170  // All good
171  $this->setVar( '_ExistingDBSettings', true );
172 
173  // Copy $wgAuthenticationTokenVersion too, if it exists
174  $this->setVar( 'wgAuthenticationTokenVersion',
175  $vars['wgAuthenticationTokenVersion'] ?? null
176  );
177 
178  return $status;
179  }
180 
181 }
Abstract class to define pages for the web installer.
static newFatal( $message,... $parameters)
Factory function for fatal errors.
Definition: StatusValue.php:69
setVar( $name, $value)
handleExistingUpgrade( $vars)
Initiate an upgrade of the existing database.
static newGood( $value=null)
Factory function for good results.
Definition: StatusValue.php:81
static getExistingLocalSettings()
Determine if LocalSettings.php exists.
Definition: Installer.php:589
showKeyForm()
Show the "enter key" form.
getVar( $var, $default=null)
endForm( $continue='continue', $back='back')
static getDBTypes()
Get a list of known DB types.
Definition: Installer.php:470
wfMessage( $key,... $params)
This is the function for getting translated interface messages.