/**
  * Creates a specialized form to configure the DBMS connection.
  *
  * @param array $markers
  * @param tx_install $instObj
  * @return void
  */
 protected function createConnectionForm(array &$markers, tx_install $instObj)
 {
     // Normalize current driver
     if (!$this->driver) {
         $this->driver = $this->getDefaultDriver();
     }
     // Get the template file
     $templateFile = @file_get_contents(t3lib_extMgm::extPath('dbal') . $this->templateFilePath . 'install.html');
     // Get the template part from the file
     $template = t3lib_parsehtml::getSubpart($templateFile, '###TEMPLATE###');
     // Get the subpart for the connection form
     $formSubPart = t3lib_parsehtml::getSubpart($template, '###CONNECTION_FORM###');
     if ($this->getNumberOfAvailableDrivers() == 1 && $this->getDefaultDriver() === 'mysql') {
         // Only MySQL is actually available (PDO support may be compiled in
         // PHP itself and as such DBAL was activated, behaves as if DBAL were
         // not activated
         $driverSubPart = '<input type="hidden" name="TYPO3_INSTALL[localconf.php][typo_db_driver]" value="mysql" />';
     } else {
         $driverTemplate = t3lib_parsehtml::getSubpart($formSubPart, '###DATABASE_DRIVER###');
         $driverSubPart = $this->prepareDatabaseDrivers($driverTemplate);
     }
     $formSubPart = t3lib_parsehtml::substituteSubpart($formSubPart, '###DATABASE_DRIVER###', $driverSubPart);
     // Get the subpart related to selected database driver
     if ($this->driver === '' || $this->driver === 'mysql') {
         $driverOptionsSubPart = t3lib_parsehtml::getSubpart($template, '###DRIVER_MYSQL###');
     } else {
         $driverOptionsSubPart = t3lib_parsehtml::getSubpart($template, '###DRIVER_' . t3lib_div::strtoupper($this->driver) . '###');
         if ($driverOptionsSubPart === '') {
             $driverOptionsSubPart = t3lib_parsehtml::getSubpart($template, '###DRIVER_DEFAULT###');
         }
     }
     // Define driver-specific markers
     $driverMarkers = array();
     switch ($this->driver) {
         case 'mssql':
             $driverMarkers = array('labelUsername' => 'Username', 'username' => TYPO3_db_username, 'labelPassword' => 'Password', 'password' => TYPO3_db_password, 'labelHost' => 'Host', 'host' => TYPO3_db_host ? TYPO3_db_host : 'windows', 'labelDatabase' => 'Database', 'database' => TYPO3_db);
             $nextStep = $instObj->step + 2;
             break;
         case 'odbc_mssql':
             $driverMarkers = array('labelUsername' => 'Username', 'username' => TYPO3_db_username, 'labelPassword' => 'Password', 'password' => TYPO3_db_password, 'labelHost' => 'Host', 'host' => TYPO3_db_host ? TYPO3_db_host : 'windows', 'database' => 'dummy_string');
             $nextStep = $instObj->step + 2;
             break;
         case 'oci8':
             $driverMarkers = array('labelUsername' => 'Username', 'username' => TYPO3_db_username, 'labelPassword' => 'Password', 'password' => TYPO3_db_password, 'labelHost' => 'Host', 'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost', 'labelType' => 'Type', 'labelSID' => 'SID', 'labelServiceName' => 'Service Name', 'labelDatabase' => 'Name', 'database' => TYPO3_db);
             $nextStep = $instObj->step + 2;
             break;
         case 'postgres':
             $driverMarkers = array('labelUsername' => 'Username', 'username' => TYPO3_db_username, 'labelPassword' => 'Password', 'password' => TYPO3_db_password, 'labelHost' => 'Host', 'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost', 'labelDatabase' => 'Database', 'database' => TYPO3_db);
             $nextStep = $instObj->step + 2;
             break;
         default:
             $driverMarkers = array('labelUsername' => 'Username', 'username' => TYPO3_db_username, 'labelPassword' => 'Password', 'password' => TYPO3_db_password, 'labelHost' => 'Host', 'host' => TYPO3_db_host ? TYPO3_db_host : 'localhost', 'labelDatabase' => 'Database', 'database' => TYPO3_db);
             $nextStep = $instObj->step + 1;
             break;
     }
     // Add header marker for main template
     $markers['header'] = 'Connect to your database host';
     // Define the markers content for the subpart
     $subPartMarkers = array('step' => $nextStep, 'action' => htmlspecialchars($instObj->action), 'encryptionKey' => $instObj->createEncryptionKey(), 'branch' => TYPO3_branch, 'driver_options' => $driverOptionsSubPart, 'continue' => 'Continue', 'llDescription' => 'If you have not already created a username and password to access the database, please do so now. This can be done using tools provided by your host.');
     $subPartMarkers = array_merge($subPartMarkers, $driverMarkers);
     // Add step marker for main template
     $markers['step'] = t3lib_parsehtml::substituteMarkerArray($formSubPart, $subPartMarkers, '###|###', 1, 1);
 }