function system_update_8805 in Drupal 8
Change the provider of the 'path_alias' entity type and its base fields.
File
- core/
modules/ system/ system.install, line 2763 - Install, update and uninstall functions for the system module.
Code
function system_update_8805() {
// If the path alias module is not installed, it means that
// system_update_8803() ran as part of Drupal 8.8.0-alpha1, in which case we
// need to enable the module and change the provider of the 'path_alias'
// entity type.
if (!\Drupal::moduleHandler()
->moduleExists('path_alias')) {
\Drupal::service('module_installer')
->install([
'path_alias',
], FALSE);
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
$last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
$entity_type = $last_installed_schema_repository
->getLastInstalledDefinition('path_alias');
// Set the new class for the entity type.
$entity_type
->setClass(PathAlias::class);
// Set the new provider for the entity type.
$reflection = new ReflectionClass($entity_type);
$property = $reflection
->getProperty('provider');
$property
->setAccessible(TRUE);
$property
->setValue($entity_type, 'path_alias');
$last_installed_schema_repository
->setLastInstalledDefinition($entity_type);
$field_storage_definitions = $last_installed_schema_repository
->getLastInstalledFieldStorageDefinitions('path_alias');
foreach ($field_storage_definitions as $field_storage_definition) {
if ($field_storage_definition
->isBaseField()) {
$field_storage_definition
->setProvider('path_alias');
$last_installed_schema_repository
->setLastInstalledFieldStorageDefinition($field_storage_definition);
}
}
}
}