function system_update_8601
Fix missing install profile after updating to Drupal 8.6.9 with Drush 8.
File
-
core/
modules/ system/ system.install, line 2528
Code
function system_update_8601() {
$extension_config = \Drupal::configFactory()->getEditable('core.extension');
$install_profile = $extension_config->get('profile');
if (!$install_profile) {
// There's no install profile configured.
return;
}
$modules = $extension_config->get('module');
if (isset($modules[$install_profile])) {
// The install profile is already in the installed module list.
return;
}
// Ensure the install profile is available.
if (!\Drupal::service('extension.list.module')->exists($install_profile)) {
return t('The %install_profile install profile configured in core.extension is not available.', [
'%install_profile' => $install_profile,
]);
}
// Add the install profile to the list of enabled modules.
$modules[$install_profile] = 1000;
$modules = module_config_sort($modules);
$extension_config->set('module', $modules)
->save(TRUE);
// Build a module list from the updated extension configuration.
$current_module_filenames = \Drupal::moduleHandler()->getModuleList();
$current_modules = array_fill_keys(array_keys($current_module_filenames), 0);
$current_modules = module_config_sort(array_merge($current_modules, $extension_config->get('module')));
$module_filenames = [];
foreach ($current_modules as $name => $weight) {
if (isset($current_module_filenames[$name])) {
$module_filenames[$name] = $current_module_filenames[$name];
}
else {
$module_path = \Drupal::service('extension.list.module')->getPath($name);
$pathname = "{$module_path}/{$name}.info.yml";
$filename = file_exists($module_path . "/{$name}.module") ? "{$name}.module" : NULL;
$module_filenames[$name] = new Extension(\Drupal::root(), 'module', $pathname, $filename);
}
}
// Update the module handler list to contain the missing install profile.
\Drupal::moduleHandler()->setModuleList($module_filenames);
\Drupal::moduleHandler()->load($install_profile);
// Clear the static cache of the "extension.list.module" service to pick
// up the new install profile correctly.
\Drupal::service('extension.list.profile')->reset();
// Clear the static cache of the "extension.list.module" service to pick
// up the new module, since it merges the installation status of modules
// into its statically cached list.
\Drupal::service('extension.list.module')->reset();
// Update the kernel to include the missing profile.
\Drupal::service('kernel')->updateModules($module_filenames, $module_filenames);
return t('The %install_profile install profile has been added to the installed module list.', [
'%install_profile' => $install_profile,
]);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.