function ExtensionDiscovery::sort
Same name in other branches
- 9 core/lib/Drupal/Core/Extension/ExtensionDiscovery.php \Drupal\Core\Extension\ExtensionDiscovery::sort()
- 8.9.x core/lib/Drupal/Core/Extension/ExtensionDiscovery.php \Drupal\Core\Extension\ExtensionDiscovery::sort()
- 11.x core/lib/Drupal/Core/Extension/ExtensionDiscovery.php \Drupal\Core\Extension\ExtensionDiscovery::sort()
Sorts the discovered extensions.
Parameters
\Drupal\Core\Extension\Extension[] $all_files: The list of all extensions.
array $weights: An array of weights, keyed by originating directory.
Return value
\Drupal\Core\Extension\Extension[] The sorted list of extensions.
1 call to ExtensionDiscovery::sort()
- ExtensionDiscovery::scan in core/
lib/ Drupal/ Core/ Extension/ ExtensionDiscovery.php - Discovers available extensions of a given type.
File
-
core/
lib/ Drupal/ Core/ Extension/ ExtensionDiscovery.php, line 323
Class
- ExtensionDiscovery
- Discovers available extensions in the filesystem.
Namespace
Drupal\Core\ExtensionCode
protected function sort(array $all_files, array $weights) {
$origins = [];
$profiles = [];
foreach ($all_files as $key => $file) {
// If the extension does not belong to a profile, just apply the weight
// of the originating directory.
if (!str_starts_with($file->subpath, 'profiles')) {
$origins[$key] = $weights[$file->origin];
$profiles[$key] = NULL;
}
elseif (empty($this->profileDirectories)) {
$origins[$key] = static::ORIGIN_PROFILE;
$profiles[$key] = NULL;
}
else {
// Apply the weight of the originating profile directory.
foreach ($this->profileDirectories as $weight => $profile_path) {
if (str_starts_with($file->getPath(), $profile_path)) {
$origins[$key] = static::ORIGIN_PROFILE;
$profiles[$key] = $weight;
continue 2;
}
}
}
}
// Now sort the extensions by origin and installation profile(s).
// The result of this multisort can be depicted like the following matrix,
// whereas the first integer is the weight of the originating directory and
// the second is the weight of the originating installation profile:
// 0 core/modules/node/node.module
// 1 0 profiles/parent_profile/modules/parent_module/parent_module.module
// 1 1 core/profiles/testing/modules/compatible_test/compatible_test.module
// 2 sites/all/modules/common/common.module
// 3 modules/devel/devel.module
// 4 sites/default/modules/custom/custom.module
array_multisort($origins, SORT_ASC, $profiles, SORT_ASC, $all_files);
return $all_files;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.