You are here

public function SiteConfigureForm::buildForm in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php \Drupal\Core\Installer\Form\SiteConfigureForm::buildForm()

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides ConfigFormBase::buildForm

File

core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php, line 124

Class

SiteConfigureForm
Provides the site configuration form.

Namespace

Drupal\Core\Installer\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  global $install_state;
  $form['#title'] = $this
    ->t('Configure site');

  // Warn about settings.php permissions risk
  $settings_dir = $this->sitePath;
  $settings_file = $settings_dir . '/settings.php';

  // Check that $_POST is empty so we only show this message when the form is
  // first displayed, not on the next page after it is submitted. (We do not
  // want to repeat it multiple times because it is a general warning that is
  // not related to the rest of the installation process; it would also be
  // especially out of place on the last page of the installer, where it would
  // distract from the message that the Drupal installation has completed
  // successfully.)
  $post_params = $this
    ->getRequest()->request
    ->all();
  if (empty($post_params) && (Settings::get('skip_permissions_hardening') || !drupal_verify_install_file($this->root . '/' . $settings_file, FILE_EXIST | FILE_READABLE | FILE_NOT_WRITABLE) || !drupal_verify_install_file($this->root . '/' . $settings_dir, FILE_NOT_WRITABLE, 'dir'))) {
    $this
      ->messenger()
      ->addWarning(t('All necessary changes to %dir and %file have been made, so you should remove write permissions to them now in order to avoid security risks. If you are unsure how to do so, consult the <a href=":handbook_url">online handbook</a>.', [
      '%dir' => $settings_dir,
      '%file' => $settings_file,
      ':handbook_url' => 'https://www.drupal.org/server-permissions',
    ]));
  }
  $form['#attached']['library'][] = 'system/drupal.system';

  // Add JavaScript time zone detection.
  $form['#attached']['library'][] = 'core/drupal.timezone';

  // We add these strings as settings because JavaScript translation does not
  // work during installation.
  $form['#attached']['drupalSettings']['copyFieldValue']['edit-site-mail'] = [
    'edit-account-mail',
  ];
  $form['site_information'] = [
    '#type' => 'fieldgroup',
    '#title' => $this
      ->t('Site information'),
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['site_information']['site_name'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Site name'),
    '#required' => TRUE,
    '#weight' => -20,
    '#access' => empty($install_state['config_install_path']),
  ];

  // Use the default site mail if one is already configured, or fall back to
  // PHP's configured sendmail_from.
  $default_site_mail = $this
    ->config('system.site')
    ->get('mail') ?: ini_get('sendmail_from');
  $form['site_information']['site_mail'] = [
    '#type' => 'email',
    '#title' => $this
      ->t('Site email address'),
    '#default_value' => $default_site_mail,
    '#description' => $this
      ->t("Automated emails, such as registration information, will be sent from this address. Use an address ending in your site's domain to help prevent these emails from being flagged as spam."),
    '#required' => TRUE,
    '#weight' => -15,
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['admin_account'] = [
    '#type' => 'fieldgroup',
    '#title' => $this
      ->t('Site maintenance account'),
  ];
  $form['admin_account']['account']['name'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Username'),
    '#maxlength' => UserInterface::USERNAME_MAX_LENGTH,
    '#description' => $this
      ->t("Several special characters are allowed, including space, period (.), hyphen (-), apostrophe ('), underscore (_), and the @ sign."),
    '#required' => TRUE,
    '#attributes' => [
      'class' => [
        'username',
      ],
    ],
  ];
  $form['admin_account']['account']['pass'] = [
    '#type' => 'password_confirm',
    '#required' => TRUE,
    '#size' => 25,
  ];
  $form['admin_account']['account']['#tree'] = TRUE;
  $form['admin_account']['account']['mail'] = [
    '#type' => 'email',
    '#title' => $this
      ->t('Email address'),
    '#required' => TRUE,
  ];
  $form['regional_settings'] = [
    '#type' => 'fieldgroup',
    '#title' => $this
      ->t('Regional settings'),
    '#access' => empty($install_state['config_install_path']),
  ];
  $countries = $this->countryManager
    ->getList();
  $form['regional_settings']['site_default_country'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Default country'),
    '#empty_value' => '',
    '#default_value' => $this
      ->config('system.date')
      ->get('country.default'),
    '#options' => $countries,
    '#weight' => 0,
    '#access' => empty($install_state['config_install_path']),
  ];

  // Use the default site timezone if one is already configured, or fall back
  // to the system timezone if set (and avoid throwing a warning in
  // PHP >=5.4).
  $default_timezone = $this
    ->config('system.date')
    ->get('timezone.default') ?: @date_default_timezone_get();
  $form['regional_settings']['date_default_timezone'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Default time zone'),
    '#default_value' => $default_timezone,
    '#options' => system_time_zones(NULL, TRUE),
    '#weight' => 5,
    '#attributes' => [
      'class' => [
        'timezone-detect',
      ],
    ],
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['update_notifications'] = [
    '#type' => 'fieldgroup',
    '#title' => $this
      ->t('Update notifications'),
    '#description' => $this
      ->t('When checking for updates, anonymous information about your site is sent to <a href="@drupal">Drupal.org</a>.', [
      '@drupal' => 'https://drupal.org',
    ]),
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['update_notifications']['enable_update_status_module'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Check for updates automatically'),
    '#default_value' => 1,
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['update_notifications']['enable_update_status_emails'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Receive email notifications'),
    '#default_value' => 1,
    '#states' => [
      'visible' => [
        'input[name="enable_update_status_module"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
    '#access' => empty($install_state['config_install_path']),
  ];
  $form['actions'] = [
    '#type' => 'actions',
  ];
  $form['actions']['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Save and continue'),
    '#weight' => 15,
    '#button_type' => 'primary',
  ];
  return $form;
}