DatabaseInstaller had some LSP violations, such as calling undeclared methods of the supplied Installer object, assuming that it was a WebInstaller. It was also large. So, split the web form parts of DatabaseInstaller into separate classes. We have a class hierarchy for the connect forms, and a class hierarchy for the settings forms, with a base class DatabaseForm mostly as a place to put protected helper methods. Also, have DatabaseInstaller::getConnection() return a special subclass of Status, so that we can remove many Phan type overrides. Change-Id: Ie84025f8f70b895fa6882848b9a21ba1750d60e2
152 lines
3.8 KiB
PHP
152 lines
3.8 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Installer;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
abstract class DatabaseForm {
|
|
protected WebInstaller $webInstaller;
|
|
protected DatabaseInstaller $dbInstaller;
|
|
|
|
public function __construct( WebInstaller $webInstaller, DatabaseInstaller $dbInstaller ) {
|
|
$this->webInstaller = $webInstaller;
|
|
$this->dbInstaller = $dbInstaller;
|
|
}
|
|
|
|
/**
|
|
* Get a variable, taking local defaults into account.
|
|
* @param string $var
|
|
* @param mixed|null $default
|
|
* @return mixed
|
|
*/
|
|
protected function getVar( $var, $default = null ) {
|
|
return $this->dbInstaller->getVar( $var, $default );
|
|
}
|
|
|
|
/**
|
|
* Set a variable
|
|
* @param string $name
|
|
* @param mixed $value
|
|
*/
|
|
protected function setVar( $name, $value ) {
|
|
$this->dbInstaller->setVar( $name, $value );
|
|
}
|
|
|
|
/**
|
|
* Return the internal name, e.g. 'mysql', or 'sqlite'.
|
|
* @return string
|
|
*/
|
|
protected function getName() {
|
|
return $this->dbInstaller->getName();
|
|
}
|
|
|
|
/**
|
|
* Get a labelled text box to configure a local variable.
|
|
*
|
|
* @param string $var
|
|
* @param string $label
|
|
* @param array $attribs
|
|
* @param string $helpData HTML
|
|
* @return string HTML
|
|
* @return-taint escaped
|
|
*/
|
|
protected function getTextBox( $var, $label, $attribs = [], $helpData = "" ) {
|
|
$name = $this->getName() . '_' . $var;
|
|
$value = $this->getVar( $var );
|
|
if ( !isset( $attribs ) ) {
|
|
$attribs = [];
|
|
}
|
|
|
|
return $this->webInstaller->getTextBox( [
|
|
'var' => $var,
|
|
'label' => $label,
|
|
'attribs' => $attribs,
|
|
'controlName' => $name,
|
|
'value' => $value,
|
|
'help' => $helpData
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Get a labelled password box to configure a local variable.
|
|
* Implements password hiding.
|
|
*
|
|
* @param string $var
|
|
* @param string $label
|
|
* @param array $attribs
|
|
* @param string $helpData HTML
|
|
* @return string HTML
|
|
* @return-taint escaped
|
|
*/
|
|
protected function getPasswordBox( $var, $label, $attribs = [], $helpData = "" ) {
|
|
$name = $this->getName() . '_' . $var;
|
|
$value = $this->getVar( $var );
|
|
if ( !isset( $attribs ) ) {
|
|
$attribs = [];
|
|
}
|
|
|
|
return $this->webInstaller->getPasswordBox( [
|
|
'var' => $var,
|
|
'label' => $label,
|
|
'attribs' => $attribs,
|
|
'controlName' => $name,
|
|
'value' => $value,
|
|
'help' => $helpData
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Get a labelled checkbox to configure a local boolean variable.
|
|
*
|
|
* @param string $var
|
|
* @param string $label
|
|
* @param array $attribs Optional.
|
|
* @param string $helpData Optional.
|
|
* @return string
|
|
*/
|
|
protected function getCheckBox( $var, $label, $attribs = [], $helpData = "" ) {
|
|
$name = $this->getName() . '_' . $var;
|
|
$value = $this->getVar( $var );
|
|
|
|
return $this->webInstaller->getCheckBox( [
|
|
'var' => $var,
|
|
'label' => $label,
|
|
'attribs' => $attribs,
|
|
'controlName' => $name,
|
|
'value' => $value,
|
|
'help' => $helpData
|
|
] );
|
|
}
|
|
|
|
/**
|
|
* Get a set of labelled radio buttons.
|
|
*
|
|
* @param array $params Parameters are:
|
|
* var: The variable to be configured (required)
|
|
* label: The message name for the label (required)
|
|
* itemLabelPrefix: The message name prefix for the item labels (required)
|
|
* values: List of allowed values (required)
|
|
* itemAttribs Array of attribute arrays, outer key is the value name (optional)
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function getRadioSet( $params ) {
|
|
$params['controlName'] = $this->getName() . '_' . $params['var'];
|
|
$params['value'] = $this->getVar( $params['var'] );
|
|
|
|
return $this->webInstaller->getRadioSet( $params );
|
|
}
|
|
|
|
/**
|
|
* Convenience function to set variables based on form data.
|
|
* Assumes that variables containing "password" in the name are (potentially
|
|
* fake) passwords.
|
|
* @param array $varNames
|
|
* @return array
|
|
*/
|
|
protected function setVarsFromRequest( $varNames ) {
|
|
return $this->webInstaller->setVarsFromRequest( $varNames, $this->getName() . '_' );
|
|
}
|
|
|
|
}
|