WebInstallerDBConnect   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 9

Importance

Changes 0
Metric Value
dl 0
loc 100
rs 10
c 0
b 0
f 0
wmc 10
lcom 1
cbo 9

2 Methods

Rating   Name   Duplication   Size   Complexity  
C execute() 0 75 7
A submit() 0 14 3
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 WebInstallerDBConnect extends WebInstallerPage {
23
24
	/**
25
	 * @return string|null When string, "skip" or "continue"
26
	 */
27
	public function execute() {
28
		if ( $this->getVar( '_ExistingDBSettings' ) ) {
29
			return 'skip';
30
		}
31
32
		$r = $this->parent->request;
33
		if ( $r->wasPosted() ) {
34
			$status = $this->submit();
35
36
			if ( $status->isGood() ) {
37
				$this->setVar( '_UpgradeDone', false );
38
39
				return 'continue';
40
			} else {
41
				$this->parent->showStatusBox( $status );
42
			}
43
		}
44
45
		$this->startForm();
46
47
		$types = "<ul class=\"config-settings-block\">\n";
48
		$settings = '';
49
		$defaultType = $this->getVar( 'wgDBtype' );
50
51
		// Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-oracle,
52
		// config-dbsupport-sqlite, config-dbsupport-mssql
53
		$dbSupport = '';
54
		foreach ( Installer::getDBTypes() as $type ) {
55
			$dbSupport .= wfMessage( "config-dbsupport-$type" )->plain() . "\n";
56
		}
57
		$this->addHTML( $this->parent->getInfoBox(
58
			wfMessage( 'config-support-info', trim( $dbSupport ) )->text() ) );
59
60
		// It's possible that the library for the default DB type is not compiled in.
61
		// In that case, instead select the first supported DB type in the list.
62
		$compiledDBs = $this->parent->getCompiledDBs();
63
		if ( !in_array( $defaultType, $compiledDBs ) ) {
64
			$defaultType = $compiledDBs[0];
65
		}
66
67
		foreach ( $compiledDBs as $type ) {
68
			$installer = $this->parent->getDBInstaller( $type );
69
			$types .=
70
				'<li>' .
71
				Xml::radioLabel(
72
					$installer->getReadableName(),
73
					'DBType',
74
					$type,
75
					"DBType_$type",
76
					$type == $defaultType,
77
					[ 'class' => 'dbRadio', 'rel' => "DB_wrapper_$type" ]
78
				) .
79
				"</li>\n";
80
81
			// Messages: config-header-mysql, config-header-postgres, config-header-oracle,
82
			// config-header-sqlite
83
			$settings .= Html::openElement(
84
					'div',
85
					[
86
						'id' => 'DB_wrapper_' . $type,
87
						'class' => 'dbWrapper'
88
					]
89
				) .
90
				Html::element( 'h3', [], wfMessage( 'config-header-' . $type )->text() ) .
91
				$installer->getConnectForm() .
92
				"</div>\n";
93
		}
94
95
		$types .= "</ul><br style=\"clear: left\"/>\n";
96
97
		$this->addHTML( $this->parent->label( 'config-db-type', false, $types ) . $settings );
98
		$this->endForm();
99
100
		return null;
101
	}
102
103
	/**
104
	 * @return Status
105
	 */
106
	public function submit() {
107
		$r = $this->parent->request;
108
		$type = $r->getVal( 'DBType' );
109
		if ( !$type ) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $type of type null|string is loosely compared to false; this is ambiguous if the string can be empty. You might want to explicitly use === null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
110
			return Status::newFatal( 'config-invalid-db-type' );
111
		}
112
		$this->setVar( 'wgDBtype', $type );
113
		$installer = $this->parent->getDBInstaller( $type );
114
		if ( !$installer ) {
115
			return Status::newFatal( 'config-invalid-db-type' );
116
		}
117
118
		return $installer->submitConnectForm();
119
	}
120
121
}
122