You are here

class SiteSettingsForm in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php \Drupal\Core\Installer\Form\SiteSettingsForm

Provides a form to configure and rewrite settings.php.

Hierarchy

Expanded class hierarchy of SiteSettingsForm

File

core/lib/Drupal/Core/Installer/Form/SiteSettingsForm.php, line 19
Contains \Drupal\Core\Installer\Form\SiteSettingsForm.

Namespace

Drupal\Core\Installer\Form
View source
class SiteSettingsForm extends FormBase {

  /**
   * The site path.
   *
   * @var string
   */
  protected $sitePath;

  /**
   * Constructs a new SiteSettingsForm.
   *
   * @param string $site_path
   *   The site path.
   */
  public function __construct($site_path) {
    $this->sitePath = $site_path;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('site.path'));
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'install_settings_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $settings_file = './' . $this->sitePath . '/settings.php';
    $form['#title'] = $this
      ->t('Database configuration');
    $drivers = drupal_get_database_types();
    $drivers_keys = array_keys($drivers);

    // Unless there is input for this form (for a non-interactive installation,
    // input originates from the $settings array passed into install_drupal()),
    // check whether database connection settings have been prepared in
    // settings.php already.
    // Note: The installer even executes this form if there is a valid database
    // connection already, since the submit handler of this form is responsible
    // for writing all $settings to settings.php (not limited to $databases).
    $input =& $form_state
      ->getUserInput();
    if (!isset($input['driver']) && ($database = Database::getConnectionInfo())) {
      $input['driver'] = $database['default']['driver'];
      $input[$database['default']['driver']] = $database['default'];
    }
    if (isset($input['driver'])) {
      $default_driver = $input['driver'];

      // In case of database connection info from settings.php, as well as for a
      // programmed form submission (non-interactive installer), the table prefix
      // information is usually normalized into an array already, but the form
      // element only allows to configure one default prefix for all tables.
      $prefix =& $input[$default_driver]['prefix'];
      if (isset($prefix) && is_array($prefix)) {
        $prefix = $prefix['default'];
      }
      $default_options = $input[$default_driver];
    }
    else {
      $default_driver = current($drivers_keys);
      $default_options = array();
    }
    $form['driver'] = array(
      '#type' => 'radios',
      '#title' => $this
        ->t('Database type'),
      '#required' => TRUE,
      '#default_value' => $default_driver,
    );
    if (count($drivers) == 1) {
      $form['driver']['#disabled'] = TRUE;
    }

    // Add driver specific configuration options.
    foreach ($drivers as $key => $driver) {
      $form['driver']['#options'][$key] = $driver
        ->name();
      $form['settings'][$key] = $driver
        ->getFormOptions($default_options);
      $form['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this
        ->t('@driver_name settings', array(
        '@driver_name' => $driver
          ->name(),
      )) . '</h2>';
      $form['settings'][$key]['#type'] = 'container';
      $form['settings'][$key]['#tree'] = TRUE;
      $form['settings'][$key]['advanced_options']['#parents'] = array(
        $key,
      );
      $form['settings'][$key]['#states'] = array(
        'visible' => array(
          ':input[name=driver]' => array(
            'value' => $key,
          ),
        ),
      );
    }
    $form['actions'] = array(
      '#type' => 'actions',
    );
    $form['actions']['save'] = array(
      '#type' => 'submit',
      '#value' => $this
        ->t('Save and continue'),
      '#button_type' => 'primary',
      '#limit_validation_errors' => array(
        array(
          'driver',
        ),
        array(
          $default_driver,
        ),
      ),
      '#submit' => array(
        '::submitForm',
      ),
    );
    $form['errors'] = array();
    $form['settings_file'] = array(
      '#type' => 'value',
      '#value' => $settings_file,
    );
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $driver = $form_state
      ->getValue('driver');
    $database = $form_state
      ->getValue($driver);
    $drivers = drupal_get_database_types();
    $reflection = new \ReflectionClass($drivers[$driver]);
    $install_namespace = $reflection
      ->getNamespaceName();

    // Cut the trailing \Install from namespace.
    $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\'));
    $database['driver'] = $driver;
    $form_state
      ->set('database', $database);
    $errors = install_database_errors($database, $form_state
      ->getValue('settings_file'));
    foreach ($errors as $name => $message) {
      $form_state
        ->setErrorByName($name, $message);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    global $install_state;

    // Update global settings array and save.
    $settings = array();
    $database = $form_state
      ->get('database');
    $settings['databases']['default']['default'] = (object) array(
      'value' => $database,
      'required' => TRUE,
    );
    $settings['settings']['hash_salt'] = (object) array(
      'value' => Crypt::randomBytesBase64(55),
      'required' => TRUE,
    );

    // Remember the profile which was used.
    $settings['settings']['install_profile'] = (object) array(
      'value' => $install_state['parameters']['profile'],
      'required' => TRUE,
    );
    drupal_rewrite_settings($settings);

    // Add the config directories to settings.php.
    drupal_install_config_directories();

    // Indicate that the settings file has been verified, and check the database
    // for the last completed task, now that we have a valid connection. This
    // last step is important since we want to trigger an error if the new
    // database already has Drupal installed.
    $install_state['settings_verified'] = TRUE;
    $install_state['config_verified'] = TRUE;
    $install_state['database_verified'] = TRUE;
    $install_state['completed_task'] = install_verify_completed_task();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FormBase::$configFactory protected property The config factory. 3
FormBase::$loggerFactory protected property The logger factory.
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::config protected function Retrieves a configuration object.
FormBase::configFactory protected function Gets the config factory for this form. 3
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator protected function Returns the link generator.
LinkGeneratorTrait::l protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator public function Sets the link generator service.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service.
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
SiteSettingsForm::$sitePath protected property The site path.
SiteSettingsForm::buildForm public function Form constructor. Overrides FormInterface::buildForm
SiteSettingsForm::create public static function Instantiates a new instance of this class. Overrides FormBase::create
SiteSettingsForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
SiteSettingsForm::submitForm public function Form submission handler. Overrides FormInterface::submitForm
SiteSettingsForm::validateForm public function Form validation handler. Overrides FormBase::validateForm
SiteSettingsForm::__construct public function Constructs a new SiteSettingsForm.
StringTranslationTrait::$stringTranslation protected property The string translation service.
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator protected function Returns the URL generator service.
UrlGeneratorTrait::redirect protected function Returns a redirect response object for the specified route.
UrlGeneratorTrait::setUrlGenerator public function Sets the URL generator service.
UrlGeneratorTrait::url protected function Generates a URL or path for a specific route based on the given parameters.