Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
CRAP | |
0.00% |
0 / 160 |
| SiteConfigureForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 7 |
182 | |
0.00% |
0 / 160 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 7 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getEditableConfigNames | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| buildForm | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 105 |
|||
| validateForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| submitForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 27 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Installer\Form\SiteConfigureForm. | |
| */ | |
| 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; | |
| /** | |
| * Provides the site configuration form. | |
| */ | |
| class SiteConfigureForm extends ConfigFormBase { | |
| /** | |
| * The site path. | |
| * | |
| * @var string | |
| */ | |
| protected $sitePath; | |
| /** | |
| * The user storage. | |
| * | |
| * @var \Drupal\user\UserStorageInterface | |
| */ | |
| protected $userStorage; | |
| /** | |
| * The state service. | |
| * | |
| * @var \Drupal\Core\State\StateInterface | |
| */ | |
| protected $state; | |
| /** | |
| * The module installer. | |
| * | |
| * @var \Drupal\Core\Extension\ModuleInstallerInterface | |
| */ | |
| protected $moduleInstaller; | |
| /** | |
| * The country manager. | |
| * | |
| * @var \Drupal\Core\Locale\CountryManagerInterface | |
| */ | |
| protected $countryManager; | |
| /** | |
| * The app root. | |
| * | |
| * @var string | |
| */ | |
| protected $root; | |
| /** | |
| * Constructs a new SiteConfigureForm. | |
| * | |
| * @param string $root | |
| * The app root. | |
| * @param string $site_path | |
| * The site path. | |
| * @param \Drupal\user\UserStorageInterface $user_storage | |
| * The user storage. | |
| * @param \Drupal\Core\State\StateInterface $state | |
| * The state service. | |
| * @param \Drupal\Core\Extension\ModuleInstallerInterface $module_installer | |
| * The module installer. | |
| * @param \Drupal\Core\Locale\CountryManagerInterface $country_manager | |
| * The country manager. | |
| */ | |
| 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; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| 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') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'install_configure_form'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function getEditableConfigNames() { | |
| return [ | |
| 'system.date', | |
| 'system.site', | |
| 'update.settings', | |
| ]; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_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) && (!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'; | |
| // 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'] = 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'), | |
| // Use system timezone if set, but avoid throwing a warning in PHP >=5.4 | |
| '#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; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| 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); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| 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'); | |
| // Enable update.module if this option was selected. | |
| $update_status_module = $form_state->getValue('update_status_module'); | |
| if ($update_status_module[1]) { | |
| $this->moduleInstaller->install(array('file', 'update'), FALSE); | |
| // Add the site maintenance account's email address to the list of | |
| // addresses to be notified when updates are available, if selected. | |
| if ($update_status_module[2]) { | |
| // Reset the configuration factory so it is updated with the new module. | |
| $this->resetConfigFactory(); | |
| $this->config('update.settings')->set('notification.emails', array($account_values['mail']))->save(TRUE); | |
| } | |
| } | |
| // We precreated user 1 with placeholder values. Let's save the real values. | |
| $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(); | |
| // Record when this install ran. | |
| $this->state->set('install_time', $_SERVER['REQUEST_TIME']); | |
| } | |
| } |