protected ExtensionDiscovery::sort(array $all_files, array $weights)
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.
File
- core/lib/Drupal/Core/Extension/ExtensionDiscovery.php, line 325
Class
- ExtensionDiscovery
- Discovers available extensions in the filesystem.
Namespace
Drupal\Core\Extension
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | protected function sort( array $all_files , array $weights ) { $origins = array (); $profiles = array (); foreach ( $all_files as $key => $file ) { // If the extension does not belong to a profile, just apply the weight // of the originating directory. if ( strpos ( $file ->subpath, 'profiles' ) !== 0) { $origins [ $key ] = $weights [ $file ->origin]; $profiles [ $key ] = NULL; } // If the extension belongs to a profile but no profile directories are // defined, then we are scanning for installation profiles themselves. // In this case, profiles are sorted by origin only. 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 ( strpos ( $file ->getPath(), $profile_path ) === 0) { $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 ; } |
Please login to continue.