View source
<?php
namespace Drupal\Core\Installer\Form;
use Drupal\Core\Extension\ModuleInstallerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Locale\CountryManagerInterface;
use Drupal\Core\State\StateInterface;
use Drupal\user\UserStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SiteConfigureForm extends ConfigFormBase {
protected $sitePath;
protected $userStorage;
protected $state;
protected $moduleInstaller;
protected $countryManager;
protected $root;
public function __construct($root, $site_path, UserStorageInterface $user_storage, StateInterface $state, ModuleInstallerInterface $module_installer, CountryManagerInterface $country_manager) {
$this->root = $root;
$this->sitePath = $site_path;
$this->userStorage = $user_storage;
$this->state = $state;
$this->moduleInstaller = $module_installer;
$this->countryManager = $country_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('app.root'), $container
->get('site.path'), $container
->get('entity.manager')
->getStorage('user'), $container
->get('state'), $container
->get('module_installer'), $container
->get('country_manager'));
}
public function getFormId() {
return 'install_configure_form';
}
protected function getEditableConfigNames() {
return [
'system.date',
'system.site',
'update.settings',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['#title'] = $this
->t('Configure site');
$settings_dir = $this->sitePath;
$settings_file = $settings_dir . '/settings.php';
$post_params = $this
->getRequest()->request
->all();
if (empty($post_params) && (!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'))) {
drupal_set_message(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>.', array(
'%dir' => $settings_dir,
'%file' => $settings_file,
':handbook_url' => 'https://www.drupal.org/server-permissions',
)), 'warning');
}
$form['#attached']['library'][] = 'system/drupal.system';
$form['#attached']['library'][] = 'core/drupal.timezone';
$form['#attached']['drupalSettings']['copyFieldValue']['edit-site-mail'] = [
'edit-account-mail',
];
$form['site_information'] = array(
'#type' => 'fieldgroup',
'#title' => $this
->t('Site information'),
);
$form['site_information']['site_name'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Site name'),
'#required' => TRUE,
'#weight' => -20,
);
$form['site_information']['site_mail'] = array(
'#type' => 'email',
'#title' => $this
->t('Site email address'),
'#default_value' => ini_get('sendmail_from'),
'#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,
);
$form['admin_account'] = array(
'#type' => 'fieldgroup',
'#title' => $this
->t('Site maintenance account'),
);
$form['admin_account']['account']['name'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Username'),
'#maxlength' => USERNAME_MAX_LENGTH,
'#description' => $this
->t("Several special characters are allowed, including space, period (.), hyphen (-), apostrophe ('), underscore (_), and the @ sign."),
'#required' => TRUE,
'#attributes' => array(
'class' => array(
'username',
),
),
);
$form['admin_account']['account']['pass'] = array(
'#type' => 'password_confirm',
'#required' => TRUE,
'#size' => 25,
);
$form['admin_account']['account']['#tree'] = TRUE;
$form['admin_account']['account']['mail'] = array(
'#type' => 'email',
'#title' => $this
->t('Email address'),
'#required' => TRUE,
);
$form['regional_settings'] = array(
'#type' => 'fieldgroup',
'#title' => $this
->t('Regional settings'),
);
$countries = $this->countryManager
->getList();
$form['regional_settings']['site_default_country'] = array(
'#type' => 'select',
'#title' => $this
->t('Default country'),
'#empty_value' => '',
'#default_value' => $this
->config('system.date')
->get('country.default'),
'#options' => $countries,
'#description' => $this
->t('Select the default country for the site.'),
'#weight' => 0,
);
$form['regional_settings']['date_default_timezone'] = array(
'#type' => 'select',
'#title' => $this
->t('Default time zone'),
'#default_value' => @date_default_timezone_get(),
'#options' => system_time_zones(),
'#description' => $this
->t('By default, dates in this site will be displayed in the chosen time zone.'),
'#weight' => 5,
'#attributes' => array(
'class' => array(
'timezone-detect',
),
),
);
$form['update_notifications'] = array(
'#type' => 'fieldgroup',
'#title' => $this
->t('Update notifications'),
);
$form['update_notifications']['update_status_module'] = array(
'#type' => 'checkboxes',
'#title' => $this
->t('Update notifications'),
'#options' => array(
1 => $this
->t('Check for updates automatically'),
2 => $this
->t('Receive email notifications'),
),
'#default_value' => array(
1,
2,
),
'#description' => $this
->t('The system will notify you when updates and important security releases are available for installed components. Anonymous information about your site is sent to <a href=":drupal">Drupal.org</a>.', array(
':drupal' => 'https://www.drupal.org',
)),
'#weight' => 15,
);
$form['update_notifications']['update_status_module'][2] = array(
'#states' => array(
'visible' => array(
'input[name="update_status_module[1]"]' => array(
'checked' => TRUE,
),
),
),
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => $this
->t('Save and continue'),
'#weight' => 15,
'#button_type' => 'primary',
);
return $form;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
if ($error = user_validate_name($form_state
->getValue(array(
'account',
'name',
)))) {
$form_state
->setErrorByName('account][name', $error);
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this
->config('system.site')
->set('name', (string) $form_state
->getValue('site_name'))
->set('mail', (string) $form_state
->getValue('site_mail'))
->save(TRUE);
$this
->config('system.date')
->set('timezone.default', (string) $form_state
->getValue('date_default_timezone'))
->set('country.default', (string) $form_state
->getValue('site_default_country'))
->save(TRUE);
$account_values = $form_state
->getValue('account');
$update_status_module = $form_state
->getValue('update_status_module');
if ($update_status_module[1]) {
$this->moduleInstaller
->install(array(
'file',
'update',
), FALSE);
if ($update_status_module[2]) {
$this
->resetConfigFactory();
$this
->config('update.settings')
->set('notification.emails', array(
$account_values['mail'],
))
->save(TRUE);
}
}
$account = $this->userStorage
->load(1);
$account->init = $account->mail = $account_values['mail'];
$account->roles = $account
->getRoles();
$account
->activate();
$account->timezone = $form_state
->getValue('date_default_timezone');
$account->pass = $account_values['pass'];
$account->name = $account_values['name'];
$account
->save();
$this->state
->set('install_time', $_SERVER['REQUEST_TIME']);
}
}