function UpdateRegistry::onConfigSave
Same name in other branches
- 9 core/lib/Drupal/Core/Update/UpdateRegistry.php \Drupal\Core\Update\UpdateRegistry::onConfigSave()
- 11.x core/lib/Drupal/Core/Update/UpdateRegistry.php \Drupal\Core\Update\UpdateRegistry::onConfigSave()
Processes the list of installed extensions when core.extension changes.
Parameters
\Drupal\Core\Config\ConfigCrudEvent $event: The Event to process.
File
-
core/
lib/ Drupal/ Core/ Update/ UpdateRegistry.php, line 341
Class
- UpdateRegistry
- Provides all and missing update implementations.
Namespace
Drupal\Core\UpdateCode
public function onConfigSave(ConfigCrudEvent $event) {
$config = $event->getConfig();
if ($config->getName() === 'core.extension') {
// Build the old extension configuration list from configuration rather
// than using $this->enabledExtensions. This ensures that if the
// UpdateRegistry is constructed after _drupal_maintenance_theme() has
// added a theme to the theme handler it will not be considered as already
// installed.
$old_extension_list = array_keys($config->getOriginal('module') ?? []);
$new_extension_list = array_keys($config->get('module'));
if ($this->includeThemes()) {
$new_extension_list = array_merge($new_extension_list, array_keys($config->get('theme')));
$old_extension_list = array_merge($old_extension_list, array_keys($config->getOriginal('theme') ?? []));
}
// The list of extensions installed or uninstalled. In regular operation
// only one of the lists will have a single value. This is because Drupal
// can only install one extension at a time.
$uninstalled_extensions = array_diff($old_extension_list, $new_extension_list);
$installed_extensions = array_diff($new_extension_list, $old_extension_list);
// Set the list of enabled extensions correctly so update function
// discovery works as expected.
$this->enabledExtensions = $new_extension_list;
foreach ($uninstalled_extensions as $uninstalled_extension) {
$this->filterOutInvokedUpdatesByExtension($uninstalled_extension);
}
foreach ($installed_extensions as $installed_extension) {
// Ensure that all post_update functions are registered already. This
// should include existing post-updates, as well as any specified as
// having been previously removed, to ensure that newly installed and
// updated sites have the same entries in the registry.
$this->registerInvokedUpdates(array_merge($this->getUpdateFunctions($installed_extension), array_keys($this->getRemovedPostUpdates($installed_extension))));
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.