function _system_rebuild_module_data in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/modules/system/system.module \_system_rebuild_module_data()
Helper function to scan and collect module .info.yml data.
Return value
\Drupal\Core\Extension\Extension[] An associative array of module information.
4 calls to _system_rebuild_module_data()
- BookUninstallTest::testBookUninstall in core/
modules/ book/ src/ Tests/ BookUninstallTest.php - Tests the book_system_info_alter() method.
- FilterAPITest::testDependencyRemoval in core/
modules/ filter/ src/ Tests/ FilterAPITest.php - Tests that filter format dependency removal works.
- FilterFormTest::testFilterForm in core/
modules/ filter/ src/ Tests/ FilterFormTest.php - Tests various different configurations of the 'text_format' element.
- system_rebuild_module_data in core/
modules/ system/ system.module - Rebuild, save, and return data about all currently available modules.
File
- core/
modules/ system/ system.module, line 925 - Configuration system that lets administrators modify the workings of the site.
Code
function _system_rebuild_module_data() {
$listing = new ExtensionDiscovery(\Drupal::root());
// Find installation profiles. This needs to happen before performing a
// module scan as the module scan requires knowing what the active profile is.
// @todo Remove as part of https://www.drupal.org/node/2186491.
$profiles = $listing
->scan('profile');
$profile = drupal_get_profile();
if ($profile && isset($profiles[$profile])) {
// Prime the drupal_get_filename() static cache with the profile info file
// location so we can use drupal_get_path() on the active profile during
// the module scan.
// @todo Remove as part of https://www.drupal.org/node/2186491.
drupal_get_filename('profile', $profile, $profiles[$profile]
->getPathname());
}
// Find modules.
$modules = $listing
->scan('module');
// Include the installation profile in modules that are loaded.
if ($profile) {
$modules[$profile] = $profiles[$profile];
// Installation profile hooks are always executed last.
$modules[$profile]->weight = 1000;
}
// Set defaults for module info.
$defaults = array(
'dependencies' => array(),
'description' => '',
'package' => 'Other',
'version' => NULL,
'php' => DRUPAL_MINIMUM_PHP,
);
// Read info files for each module.
foreach ($modules as $key => $module) {
// Look for the info file.
$module->info = \Drupal::service('info_parser')
->parse($module
->getPathname());
// Add the info file modification time, so it becomes available for
// contributed modules to use for ordering module lists.
$module->info['mtime'] = $module
->getMTime();
// Merge in defaults and save.
$modules[$key]->info = $module->info + $defaults;
// Installation profiles are hidden by default, unless explicitly specified
// otherwise in the .info.yml file.
if ($key == $profile && !isset($modules[$key]->info['hidden'])) {
$modules[$key]->info['hidden'] = TRUE;
}
// Invoke hook_system_info_alter() to give installed modules a chance to
// modify the data in the .info.yml files if necessary.
// @todo Remove $type argument, obsolete with $module->getType().
$type = 'module';
\Drupal::moduleHandler()
->alter('system_info', $modules[$key]->info, $modules[$key], $type);
}
// It is possible that a module was marked as required by
// hook_system_info_alter() and modules that it depends on are not required.
foreach ($modules as $module) {
_system_rebuild_module_data_ensure_required($module, $modules);
}
if ($profile && isset($modules[$profile])) {
// The installation profile is required, if it's a valid module.
$modules[$profile]->info['required'] = TRUE;
// Add a default distribution name if the profile did not provide one.
// @see install_profile_info()
// @see drupal_install_profile_distribution_name()
if (!isset($modules[$profile]->info['distribution']['name'])) {
$modules[$profile]->info['distribution']['name'] = 'Drupal';
}
}
return $modules;
}