function SiteConfigureForm::buildForm

Same name in other branches
  1. 9 core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php \Drupal\Core\Installer\Form\SiteConfigureForm::buildForm()
  2. 8.9.x core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php \Drupal\Core\Installer\Form\SiteConfigureForm::buildForm()
  3. 10 core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php \Drupal\Core\Installer\Form\SiteConfigureForm::buildForm()

Overrides ConfigFormBase::buildForm

File

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

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($this->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']),
    ];
    if (count($this->getAdminRoles()) === 0 && $this->superUserAccessPolicy === FALSE) {
        $account_label = $this->t('Site account');
    }
    else {
        $account_label = $this->t('Site maintenance account');
    }
    $form['admin_account'] = [
        '#type' => 'fieldgroup',
        '#title' => $account_label,
    ];
    $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']),
    ];
    // 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' => TimeZoneFormHelper::getOptionsListByRegion(),
        '#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, your site automatically sends anonymous information to Drupal.org. See the <a href="@update-module-docs" target="_blank">Update module documentation</a> for details.', [
            '@update-module-docs' => 'https://www.drupal.org/node/178772',
        ]),
        '#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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.