2 namespace TYPO3\CMS\Install\Controller\Action\Step;
40 $localConfigurationPathValuePairs = array();
42 $configurationManager = $this->objectManager->get(\TYPO3\CMS\Core\Configuration\ConfigurationManager::class);
46 $createDatabaseResult = $this->databaseConnection->admin_query(
'CREATE DATABASE ' . $newDatabaseName .
' CHARACTER SET utf8');
47 if ($createDatabaseResult) {
48 $localConfigurationPathValuePairs[
'DB/database'] = $newDatabaseName;
51 $errorStatus = $this->objectManager->get(\TYPO3\CMS\Install\Status\ErrorStatus::class);
52 $errorStatus->setTitle(
'Unable to create database');
53 $errorStatus->setMessage(
54 'Database with name ' . $newDatabaseName .
' could not be created.' .
55 ' Either your database name contains a reserved keyword or your database' .
56 ' user does not have sufficient permissions to create it.' .
57 ' Please choose an existing (empty) database or contact administration.'
59 $result[] = $errorStatus;
63 $errorStatus = $this->objectManager->get(\TYPO3\CMS\Install\Status\ErrorStatus::class);
64 $errorStatus->setTitle(
'Database name not valid');
65 $errorStatus->setMessage(
66 'Given database name must be shorter than fifty characters' .
67 ' and consist solely of basic latin letters (a-z), digits (0-9), dollar signs ($)' .
68 ' and underscores (_).'
70 $result[] = $errorStatus;
74 $this->databaseConnection->setDatabaseName(
$postValues[
'existing']);
75 $this->databaseConnection->sql_select_db();
76 $existingTables = $this->databaseConnection->admin_get_tables();
77 $isInitialInstallation = $configurationManager->getConfigurationValueByPath(
'SYS/isInitialInstallationInProgress');
78 if (!$isInitialInstallation || empty($existingTables)) {
79 $localConfigurationPathValuePairs[
'DB/database'] =
$postValues[
'existing'];
83 $errorStatus = $this->objectManager->get(\TYPO3\CMS\Install\Status\ErrorStatus::class);
84 $errorStatus->setTitle(
'No Database selected');
85 $errorStatus->setMessage(
'You must select a database.');
86 $result[] = $errorStatus;
89 if (!empty($localConfigurationPathValuePairs)) {
90 $configurationManager->setLocalConfigurationValuesByPathValuePairs($localConfigurationPathValuePairs);
106 if ((
string)
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'database'] !==
'') {
107 $this->databaseConnection->setDatabaseName(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'database']);
109 $selectResult = $this->databaseConnection->sql_select_db();
110 if ($selectResult ===
true) {
113 }
catch (\RuntimeException $e) {
127 $configurationManager = $this->objectManager->get(\TYPO3\CMS\Core\Configuration\ConfigurationManager::class);
128 $isInitialInstallationInProgress = $configurationManager->getConfigurationValueByPath(
'SYS/isInitialInstallationInProgress');
129 $this->view->assign(
'databaseList', $this->
getDatabaseList($isInitialInstallationInProgress));
130 $this->view->assign(
'isInitialInstallationInProgress', $isInitialInstallationInProgress);
132 return $this->view->render();
144 $databaseArray = $this->databaseConnection->admin_get_dbs();
146 $reservedDatabaseNames = array(
'mysql',
'information_schema',
'performance_schema');
147 $allPossibleDatabases = array_diff($databaseArray, $reservedDatabaseNames);
150 if ($initialInstallation ===
false) {
151 return $allPossibleDatabases;
154 $databases = array();
155 foreach ($allPossibleDatabases as $database) {
156 $this->databaseConnection->setDatabaseName($database);
157 $this->databaseConnection->sql_select_db();
158 $existingTables = $this->databaseConnection->admin_get_tables();
159 $databases[] = array(
161 'tables' => count($existingTables),
175 $this->databaseConnection = $this->objectManager->get(\TYPO3\CMS\Core\Database\DatabaseConnection::class);
176 $this->databaseConnection->setDatabaseUsername(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'username']);
177 $this->databaseConnection->setDatabasePassword(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'password']);
178 $this->databaseConnection->setDatabaseHost(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'host']);
179 $this->databaseConnection->setDatabasePort(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'port']);
180 $this->databaseConnection->setDatabaseSocket(
$GLOBALS[
'TYPO3_CONF_VARS'][
'DB'][
'socket']);
181 $this->databaseConnection->sql_pconnect();
192 return strlen($databaseName) <= 50 && preg_match(
'/^[a-zA-Z0-9\$_]*$/', $databaseName);