Commit 22a69328 authored by catch's avatar catch
Browse files

Issue #3225779 by alexpott, srilakshmier, ravi.shankar, daffie: Provide sort...

Issue #3225779 by alexpott, srilakshmier, ravi.shankar, daffie: Provide sort callback on ExtensionList class
parent 5d7ae059
Loading
Loading
Loading
Loading
+16 −0
Changes for core/lib/Drupal/Core/Extension/ExtensionList.php: 16 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -580,4 +580,20 @@ public function checkIncompatibility($name) {
    return $extension->info['core_incompatible'] || (isset($extension->info['php']) && version_compare(phpversion(), $extension->info['php']) < 0);
  }

  /**
   * Array sorting callback; sorts extensions by their name.
   *
   * @param \Drupal\Core\Extension\Extension $a
   *   The first extension to compare.
   * @param \Drupal\Core\Extension\Extension $b
   *   The second extension to compare.
   *
   * @return int
   *   Less than 0 if $a is less than $b, more than 0 if $a is greater than $b,
   *   and 0 if they are equal.
   */
  public static function sortByName(Extension $a, Extension $b): int {
    return strcasecmp($a->info['name'], $b->info['name']);
  }

}
+5 −9
Changes for core/modules/system/src/Controller/AdminController.php: 5 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -44,18 +44,14 @@ public static function create(ContainerInterface $container) {
   *   A render array containing the listing.
   */
  public function index() {
    $module_info = $this->moduleExtensionList->getAllInstalledInfo();
    foreach ($module_info as $module => $info) {
      $module_info[$module] = new \stdClass();
      $module_info[$module]->info = $info;
    }
    $extensions = array_intersect_key($this->moduleExtensionList->getList(), $this->moduleHandler()->getModuleList());

    uasort($module_info, 'system_sort_by_info_name');
    uasort($extensions, [ModuleExtensionList::class, 'sortByName']);
    $menu_items = [];

    foreach ($module_info as $module => $info) {
    foreach ($extensions as $module => $extension) {
      // Only display a section if there are any available tasks.
      if ($admin_tasks = system_get_module_admin_tasks($module, $info->info)) {
      if ($admin_tasks = system_get_module_admin_tasks($module, $extension->info)) {
        // Sort links by title.
        uasort($admin_tasks, ['\Drupal\Component\Utility\SortArray', 'sortByTitleElement']);
        // Move 'Configure permissions' links to the bottom of each section.
@@ -66,7 +62,7 @@ public function index() {
          $admin_tasks[$permission_key] = $permission_task;
        }

        $menu_items[$info->info['name']] = [$info->info['description'], $admin_tasks];
        $menu_items[$extension->info['name']] = [$extension->info['description'], $admin_tasks];
      }
    }

+2 −1
Changes for core/modules/system/src/Controller/SystemController.php: 2 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Extension\ModuleDependencyMessageTrait;
use Drupal\Core\Extension\ModuleExtensionList;
use Drupal\Core\Extension\ThemeExtensionList;
use Drupal\Core\Extension\ThemeHandlerInterface;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Menu\MenuLinkTreeInterface;
@@ -203,7 +204,7 @@ public function themesPage() {
    $config = $this->config('system.theme');
    // Get all available themes.
    $themes = $this->themeHandler->rebuildThemeData();
    uasort($themes, 'system_sort_by_info_name');
    uasort($themes, [ThemeExtensionList::class, 'sortByName']);

    $theme_default = $config->get('default');
    $theme_groups = ['installed' => [], 'uninstalled' => []];
+1 −1
Changes for core/modules/system/src/Form/ModulesListForm.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
      // The module list needs to be reset so that it can re-scan and include
      // any new modules that may have been added directly into the filesystem.
      $modules = $this->moduleExtensionList->reset()->getList();
      uasort($modules, 'system_sort_by_info_name');
      uasort($modules, [ModuleExtensionList::class, 'sortByName']);
    }
    catch (InfoParserException $e) {
      $this->messenger()->addError($this->t('Modules could not be listed due to an error: %error', ['%error' => $e->getMessage()]));
+1 −1
Changes for core/modules/system/src/Form/ModulesUninstallForm.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
    }

    // Sort all modules by their name.
    uasort($uninstallable, 'system_sort_by_info_name');
    uasort($uninstallable, [ModuleExtensionList::class, 'sortByName']);
    $validation_reasons = $this->moduleInstaller->validateUninstall(array_keys($uninstallable));

    $form['uninstall'] = ['#tree' => TRUE];
Loading