diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index aed8bc7d94..934b39865c 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -244,7 +244,6 @@ abstract class PhabricatorApplication { } public static function getAllApplications() { - $classes = id(new PhutilSymbolLoader()) ->setAncestorClass(__CLASS__) ->setConcreteOnly(true) @@ -257,6 +256,13 @@ abstract class PhabricatorApplication { $apps[] = $app; } + // Reorder the applications into "application order". Notably, this ensures + // their event handlers register in application order. + $apps = msort($apps, 'getApplicationOrder'); + $apps = mgroup($apps, 'getApplicationGroup'); + $apps = array_select_keys($apps, self::getApplicationGroups()) + $apps; + $apps = array_mergev($apps); + return $apps; } @@ -270,31 +276,24 @@ abstract class PhabricatorApplication { PhabricatorEnv::getEnvConfig('phabricator.uninstalled-applications'); - if (empty($applications)) { - $classes = id(new PhutilSymbolLoader()) - ->setAncestorClass(__CLASS__) - ->setConcreteOnly(true) - ->selectAndLoadSymbols(); - + $all_applications = self::getAllApplications(); $apps = array(); - foreach ($classes as $class) { - - if (isset($uninstalled[$class['name']])) { - continue; - } - - $app = newv($class['name'], array()); + foreach ($all_applications as $app) { + $class = get_class($app); + if (isset($uninstalled[$class])) { + continue; + } - if (!$app->isEnabled()) { + if (!$app->isEnabled()) { continue; - } + } - if (!$show_beta && $app->isBeta()) { + if (!$show_beta && $app->isBeta()) { continue; - } + } - $apps[] = $app; + $apps[] = $app; } $applications = $apps; diff --git a/src/applications/directory/controller/PhabricatorDirectoryController.php b/src/applications/directory/controller/PhabricatorDirectoryController.php index 70391fa2d7..293ead040f 100644 --- a/src/applications/directory/controller/PhabricatorDirectoryController.php +++ b/src/applications/directory/controller/PhabricatorDirectoryController.php @@ -65,8 +65,6 @@ abstract class PhabricatorDirectoryController extends PhabricatorController { continue; } - $tile_group = msort($tile_group, 'getApplicationOrder'); - $is_small_tiles = ($tile_display == PhabricatorApplication::TILE_SHOW) || ($tile_display == PhabricatorApplication::TILE_HIDE); diff --git a/src/applications/meta/controller/PhabricatorApplicationsListController.php b/src/applications/meta/controller/PhabricatorApplicationsListController.php index 80ca3dcbfc..23837e6a17 100644 --- a/src/applications/meta/controller/PhabricatorApplicationsListController.php +++ b/src/applications/meta/controller/PhabricatorApplicationsListController.php @@ -47,6 +47,8 @@ final class PhabricatorApplicationsListController private function buildInstalledApplicationsList(array $applications) { $list = new PhabricatorObjectItemListView(); + $applications = msort($applications, 'getName'); + foreach ($applications as $application) { $item = id(new PhabricatorObjectItemView()) ->setHeader($application->getName())