Skip to content
Snippets Groups Projects
Select Git revision
  • 261b71d29ceaf3b36df944689f1b87caff623319
  • 11.x default protected
  • 11.2.x protected
  • 10.5.x protected
  • 10.6.x protected
  • 11.1.x protected
  • 10.4.x protected
  • 11.0.x protected
  • 10.3.x protected
  • 7.x protected
  • 10.2.x protected
  • 10.1.x protected
  • 9.5.x protected
  • 10.0.x protected
  • 9.4.x protected
  • 9.3.x protected
  • 9.2.x protected
  • 9.1.x protected
  • 8.9.x protected
  • 9.0.x protected
  • 8.8.x protected
  • 10.5.1 protected
  • 11.2.2 protected
  • 11.2.1 protected
  • 11.2.0 protected
  • 10.5.0 protected
  • 11.2.0-rc2 protected
  • 10.5.0-rc1 protected
  • 11.2.0-rc1 protected
  • 10.4.8 protected
  • 11.1.8 protected
  • 10.5.0-beta1 protected
  • 11.2.0-beta1 protected
  • 11.2.0-alpha1 protected
  • 10.4.7 protected
  • 11.1.7 protected
  • 10.4.6 protected
  • 11.1.6 protected
  • 10.3.14 protected
  • 10.4.5 protected
  • 11.0.13 protected
41 results

Tasks.php

Blame
  • Nathaniel Catchpole's avatar
    Issue #1992950 by xjm: Stop use-ing Exception.
    catch authored
    261b71d2
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Tasks.php 4.09 KiB
    <?php
    
    /**
     * @file
     * Definition of Drupal\Core\Database\Driver\sqlite\Install\Tasks
     */
    
    namespace Drupal\Core\Database\Driver\sqlite\Install;
    
    use Drupal\Core\Database\Database;
    use Drupal\Core\Database\Driver\sqlite\Connection;
    use Drupal\Core\Database\DatabaseNotFoundException;
    use Drupal\Core\Database\Install\Tasks as InstallTasks;
    
    class Tasks extends InstallTasks {
      protected $pdoDriver = 'sqlite';
    
      public function name() {
        return st('SQLite');
      }
    
      /**
       * Minimum engine version.
       *
       * @todo Consider upping to 3.6.8 in Drupal 8 to get SAVEPOINT support.
       */
      public function minimumVersion() {
        return '3.3.7';
      }
    
      public function getFormOptions($database) {
        $form = parent::getFormOptions($database);
    
        // Remove the options that only apply to client/server style databases.
        unset($form['username'], $form['password'], $form['advanced_options']['host'], $form['advanced_options']['port']);
    
        // Make the text more accurate for SQLite.
        $form['database']['#title'] = st('Database file');
        $form['database']['#description'] = st('The absolute path to the file where @drupal data will be stored. This must be writable by the web server and should exist outside of the web root.', array('@drupal' => drupal_install_profile_distribution_name()));
        $default_database = conf_path(FALSE, TRUE) . '/files/.ht.sqlite';
        $form['database']['#default_value'] = empty($database['database']) ? $default_database : $database['database'];
        return $form;
      }
    
      /**
       * Check database connection and attempt to create database if the database is
       * missing.
       */
      protected function connect() {
        try {
          // This doesn't actually test the connection.
          db_set_active();
          // Now actually do a check.
          Database::getConnection();
          $this->pass('Drupal can CONNECT to the database ok.');
        }
        catch (\Exception $e) {
          // Attempt to create the database if it is not found.
          if ($e->getCode() == Connection::DATABASE_NOT_FOUND) {
            // Remove the database string from connection info.
            $connection_info = Database::getConnectionInfo();
            $database = $connection_info['default']['database'];
    
            // We cannot use file_directory_temp() here because we haven't yet
            // successfully connected to the database.
            $connection_info['default']['database'] = drupal_tempnam(sys_get_temp_dir(), 'sqlite');
    
            // In order to change the Database::$databaseInfo array, need to remove
            // the active connection, then re-add it with the new info.
            Database::removeConnection('default');
            Database::addConnectionInfo('default', 'default', $connection_info['default']);
    
            try {
              Database::getConnection()->createDatabase($database);
              Database::closeConnection();
    
              // Now, restore the database config.
              Database::removeConnection('default');
              $connection_info['default']['database'] = $database;
              Database::addConnectionInfo('default', 'default', $connection_info['default']);
    
              // Check the database connection.
              Database::getConnection();
              $this->pass('Drupal can CONNECT to the database ok.');
            }
            catch (DatabaseNotFoundException $e) {
              // Still no dice; probably a permission issue. Raise the error to the
              // installer.
              $this->fail(st('Database %database not found. The server reports the following message when attempting to create the database: %error.', array('%database' => $database, '%error' => $e->getMessage())));
            }
          }
          else {
            // Database connection failed for some other reason than the database
            // not existing.
            $this->fail(st('Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist, and have you entered the correct database name?</li><li>Have you entered the correct username and password?</li><li>Have you entered the correct database hostname?</li></ul>', array('%error' => $e->getMessage())));
            return FALSE;
          }
        }
        return TRUE;
      }
    }