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']); | |
} | |
} |