diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
index 938073273b..ebe44f0f89 100644
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -82,6 +82,13 @@ abstract class PhabricatorApplication
return false;
}
+ /**
+ * Return true if this application should not appear in application lists in
+ * the UI. Primarily intended for unit test applications or other
+ * pseudo-applications.
+ *
+ * @return bool True to remove application from UI lists.
+ */
public function isUnlisted() {
return false;
}
@@ -89,6 +96,8 @@ abstract class PhabricatorApplication
/**
* Returns true if an application is first-party (developed by Phacility)
* and false otherwise.
+ *
+ * @return bool True if this application is developed by Phacility.
*/
final public function isFirstParty() {
$where = id(new ReflectionClass($this))->getFileName();
diff --git a/src/applications/meta/controller/PhabricatorApplicationsListController.php b/src/applications/meta/controller/PhabricatorApplicationsListController.php
index 5a05aee538..0a358fecc1 100644
--- a/src/applications/meta/controller/PhabricatorApplicationsListController.php
+++ b/src/applications/meta/controller/PhabricatorApplicationsListController.php
@@ -30,10 +30,6 @@ final class PhabricatorApplicationsListController
$applications = msort($applications, 'getName');
foreach ($applications as $application) {
- if ($application->isUnlisted()) {
- continue;
- }
-
$item = id(new PHUIObjectItemView())
->setHeader($application->getName())
->setHref('/applications/view/'.get_class($application).'/')
diff --git a/src/applications/meta/query/PhabricatorAppSearchEngine.php b/src/applications/meta/query/PhabricatorAppSearchEngine.php
index 9824664948..d3c82e6d79 100644
--- a/src/applications/meta/query/PhabricatorAppSearchEngine.php
+++ b/src/applications/meta/query/PhabricatorAppSearchEngine.php
@@ -21,7 +21,8 @@ final class PhabricatorAppSearchEngine
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
$query = id(new PhabricatorApplicationQuery())
- ->setOrder(PhabricatorApplicationQuery::ORDER_NAME);
+ ->setOrder(PhabricatorApplicationQuery::ORDER_NAME)
+ ->withUnlisted(false);
$name = $saved->getParameter('name');
if (strlen($name)) {
diff --git a/src/applications/meta/query/PhabricatorApplicationQuery.php b/src/applications/meta/query/PhabricatorApplicationQuery.php
index c15ece6eb6..30106cd1f2 100644
--- a/src/applications/meta/query/PhabricatorApplicationQuery.php
+++ b/src/applications/meta/query/PhabricatorApplicationQuery.php
@@ -7,6 +7,7 @@ final class PhabricatorApplicationQuery
private $beta;
private $firstParty;
private $nameContains;
+ private $unlisted;
private $classes;
private $phids;
@@ -35,6 +36,11 @@ final class PhabricatorApplicationQuery
return $this;
}
+ public function withUnlisted($unlisted) {
+ $this->unlisted = $unlisted;
+ return $this;
+ }
+
public function withClasses(array $classes) {
$this->classes = $classes;
return $this;
@@ -103,6 +109,14 @@ final class PhabricatorApplicationQuery
}
}
+ if ($this->unlisted !== null) {
+ foreach ($apps as $key => $app) {
+ if ($app->isUnlisted() != $this->unlisted) {
+ unset($apps[$key]);
+ }
+ }
+ }
+
switch ($this->order) {
case self::ORDER_NAME:
$apps = msort($apps, 'getName');
diff --git a/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php b/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
index 37480acf35..13a46ba0ef 100644
--- a/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
+++ b/src/applications/settings/panel/PhabricatorSettingsPanelHomePreferences.php
@@ -21,7 +21,11 @@ final class PhabricatorSettingsPanelHomePreferences
require_celerity_resource('phabricator-settings-css');
- $apps = PhabricatorApplication::getAllInstalledApplications();
+ $apps = id(new PhabricatorApplicationQuery())
+ ->setViewer($user)
+ ->withUnlisted(false)
+ ->execute();
+
$pref_tiles = PhabricatorUserPreferences::PREFERENCE_APP_TILES;
$tiles = $preferences->getPreference($pref_tiles, array());
@@ -137,7 +141,7 @@ final class PhabricatorSettingsPanelHomePreferences
));
$app_column = hsprintf(
- "%s
Default: %s"
+ "%s
Default: %s"
, $app->getName(), $default_name);
$rows[] = array(
@@ -176,14 +180,12 @@ final class PhabricatorSettingsPanelHomePreferences
$panel = id(new AphrontPanelView())
- ->setHeader($group_name)
- ->addClass('phabricator-settings-panelview')
- ->appendChild($table)
- ->setNoBackground();
-
+ ->setHeader($group_name)
+ ->addClass('phabricator-settings-panelview')
+ ->appendChild($table)
+ ->setNoBackground();
$output[] = $panel;
-
}
$form
@@ -205,9 +207,7 @@ final class PhabricatorSettingsPanelHomePreferences
->setFormError($error_view)
->setForm($form);
- return array(
- $form_box,
- );
+ return $form_box;
}
}