From 57ff0a80aa1e06e3d3b0f878db3da45e4a83a5c7 Mon Sep 17 00:00:00 2001 From: epriestley Date: Sun, 3 Feb 2013 09:26:25 -0800 Subject: [PATCH] Return applications in application order Summary: By default, order applications in application order. See discussion in D4708. Principally, this is intended to make sure that application event handlers are registered in order, and thus fire in order. Test Plan: Looked at /applications/, homepage tiles, verified they both still work. I didn't actually test the event handler bit since it's fairly complicated to test blind; D4708 should provide a test case. Reviewers: btrahan, Afaque_Hussain Reviewed By: Afaque_Hussain CC: aran Differential Revision: https://secure.phabricator.com/D4791 --- .../base/PhabricatorApplication.php | 37 +++++++++---------- .../PhabricatorDirectoryController.php | 2 - .../PhabricatorApplicationsListController.php | 2 + 3 files changed, 20 insertions(+), 21 deletions(-) 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()) -- 2.54.0