class CredentialForm
Same name in other branches
- 9 core/modules/migrate_drupal_ui/src/Form/CredentialForm.php \Drupal\migrate_drupal_ui\Form\CredentialForm
- 10 core/modules/migrate_drupal_ui/src/Form/CredentialForm.php \Drupal\migrate_drupal_ui\Form\CredentialForm
- 11.x core/modules/migrate_drupal_ui/src/Form/CredentialForm.php \Drupal\migrate_drupal_ui\Form\CredentialForm
Migrate Upgrade database credential form.
@internal
Hierarchy
- class \Drupal\Core\Form\FormBase implements \Drupal\Core\Form\FormInterface, \Drupal\Core\DependencyInjection\ContainerInjectionInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\Routing\LinkGeneratorTrait, \Drupal\Core\Logger\LoggerChannelTrait, \Drupal\Core\Messenger\MessengerTrait, \Drupal\Core\Routing\RedirectDestinationTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\Routing\UrlGeneratorTrait
- class \Drupal\migrate_drupal_ui\Form\MigrateUpgradeFormBase extends \Drupal\Core\Form\FormBase uses \Drupal\migrate_drupal\MigrationConfigurationTrait
- class \Drupal\migrate_drupal_ui\Form\CredentialForm extends \Drupal\migrate_drupal_ui\Form\MigrateUpgradeFormBase
- class \Drupal\migrate_drupal_ui\Form\MigrateUpgradeFormBase extends \Drupal\Core\Form\FormBase uses \Drupal\migrate_drupal\MigrationConfigurationTrait
Expanded class hierarchy of CredentialForm
1 string reference to 'CredentialForm'
- migrate_drupal_ui.routing.yml in core/
modules/ migrate_drupal_ui/ migrate_drupal_ui.routing.yml - core/modules/migrate_drupal_ui/migrate_drupal_ui.routing.yml
File
-
core/
modules/ migrate_drupal_ui/ src/ Form/ CredentialForm.php, line 23
Namespace
Drupal\migrate_drupal_ui\FormView source
class CredentialForm extends MigrateUpgradeFormBase {
/**
* The HTTP client to fetch the files with.
*
* @var \GuzzleHttp\ClientInterface
*/
protected $httpClient;
/**
* An array of error information.
*
* @var array
*/
protected $errors = [];
/**
* CredentialForm constructor.
*
* @param \Drupal\Core\TempStore\PrivateTempStoreFactory $tempstore_private
* The private tempstore factory service.
* @param \GuzzleHttp\ClientInterface $http_client
* A Guzzle client object.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory service.
* @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager
* The migration plugin manager service.
* @param \Drupal\Core\State\StateInterface $state
* The state service.
*/
public function __construct(PrivateTempStoreFactory $tempstore_private, ClientInterface $http_client, ConfigFactoryInterface $config_factory, MigrationPluginManagerInterface $migration_plugin_manager, StateInterface $state) {
parent::__construct($config_factory, $migration_plugin_manager, $state, $tempstore_private);
$this->httpClient = $http_client;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container->get('tempstore.private'), $container->get('http_client'), $container->get('config.factory'), $container->get('plugin.manager.migration'), $container->get('state'));
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'migrate_drupal_ui_credential_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
if ($this->store
->get('step') != 'credential') {
return $this->restartUpgradeForm();
}
$form = parent::buildForm($form, $form_state);
$form['actions']['submit']['#value'] = $this->t('Review upgrade');
$form['#title'] = $this->t('Drupal Upgrade');
$drivers = $this->getDatabaseTypes();
$drivers_keys = array_keys($drivers);
$default_driver = current($drivers_keys);
$default_options = [];
$form['help'] = [
'#type' => 'item',
'#description' => $this->t('Provide the information to access the Drupal site you want to upgrade. Files can be imported into the upgraded site as well. See the <a href=":url">Upgrade documentation for more detailed instructions</a>.', [
':url' => 'https://www.drupal.org/upgrade/migrate',
]),
];
$form['version'] = [
'#type' => 'radios',
'#default_value' => 7,
'#title' => $this->t('Drupal version of the source site'),
'#options' => [
'6' => $this->t('Drupal 6'),
'7' => $this->t('Drupal 7'),
],
'#required' => TRUE,
];
$form['database'] = [
'#type' => 'details',
'#title' => $this->t('Source database'),
'#description' => $this->t('Provide credentials for the database of the Drupal site you want to upgrade.'),
'#open' => TRUE,
];
$form['database']['driver'] = [
'#type' => 'radios',
'#title' => $this->t('Database type'),
'#required' => TRUE,
'#default_value' => $default_driver,
];
if (count($drivers) == 1) {
$form['database']['driver']['#disabled'] = TRUE;
}
// Add driver-specific configuration options.
foreach ($drivers as $key => $driver) {
$form['database']['driver']['#options'][$key] = $driver->name();
$form['database']['settings'][$key] = $driver->getFormOptions($default_options);
unset($form['database']['settings'][$key]['advanced_options']['prefix']['#description']);
// This is a multi-step form and is not rebuilt during submission so
// #limit_validation_errors is not used. The database and username fields
// for mysql and pgsql must not be required.
$form['database']['settings'][$key]['database']['#required'] = FALSE;
$form['database']['settings'][$key]['username']['#required'] = FALSE;
$form['database']['settings'][$key]['#prefix'] = '<h2 class="js-hide">' . $this->t('@driver_name settings', [
'@driver_name' => $driver->name(),
]) . '</h2>';
$form['database']['settings'][$key]['#type'] = 'container';
$form['database']['settings'][$key]['#tree'] = TRUE;
$form['database']['settings'][$key]['advanced_options']['#parents'] = [
$key,
];
$form['database']['settings'][$key]['#states'] = [
'visible' => [
':input[name=driver]' => [
'value' => $key,
],
],
];
// Move the host fields out of advanced settings.
if (isset($form['database']['settings'][$key]['advanced_options']['host'])) {
$form['database']['settings'][$key]['host'] = $form['database']['settings'][$key]['advanced_options']['host'];
$form['database']['settings'][$key]['host']['#title'] = 'Database host';
$form['database']['settings'][$key]['host']['#weight'] = -1;
unset($form['database']['settings'][$key]['database']['#default_value']);
unset($form['database']['settings'][$key]['advanced_options']['host']);
}
}
$form['source'] = [
'#type' => 'details',
'#title' => $this->t('Source files'),
'#open' => TRUE,
];
$form['source']['d6_source_base_path'] = [
'#type' => 'textfield',
'#title' => $this->t('Document root for files'),
'#description' => $this->t('To import files from your current Drupal site, enter a local file directory containing your site (e.g. /var/www/docroot), or your site address (for example http://example.com).'),
'#states' => [
'visible' => [
':input[name="version"]' => [
'value' => '6',
],
],
],
'#element_validate' => [
'::validatePaths',
],
];
$form['source']['source_base_path'] = [
'#type' => 'textfield',
'#title' => $this->t('Document root for public files'),
'#description' => $this->t('To import public files from your current Drupal site, enter a local file directory containing your site (e.g. /var/www/docroot), or your site address (for example http://example.com).'),
'#states' => [
'visible' => [
':input[name="version"]' => [
'value' => '7',
],
],
],
'#element_validate' => [
'::validatePaths',
],
];
$form['source']['source_private_file_path'] = [
'#type' => 'textfield',
'#title' => $this->t('Document root for private files'),
'#default_value' => '',
'#description' => $this->t('To import private files from your current Drupal site, enter a local file directory containing your site (e.g. /var/www/docroot).'),
'#states' => [
'visible' => [
':input[name="version"]' => [
'value' => '7',
],
],
],
'#element_validate' => [
'::validatePaths',
],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
// Retrieve the database driver from the form, use reflection to get the
// namespace, and then construct a valid database array the same as in
// settings.php.
$driver = $form_state->getValue('driver');
$drivers = $this->getDatabaseTypes();
$reflection = new \ReflectionClass($drivers[$driver]);
$install_namespace = $reflection->getNamespaceName();
$database = $form_state->getValue($driver);
// Cut the trailing \Install from namespace.
$database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\'));
$database['driver'] = $driver;
// Validate the driver settings and just end here if we have any issues.
$connection = NULL;
$error_key = $database['driver'] . '][database';
if ($errors = $drivers[$driver]->validateDatabaseSettings($database)) {
foreach ($errors as $name => $message) {
$this->errors[$name] = $message;
}
}
// Get the Drupal version of the source database so it can be validated.
if (!$this->errors) {
try {
$connection = $this->getConnection($database);
} catch (\Exception $e) {
$msg = $this->t('Failed to connect to your database server. The server reports the following message: %error.<ul><li>Is the database server running?</li><li>Does the database exist, and have you entered the correct database name?</li><li>Have you entered the correct username and password?</li><li>Have you entered the correct database hostname?</li></ul>', [
'%error' => $e->getMessage(),
]);
$this->errors[$error_key] = $msg;
}
}
// Get the Drupal version of the source database so it can be validated.
if (!$this->errors) {
$version = (string) $this->getLegacyDrupalVersion($connection);
if (!$version) {
$this->errors[$error_key] = $this->t('Source database does not contain a recognizable Drupal version.');
}
elseif ($version !== (string) $form_state->getValue('version')) {
$this->errors['version'] = $this->t('Source database is Drupal version @version but version @selected was selected.', [
'@version' => $version,
'@selected' => $form_state->getValue('version'),
]);
}
}
// Setup migrations and save form data to private store.
if (!$this->errors) {
try {
$this->setupMigrations($connection, $version, $database, $form_state);
} catch (BadPluginDefinitionException $e) {
// BadPluginDefinitionException occurs if the source_module is not
// defined, which happens during testing.
$this->errors[$error_key] = $e->getMessage();
} catch (RequirementsException $e) {
$this->errors[$error_key] = $e->getMessage();
}
}
// Display all errors as a list of items.
if ($this->errors) {
$form_state->setError($form, $this->t('<h3>Resolve all issues below to continue the upgrade.</h3>'));
foreach ($this->errors as $name => $message) {
$form_state->setErrorByName($name, $message);
}
}
}
/**
* The #element_validate handler for the source path elements.
*
* Ensures that entered path can be read.
*/
public function validatePaths($element, FormStateInterface $form_state) {
if ($source = $element['#value']) {
$msg = $this->t('Failed to read from @title.', [
'@title' => $element['#title'],
]);
if (UrlHelper::isExternal($source)) {
try {
$this->httpClient
->head($source);
} catch (TransferException $e) {
$msg .= ' ' . $this->t('The server reports the following message: %error.', [
'%error' => $e->getMessage(),
]);
$this->errors[$element['#name']] = $msg;
}
}
elseif (!file_exists($source) || !is_dir($source) || !is_readable($source)) {
$this->errors[$element['#name']] = $msg;
}
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->store
->set('step', 'idconflict');
$form_state->setRedirect('migrate_drupal_ui.upgrade_idconflict');
}
/**
* {@inheritdoc}
*/
public function getConfirmText() {
return $this->t('Review upgrade');
}
/**
* Returns all supported database driver installer objects.
*
* @return \Drupal\Core\Database\Install\Tasks[]
* An array of available database driver installer objects.
*/
protected function getDatabaseTypes() {
// Make sure the install API is available.
include_once DRUPAL_ROOT . '/core/includes/install.inc';
return drupal_get_database_types();
}
/**
* Gets and stores information for this migration in temporary store.
*
* Gets all the migrations, converts each to an array and stores it in the
* form state. The source base path for public and private files is also
* put into form state.
*
* @param \Drupal\Core\Database\Connection $connection
* The database connection used.
* @param string $version
* The Drupal version.
* @param array $database
* Database array representing the source Drupal database.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current state of the form.
*
* @throws \Drupal\Core\TempStore\TempStoreException
* Thrown when a lock for the backend storage could not be acquired.
*/
protected function setupMigrations(Connection $connection, $version, array $database, FormStateInterface $form_state) {
$this->createDatabaseStateSettings($database, $version);
$migrations = $this->getMigrations('migrate_drupal_' . $version, $version);
// Get the system data from source database.
$system_data = $this->getSystemData($connection);
// Convert the migration object into array
// so that it can be stored in form storage.
$migration_array = [];
foreach ($migrations as $migration) {
$migration_array[$migration->id()] = $migration->label();
}
// Store information in the private store.
$this->store
->set('version', $version);
$this->store
->set('migrations', $migration_array);
if ($version == 6) {
$this->store
->set('source_base_path', $form_state->getValue('d6_source_base_path'));
}
else {
$this->store
->set('source_base_path', $form_state->getValue('source_base_path'));
}
$this->store
->set('source_private_file_path', $form_state->getValue('source_private_file_path'));
// Store the retrieved system data in the private store.
$this->store
->set('system_data', $system_data);
}
}
Members
Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|---|
CredentialForm::$errors | protected | property | An array of error information. | |||
CredentialForm::$httpClient | protected | property | The HTTP client to fetch the files with. | |||
CredentialForm::buildForm | public | function | Form constructor. | Overrides MigrateUpgradeFormBase::buildForm | ||
CredentialForm::create | public static | function | Instantiates a new instance of this class. | Overrides MigrateUpgradeFormBase::create | ||
CredentialForm::getConfirmText | public | function | Returns a caption for the button that confirms the action. | Overrides MigrateUpgradeFormBase::getConfirmText | ||
CredentialForm::getDatabaseTypes | protected | function | Returns all supported database driver installer objects. | |||
CredentialForm::getFormId | public | function | Returns a unique string identifying the form. | Overrides FormInterface::getFormId | ||
CredentialForm::setupMigrations | protected | function | Gets and stores information for this migration in temporary store. | |||
CredentialForm::submitForm | public | function | Form submission handler. | Overrides FormInterface::submitForm | ||
CredentialForm::validateForm | public | function | Form validation handler. | Overrides FormBase::validateForm | ||
CredentialForm::validatePaths | public | function | The #element_validate handler for the source path elements. | |||
CredentialForm::__construct | public | function | CredentialForm constructor. | Overrides MigrateUpgradeFormBase::__construct | ||
DependencySerializationTrait::$_entityStorages | protected | property | An array of entity type IDs keyed by the property name of their storages. | |||
DependencySerializationTrait::$_serviceIds | protected | property | An array of service IDs keyed by property name used for serialization. | |||
DependencySerializationTrait::__sleep | public | function | 1 | |||
DependencySerializationTrait::__wakeup | public | function | 2 | |||
FormBase::$requestStack | protected | property | The request stack. | 1 | ||
FormBase::$routeMatch | protected | property | The route match. | |||
FormBase::config | protected | function | Retrieves a configuration object. | |||
FormBase::configFactory | protected | function | Gets the config factory for this form. | 3 | ||
FormBase::container | private | function | Returns the service container. | |||
FormBase::currentUser | protected | function | Gets the current user. | |||
FormBase::getRequest | protected | function | Gets the request object. | |||
FormBase::getRouteMatch | protected | function | Gets the route match. | |||
FormBase::logger | protected | function | Gets the logger for a specific channel. | |||
FormBase::redirect | protected | function | Returns a redirect response object for the specified route. | Overrides UrlGeneratorTrait::redirect | ||
FormBase::resetConfigFactory | public | function | Resets the configuration factory. | |||
FormBase::setConfigFactory | public | function | Sets the config factory for this form. | |||
FormBase::setRequestStack | public | function | Sets the request stack object to use. | |||
LinkGeneratorTrait::$linkGenerator | protected | property | The link generator. | 1 | ||
LinkGeneratorTrait::getLinkGenerator | Deprecated | protected | function | Returns the link generator. | ||
LinkGeneratorTrait::l | Deprecated | protected | function | Renders a link to a route given a route name and its parameters. | ||
LinkGeneratorTrait::setLinkGenerator | Deprecated | public | function | Sets the link generator service. | ||
LoggerChannelTrait::$loggerFactory | protected | property | The logger channel factory service. | |||
LoggerChannelTrait::getLogger | protected | function | Gets the logger for a specific channel. | |||
LoggerChannelTrait::setLoggerFactory | public | function | Injects the logger channel factory. | |||
MessengerTrait::$messenger | protected | property | The messenger. | 17 | ||
MessengerTrait::messenger | public | function | Gets the messenger. | 17 | ||
MessengerTrait::setMessenger | public | function | Sets the messenger. | |||
MigrateUpgradeFormBase::$destinationSiteVersion | protected | property | The destination site major version. | |||
MigrateUpgradeFormBase::$store | protected | property | Private temporary storage. | |||
MigrateUpgradeFormBase::restartUpgradeForm | protected | function | Helper to redirect to the Overview form. | |||
MigrationConfigurationTrait::$configFactory | protected | property | The config factory service. | |||
MigrationConfigurationTrait::$followUpMigrationTags | protected | property | The follow-up migration tags. | |||
MigrationConfigurationTrait::$migrationPluginManager | protected | property | The migration plugin manager service. | |||
MigrationConfigurationTrait::$state | protected | property | The state service. | |||
MigrationConfigurationTrait::createDatabaseStateSettings | protected | function | Creates the necessary state entries for SqlBase::getDatabase() to work. | |||
MigrationConfigurationTrait::getConfigFactory | protected | function | Gets the config factory service. | |||
MigrationConfigurationTrait::getConnection | protected | function | Gets the database connection for the source Drupal database. | |||
MigrationConfigurationTrait::getFollowUpMigrationTags | protected | function | Returns the follow-up migration tags. | |||
MigrationConfigurationTrait::getLegacyDrupalVersion | public static | function | Determines what version of Drupal the source database contains. | |||
MigrationConfigurationTrait::getMigrationPluginManager | protected | function | Gets the migration plugin manager service. | |||
MigrationConfigurationTrait::getMigrations | protected | function | Gets the migrations for import. | |||
MigrationConfigurationTrait::getState | protected | function | Gets the state service. | |||
MigrationConfigurationTrait::getSystemData | protected | function | Gets the system data from the system table of the source Drupal database. | |||
RedirectDestinationTrait::$redirectDestination | protected | property | The redirect destination service. | 1 | ||
RedirectDestinationTrait::getDestinationArray | protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |||
RedirectDestinationTrait::getRedirectDestination | protected | function | Returns the redirect destination service. | |||
RedirectDestinationTrait::setRedirectDestination | public | function | Sets the redirect destination service. | |||
StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | |||
StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | |||
StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | |||
StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | |||
StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | ||
StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. | |||
UrlGeneratorTrait::$urlGenerator | protected | property | The url generator. | |||
UrlGeneratorTrait::getUrlGenerator | Deprecated | protected | function | Returns the URL generator service. | ||
UrlGeneratorTrait::setUrlGenerator | Deprecated | public | function | Sets the URL generator service. | ||
UrlGeneratorTrait::url | Deprecated | protected | function | Generates a URL or path for a specific route based on the given parameters. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.