Page MenuHomestyx hydra

No OneTemporary

diff --git a/src/applications/audit/application/PhabricatorApplicationAudit.php b/src/applications/audit/application/PhabricatorApplicationAudit.php
index ee3502f87a..a229f0d990 100644
--- a/src/applications/audit/application/PhabricatorApplicationAudit.php
+++ b/src/applications/audit/application/PhabricatorApplicationAudit.php
@@ -1,88 +1,92 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationAudit extends PhabricatorApplication {
public function getShortDescription() {
return 'Audit Code';
}
public function getBaseURI() {
return '/audit/';
}
public function getAutospriteName() {
return 'audit';
}
public function getRoutes() {
return array(
'/audit/' => array(
'' => 'PhabricatorAuditListController',
'view/(?P<filter>[^/]+)/(?:(?P<name>[^/]+)/)?'
=> 'PhabricatorAuditListController',
'addcomment/' => 'PhabricatorAuditAddCommentController',
'preview/(?P<id>\d+)/' => 'PhabricatorAuditPreviewController',
),
);
}
- public function getCoreApplicationOrder() {
+ public function getApplicationGroup() {
+ return self::GROUP_CORE;
+ }
+
+ public function getApplicationOrder() {
return 0.130;
}
public function loadStatus(PhabricatorUser $user) {
$status = array();
$phids = PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($user);
$audits = id(new PhabricatorAuditQuery())
->withAuditorPHIDs($phids)
->withStatus(PhabricatorAuditQuery::STATUS_OPEN)
->withAwaitingUser($user)
->execute();
$count = count($audits);
$type = $count
? PhabricatorApplicationStatusView::TYPE_INFO
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Commit(s) Awaiting Audit', $count))
->setCount($count);
$commits = id(new PhabricatorAuditCommitQuery())
->withAuthorPHIDs($phids)
->withStatus(PhabricatorAuditQuery::STATUS_OPEN)
->execute();
$count = count($commits);
$type = $count
? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Problem Commit(s)', $count))
->setCount($count);
return $status;
}
}
diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
index 1c5f23eef2..657739ef54 100644
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -1,181 +1,205 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @task info Application Information
* @task ui UI Integration
* @task uri URI Routing
* @task fact Fact Integration
* @task meta Application Management
* @group apps
*/
abstract class PhabricatorApplication {
+ const GROUP_CORE = 'core';
+ const GROUP_COMMUNICATION = 'communication';
+ const GROUP_ORGANIZATION = 'organization';
+ const GROUP_UTILITIES = 'util';
+ const GROUP_ADMIN = 'admin';
+ const GROUP_DEVELOPER = 'developer';
+ const GROUP_MISC = 'misc';
+
+ public static function getApplicationGroups() {
+ return array(
+ self::GROUP_CORE => pht('Core Applications'),
+ self::GROUP_COMMUNICATION => pht('Communication'),
+ self::GROUP_ORGANIZATION => pht('Organization'),
+ self::GROUP_UTILITIES => pht('Utilities'),
+ self::GROUP_ADMIN => pht('Administration'),
+ self::GROUP_DEVELOPER => pht('Developer Tools'),
+ self::GROUP_MISC => pht('Miscellaneous Applications'),
+ );
+ }
+
/* -( Application Information )-------------------------------------------- */
public function getName() {
return substr(get_class($this), strlen('PhabricatorApplication'));
}
public function getShortDescription() {
return $this->getName().' Application';
}
public function isEnabled() {
return true;
}
public function getPHID() {
return 'PHID-APPS-'.get_class($this);
}
public function getTypeaheadURI() {
return $this->getBaseURI();
}
public function getBaseURI() {
return null;
}
public function getIconURI() {
return null;
}
public function getAutospriteName() {
return 'default';
}
public function shouldAppearInLaunchView() {
return true;
}
- public function getCoreApplicationOrder() {
- return null;
+ public function getApplicationOrder() {
+ return PHP_INT_MAX;
+ }
+
+ public function getApplicationGroup() {
+ return self::GROUP_MISC;
}
public function getTitleGlyph() {
return null;
}
public function getHelpURI() {
// TODO: When these applications get created, link to their docs:
//
// - Drydock
// - OAuth Server
return null;
}
public function getEventListeners() {
return array();
}
/* -( URI Routing )-------------------------------------------------------- */
public function getRoutes() {
return array();
}
/* -( Fact Integration )--------------------------------------------------- */
public function getFactObjectsForAnalysis() {
return array();
}
/* -( UI Integration )----------------------------------------------------- */
/**
* Render status elements (like "3 Waiting Reviews") for application list
* views. These provide a way to alert users to new or pending action items
* in applications.
*
* @param PhabricatorUser Viewing user.
* @return list<PhabricatorApplicationStatusView> Application status elements.
* @task ui
*/
public function loadStatus(PhabricatorUser $user) {
return array();
}
/**
* You can provide an optional piece of flavor text for the application. This
* is currently rendered in application launch views if the application has no
* status elements.
*
* @return string|null Flavor text.
* @task ui
*/
public function getFlavorText() {
return null;
}
/**
* Build items for the main menu.
*
* @param PhabricatorUser The viewing user.
* @param AphrontController The current controller. May be null for special
* pages like 404, exception handlers, etc.
* @return list<PhabricatorMainMenuIconView> List of menu items.
* @task ui
*/
public function buildMainMenuItems(
PhabricatorUser $user,
PhabricatorController $controller = null) {
return array();
}
/* -( Application Management )--------------------------------------------- */
public static function getAllInstalledApplications() {
static $applications;
if (empty($applications)) {
$classes = id(new PhutilSymbolLoader())
->setAncestorClass(__CLASS__)
->setConcreteOnly(true)
->selectAndLoadSymbols();
$apps = array();
foreach ($classes as $class) {
$app = newv($class['name'], array());
if (!$app->isEnabled()) {
continue;
}
$apps[] = $app;
}
$applications = $apps;
}
return $applications;
}
}
diff --git a/src/applications/conduit/application/PhabricatorApplicationConduit.php b/src/applications/conduit/application/PhabricatorApplicationConduit.php
index e89f25cdd2..3c393fdcd2 100644
--- a/src/applications/conduit/application/PhabricatorApplicationConduit.php
+++ b/src/applications/conduit/application/PhabricatorApplicationConduit.php
@@ -1,55 +1,63 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationConduit extends PhabricatorApplication {
public function getBaseURI() {
return '/conduit/';
}
public function getAutospriteName() {
return 'conduit';
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink(
'article/Conduit_Technical_Documentation.html');
}
public function getShortDescription() {
return 'Conduit API Console';
}
public function getTitleGlyph() {
return "\xE2\x87\xB5";
}
+ public function getApplicationGroup() {
+ return self::GROUP_DEVELOPER;
+ }
+
+ public function getApplicationOrder() {
+ return 0.100;
+ }
+
public function getRoutes() {
return array(
'/conduit/' => array(
'' => 'PhabricatorConduitListController',
'method/(?P<method>[^/]+)/' => 'PhabricatorConduitConsoleController',
'log/' => 'PhabricatorConduitLogController',
'log/view/(?P<view>[^/]+)/' => 'PhabricatorConduitLogController',
'token/' => 'PhabricatorConduitTokenController',
),
'/api/(?P<method>[^/]+)' => 'PhabricatorConduitAPIController',
);
}
}
diff --git a/src/applications/countdown/application/PhabricatorApplicationCountdown.php b/src/applications/countdown/application/PhabricatorApplicationCountdown.php
index 255a02e206..f7e9868086 100644
--- a/src/applications/countdown/application/PhabricatorApplicationCountdown.php
+++ b/src/applications/countdown/application/PhabricatorApplicationCountdown.php
@@ -1,56 +1,60 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationCountdown extends PhabricatorApplication {
public function getBaseURI() {
return '/countdown/';
}
public function getAutospriteName() {
return 'countdown';
}
public function getShortDescription() {
return 'Countdown Timers';
}
public function getTitleGlyph() {
return "\xE2\x9A\xB2";
}
public function getFlavorText() {
return pht('Utilize the full capabilities of your ALU.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/countdown/' => array(
''
=> 'PhabricatorCountdownListController',
'(?P<id>\d+)/'
=> 'PhabricatorCountdownViewController',
'edit/(?:(?P<id>\d+)/)?'
=> 'PhabricatorCountdownEditController',
'delete/(?P<id>\d+)/'
=> 'PhabricatorCountdownDeleteController'
),
);
}
}
diff --git a/src/applications/daemon/application/PhabricatorApplicationDaemons.php b/src/applications/daemon/application/PhabricatorApplicationDaemons.php
index c2209a4ab9..841afe1463 100644
--- a/src/applications/daemon/application/PhabricatorApplicationDaemons.php
+++ b/src/applications/daemon/application/PhabricatorApplicationDaemons.php
@@ -1,59 +1,63 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationDaemons extends PhabricatorApplication {
public function getName() {
return 'Daemon Console';
}
public function getShortDescription() {
return 'Manage Daemons';
}
public function getBaseURI() {
return '/daemon/';
}
public function getTitleGlyph() {
return "\xE2\x98\xAF";
}
public function getAutospriteName() {
return 'daemons';
}
+ public function getApplicationGroup() {
+ return self::GROUP_ADMIN;
+ }
+
public function getRoutes() {
return array(
'/daemon/' => array(
'task/(?P<id>\d+)/' => 'PhabricatorWorkerTaskDetailController',
'task/(?P<id>\d+)/(?P<action>[^/]+)/'
=> 'PhabricatorWorkerTaskUpdateController',
'log/' => array(
'(?P<running>running/)?' => 'PhabricatorDaemonLogListController',
'combined/' => 'PhabricatorDaemonCombinedLogController',
'(?P<id>\d+)/' => 'PhabricatorDaemonLogViewController',
),
'timeline/' => 'PhabricatorDaemonTimelineConsoleController',
'timeline/(?P<id>\d+)/' => 'PhabricatorDaemonTimelineEventController',
'' => 'PhabricatorDaemonConsoleController',
),
);
}
}
diff --git a/src/applications/differential/application/PhabricatorApplicationDifferential.php b/src/applications/differential/application/PhabricatorApplicationDifferential.php
index 79c6b98a15..b327153aa8 100644
--- a/src/applications/differential/application/PhabricatorApplicationDifferential.php
+++ b/src/applications/differential/application/PhabricatorApplicationDifferential.php
@@ -1,106 +1,110 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationDifferential extends PhabricatorApplication {
public function getBaseURI() {
return '/differential/';
}
public function getShortDescription() {
return 'Review Code';
}
public function getAutospriteName() {
return 'differential';
}
public function getFactObjectsForAnalysis() {
return array(
new DifferentialRevision(),
);
}
public function getRoutes() {
return array(
'/D(?P<id>\d+)' => 'DifferentialRevisionViewController',
'/differential/' => array(
'' => 'DifferentialRevisionListController',
'filter/(?P<filter>\w+)/(?:(?P<username>[\w\.-_]+)/)?' =>
'DifferentialRevisionListController',
'stats/(?P<filter>\w+)/' => 'DifferentialRevisionStatsController',
'diff/' => array(
'(?P<id>\d+)/' => 'DifferentialDiffViewController',
'create/' => 'DifferentialDiffCreateController',
),
'changeset/' => 'DifferentialChangesetViewController',
'revision/edit/(?:(?P<id>\d+)/)?'
=> 'DifferentialRevisionEditController',
'comment/' => array(
'preview/(?P<id>\d+)/' => 'DifferentialCommentPreviewController',
'save/' => 'DifferentialCommentSaveController',
'inline/' => array(
'preview/(?P<id>\d+)/' =>
'DifferentialInlineCommentPreviewController',
'edit/(?P<id>\d+)/' => 'DifferentialInlineCommentEditController',
),
),
'subscribe/(?P<action>add|rem)/(?P<id>\d+)/'
=> 'DifferentialSubscribeController',
),
);
}
- public function getCoreApplicationOrder() {
+ public function getApplicationGroup() {
+ return self::GROUP_CORE;
+ }
+
+ public function getApplicationOrder() {
return 0.100;
}
public function loadStatus(PhabricatorUser $user) {
$revisions = id(new DifferentialRevisionQuery())
->withResponsibleUsers(array($user->getPHID()))
->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
->execute();
list($active, $waiting) = DifferentialRevisionQuery::splitResponsible(
$revisions,
$user->getPHID());
$status = array();
$active = count($active);
$type = $active
? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Review(s) Need Attention', $active))
->setCount($active);
$waiting = count($waiting);
$type = $waiting
? PhabricatorApplicationStatusView::TYPE_INFO
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Review(s) Waiting on Others', $waiting));
return $status;
}
}
diff --git a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
index 0051166bfe..d5ae8c24ee 100644
--- a/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
+++ b/src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
@@ -1,90 +1,94 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationDiffusion extends PhabricatorApplication {
public function getShortDescription() {
return 'Repository Browser';
}
public function getBaseURI() {
return '/diffusion/';
}
public function getAutospriteName() {
return 'diffusion';
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html');
}
public function getFactObjectsForAnalysis() {
return array(
new PhabricatorRepositoryCommit(),
);
}
public function getRoutes() {
return array(
'/r(?P<callsign>[A-Z]+)(?P<commit>[a-z0-9]+)'
=> 'DiffusionCommitController',
'/diffusion/' => array(
'' => 'DiffusionHomeController',
'(?P<callsign>[A-Z]+)/' => array(
'' => 'DiffusionRepositoryController',
'repository/(?P<dblob>.*)' => 'DiffusionRepositoryController',
'change/(?P<dblob>.*)' => 'DiffusionChangeController',
'history/(?P<dblob>.*)' => 'DiffusionHistoryController',
'browse/(?P<dblob>.*)' => 'DiffusionBrowseController',
'lastmodified/(?P<dblob>.*)' => 'DiffusionLastModifiedController',
'diff/' => 'DiffusionDiffController',
'tags/(?P<dblob>.*)' => 'DiffusionTagListController',
'branches/(?P<dblob>.*)' => 'DiffusionBranchTableController',
'commit/(?P<commit>[a-z0-9]+)/branches/'
=> 'DiffusionCommitBranchesController',
'commit/(?P<commit>[a-z0-9]+)/tags/'
=> 'DiffusionCommitTagsController',
'commit/(?P<commit>[a-z0-9]+)/edit/'
=> 'DiffusionCommitEditController',
),
'inline/' => array(
'edit/(?P<phid>[^/]+)/' => 'DiffusionInlineCommentController',
'preview/(?P<phid>[^/]+)/' =>
'DiffusionInlineCommentPreviewController',
),
'services/' => array(
'path/' => array(
'complete/' => 'DiffusionPathCompleteController',
'validate/' => 'DiffusionPathValidateController',
),
),
'symbol/(?P<name>[^/]+)/' => 'DiffusionSymbolController',
'external/' => 'DiffusionExternalController',
),
);
}
- public function getCoreApplicationOrder() {
+ public function getApplicationGroup() {
+ return self::GROUP_CORE;
+ }
+
+ public function getApplicationOrder() {
return 0.120;
}
}
diff --git a/src/applications/diviner/application/PhabricatorApplicationDiviner.php b/src/applications/diviner/application/PhabricatorApplicationDiviner.php
index a8c786cc1b..a15ad514a5 100644
--- a/src/applications/diviner/application/PhabricatorApplicationDiviner.php
+++ b/src/applications/diviner/application/PhabricatorApplicationDiviner.php
@@ -1,69 +1,73 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationDiviner extends PhabricatorApplication {
public function getBaseURI() {
return '/diviner/';
}
public function getAutospriteName() {
return 'diviner';
}
public function getShortDescription() {
return 'Documentation';
}
public function getTitleGlyph() {
return "\xE2\x97\x89";
}
public function getRoutes() {
return array(
'/diviner/' => 'DivinerListController',
);
}
+ public function getApplicationGroup() {
+ return self::GROUP_COMMUNICATION;
+ }
+
public function buildMainMenuItems(
PhabricatorUser $user,
PhabricatorController $controller = null) {
$items = array();
$application = null;
if ($controller) {
$application = $controller->getCurrentApplication();
}
if ($application && $application->getHelpURI()) {
$class = 'main-menu-item-icon-help';
$item = new PhabricatorMainMenuIconView();
$item->setName(pht('%s Help', $application->getName()));
$item->addClass('autosprite main-menu-item-icon '.$class);
$item->setHref($application->getHelpURI());
$item->setSortOrder(0.1);
$items[] = $item;
}
return $items;
}
}
diff --git a/src/applications/fact/application/PhabricatorApplicationFact.php b/src/applications/fact/application/PhabricatorApplicationFact.php
index d39c2580a3..4f2fb42ea8 100644
--- a/src/applications/fact/application/PhabricatorApplicationFact.php
+++ b/src/applications/fact/application/PhabricatorApplicationFact.php
@@ -1,42 +1,46 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationFact extends PhabricatorApplication {
public function getShortDescription() {
return 'Analyze Data';
}
public function getBaseURI() {
return '/fact/';
}
public function getAutospriteName() {
return 'fact';
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/fact/' => array(
'' => 'PhabricatorFactHomeController',
'chart/' => 'PhabricatorFactChartController',
),
);
}
}
diff --git a/src/applications/files/application/PhabricatorApplicationFiles.php b/src/applications/files/application/PhabricatorApplicationFiles.php
index 7ab3ae6a5b..77e3fdbffc 100644
--- a/src/applications/files/application/PhabricatorApplicationFiles.php
+++ b/src/applications/files/application/PhabricatorApplicationFiles.php
@@ -1,60 +1,64 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationFiles extends PhabricatorApplication {
public function getBaseURI() {
return '/file/';
}
public function getShortDescription() {
return 'Store and Share Files';
}
public function getAutospriteName() {
return 'files';
}
public function getTitleGlyph() {
return "\xE2\x87\xAA";
}
public function getFlavorText() {
return pht('Blob store for Pokemon pictures.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/F(?P<id>\d+)' => 'PhabricatorFileShortcutController',
'/file/' => array(
'' => 'PhabricatorFileListController',
'filter/(?P<filter>\w+)/' => 'PhabricatorFileListController',
'upload/' => 'PhabricatorFileUploadController',
'dropupload/' => 'PhabricatorFileDropUploadController',
'delete/(?P<id>\d+)/' => 'PhabricatorFileDeleteController',
'info/(?P<phid>[^/]+)/' => 'PhabricatorFileInfoController',
'data/(?P<key>[^/]+)/(?P<phid>[^/]+)/.*'
=> 'PhabricatorFileDataController',
'proxy/' => 'PhabricatorFileProxyController',
'xform/(?P<transform>[^/]+)/(?P<phid>[^/]+)/'
=> 'PhabricatorFileTransformController',
),
);
}
}
diff --git a/src/applications/flag/application/PhabricatorApplicationFlags.php b/src/applications/flag/application/PhabricatorApplicationFlags.php
index e6721ec522..63471a62f9 100644
--- a/src/applications/flag/application/PhabricatorApplicationFlags.php
+++ b/src/applications/flag/application/PhabricatorApplicationFlags.php
@@ -1,70 +1,74 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationFlags extends PhabricatorApplication {
public function getShortDescription() {
return 'Reminders';
}
public function getBaseURI() {
return '/flag/';
}
public function getAutospriteName() {
return 'flags';
}
public function getEventListeners() {
return array(
new PhabricatorFlagsUIEventListener(),
);
}
+ public function getApplicationGroup() {
+ return self::GROUP_ORGANIZATION;
+ }
+
public function loadStatus(PhabricatorUser $user) {
$status = array();
$flags = id(new PhabricatorFlagQuery())
->withOwnerPHIDs(array($user->getPHID()))
->execute();
$count = count($flags);
$type = $count
? PhabricatorApplicationStatusView::TYPE_INFO
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Flagged Object(s)', $count))
->setCount($count);
return $status;
}
public function getRoutes() {
return array(
'/flag/' => array(
'' => 'PhabricatorFlagListController',
'view/(?P<view>[^/]+)/' => 'PhabricatorFlagListController',
'edit/(?P<phid>[^/]+)/' => 'PhabricatorFlagEditController',
'delete/(?P<id>\d+)/' => 'PhabricatorFlagDeleteController',
),
);
}
}
diff --git a/src/applications/herald/application/PhabricatorApplicationHerald.php b/src/applications/herald/application/PhabricatorApplicationHerald.php
index 943ae9ca07..41dea836fc 100644
--- a/src/applications/herald/application/PhabricatorApplicationHerald.php
+++ b/src/applications/herald/application/PhabricatorApplicationHerald.php
@@ -1,64 +1,68 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationHerald extends PhabricatorApplication {
public function getBaseURI() {
return '/herald/';
}
public function getAutospriteName() {
return 'herald';
}
public function getShortDescription() {
return 'Create Notification Rules';
}
public function getTitleGlyph() {
return "\xE2\x98\xBF";
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Herald_User_Guide.html');
}
public function getFlavorText() {
return pht('Watch for danger!');
}
+ public function getApplicationGroup() {
+ return self::GROUP_ORGANIZATION;
+ }
+
public function getRoutes() {
return array(
'/herald/' => array(
'' => 'HeraldHomeController',
'view/(?P<content_type>[^/]+)/(?:(?P<rule_type>[^/]+)/)?'
=> 'HeraldHomeController',
'new/(?:(?P<type>[^/]+)/(?:(?P<rule_type>[^/]+)/)?)?'
=> 'HeraldNewController',
'rule/(?:(?P<id>\d+)/)?' => 'HeraldRuleController',
'history/(?:(?P<id>\d+)/)?' => 'HeraldRuleEditHistoryController',
'delete/(?P<id>\d+)/' => 'HeraldDeleteController',
'test/' => 'HeraldTestConsoleController',
'transcript/' => 'HeraldTranscriptListController',
'transcript/(?P<id>\d+)/(?:(?P<filter>\w+)/)?'
=> 'HeraldTranscriptController',
),
);
}
}
diff --git a/src/applications/macro/application/PhabricatorApplicationMacro.php b/src/applications/macro/application/PhabricatorApplicationMacro.php
index 74f7506a34..343ac047db 100644
--- a/src/applications/macro/application/PhabricatorApplicationMacro.php
+++ b/src/applications/macro/application/PhabricatorApplicationMacro.php
@@ -1,47 +1,51 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationMacro extends PhabricatorApplication {
public function getBaseURI() {
return '/macro/';
}
public function getShortDescription() {
return 'Image Macros and Memes';
}
public function getAutospriteName() {
return 'macro';
}
public function getTitleGlyph() {
return "\xE2\x9A\x98";
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/macro/' => array(
'' => 'PhabricatorMacroListController',
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorMacroEditController',
'delete/(?P<id>\d+)/' => 'PhabricatorMacroDeleteController',
),
);
}
}
diff --git a/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php b/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php
index 17dda9563e..129e5fdeaf 100644
--- a/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php
+++ b/src/applications/mailinglists/application/PhabricatorApplicationMailingLists.php
@@ -1,50 +1,54 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationMailingLists extends PhabricatorApplication {
public function getName() {
return 'Mailing Lists';
}
public function getBaseURI() {
return '/mailinglists/';
}
public function getShortDescription() {
return 'Manage External Lists';
}
public function getAutospriteName() {
return 'mail';
}
+ public function getApplicationGroup() {
+ return self::GROUP_ADMIN;
+ }
+
public function getRoutes() {
return array(
'/mailinglists/' => array(
'' => 'PhabricatorMailingListsListController',
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorMailingListsEditController',
),
);
}
public function getTitleGlyph() {
return '@';
}
}
diff --git a/src/applications/maniphest/application/PhabricatorApplicationManiphest.php b/src/applications/maniphest/application/PhabricatorApplicationManiphest.php
index 983125340a..c225044ce2 100644
--- a/src/applications/maniphest/application/PhabricatorApplicationManiphest.php
+++ b/src/applications/maniphest/application/PhabricatorApplicationManiphest.php
@@ -1,116 +1,120 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationManiphest extends PhabricatorApplication {
public function getShortDescription() {
return 'Tasks and Bugs';
}
public function getBaseURI() {
return '/maniphest/';
}
public function isEnabled() {
return PhabricatorEnv::getEnvConfig('maniphest.enabled');
}
public function getAutospriteName() {
return 'maniphest';
}
- public function getCoreApplicationOrder() {
+ public function getApplicationGroup() {
+ return self::GROUP_CORE;
+ }
+
+ public function getApplicationOrder() {
return 0.110;
}
public function getFactObjectsForAnalysis() {
return array(
new ManiphestTask(),
);
}
public function getRoutes() {
return array(
'/T(?P<id>\d+)' => 'ManiphestTaskDetailController',
'/maniphest/' => array(
'' => 'ManiphestTaskListController',
'view/(?P<view>\w+)/' => 'ManiphestTaskListController',
'report/(?:(?P<view>\w+)/)?' => 'ManiphestReportController',
'batch/' => 'ManiphestBatchEditController',
'task/' => array(
'create/' => 'ManiphestTaskEditController',
'edit/(?P<id>\d+)/' => 'ManiphestTaskEditController',
'descriptionchange/(?:(?P<id>\d+)/)?' =>
'ManiphestTaskDescriptionChangeController',
'descriptionpreview/' =>
'ManiphestTaskDescriptionPreviewController',
),
'transaction/' => array(
'save/' => 'ManiphestTransactionSaveController',
'preview/(?P<id>\d+)/' => 'ManiphestTransactionPreviewController',
),
'export/(?P<key>[^/]+)/' => 'ManiphestExportController',
'subpriority/' => 'ManiphestSubpriorityController',
'custom/' => array(
'' => 'ManiphestSavedQueryListController',
'edit/(?:(?P<id>\d+)/)?' => 'ManiphestSavedQueryEditController',
'delete/(?P<id>\d+)/' => 'ManiphestSavedQueryDeleteController',
),
),
);
}
public function loadStatus(PhabricatorUser $user) {
$status = array();
$query = id(new ManiphestTaskQuery())
->withStatus(ManiphestTaskQuery::STATUS_OPEN)
->withPriority(ManiphestTaskPriority::PRIORITY_UNBREAK_NOW)
->setLimit(1)
->setCalculateRows(true);
$query->execute();
$count = $query->getRowCount();
$type = $count
? PhabricatorApplicationStatusView::TYPE_NEEDS_ATTENTION
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Unbreak Now Task(s)!', $count))
->setCount($count);
$query = id(new ManiphestTaskQuery())
->withStatus(ManiphestTaskQuery::STATUS_OPEN)
->withOwners(array($user->getPHID()))
->setLimit(1)
->setCalculateRows(true);
$query->execute();
$count = $query->getRowCount();
$type = $count
? PhabricatorApplicationStatusView::TYPE_INFO
: PhabricatorApplicationStatusView::TYPE_EMPTY;
$status[] = id(new PhabricatorApplicationStatusView())
->setType($type)
->setText(pht('%d Assigned Task(s)', $count));
return $status;
}
}
diff --git a/src/applications/meta/controller/PhabricatorApplicationsListController.php b/src/applications/meta/controller/PhabricatorApplicationsListController.php
index 2e1dbb6ff1..01fdd88142 100644
--- a/src/applications/meta/controller/PhabricatorApplicationsListController.php
+++ b/src/applications/meta/controller/PhabricatorApplicationsListController.php
@@ -1,64 +1,75 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationsListController
extends PhabricatorController {
public function processRequest() {
$request = $this->getRequest();
$user = $request->getUser();
$applications = PhabricatorApplication::getAllInstalledApplications();
- $applications = msort($applications, 'getName');
foreach ($applications as $key => $application) {
if (!$application->shouldAppearInLaunchView()) {
unset($applications[$key]);
}
}
- $status = array();
- foreach ($applications as $key => $application) {
- $status[$key] = $application->loadStatus($user);
- }
+ $groups = PhabricatorApplication::getApplicationGroups();
- $views = array();
- foreach ($applications as $key => $application) {
- $views[] = id(new PhabricatorApplicationLaunchView())
- ->setApplication($application)
- ->setApplicationStatus(idx($status, $key, array()))
- ->setUser($user);
- }
+ $applications = msort($applications, 'getApplicationOrder');
+ $applications = mgroup($applications, 'getApplicationGroup');
+ $applications = array_select_keys($applications, array_keys($groups));
- $view = phutil_render_tag(
- 'div',
- array(
- 'class' => 'phabricator-application-list',
- ),
- id(new AphrontNullView())->appendChild($views)->render());
+ $view = array();
+ foreach ($applications as $group => $application_list) {
+ $status = array();
+ foreach ($application_list as $key => $application) {
+ $status[$key] = $application->loadStatus($user);
+ }
+
+ $views = array();
+ foreach ($application_list as $key => $application) {
+ $views[] = id(new PhabricatorApplicationLaunchView())
+ ->setApplication($application)
+ ->setApplicationStatus(idx($status, $key, array()))
+ ->setUser($user);
+ }
+
+ $view[] = id(new PhabricatorHeaderView())
+ ->setHeader($groups[$group]);
+
+ $view[] = phutil_render_tag(
+ 'div',
+ array(
+ 'class' => 'phabricator-application-list',
+ ),
+ id(new AphrontNullView())->appendChild($views)->render());
+ }
return $this->buildApplicationPage(
$view,
array(
'title' => 'Applications',
'device' => true,
));
}
}
diff --git a/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php b/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php
index f45640144c..130a5f89ef 100644
--- a/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php
+++ b/src/applications/metamta/application/PhabricatorApplicationMetaMTA.php
@@ -1,54 +1,58 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationMetaMTA extends PhabricatorApplication {
public function getBaseURI() {
return '/mail/';
}
public function getShortDescription() {
return 'View Mail Logs';
}
public function getAutospriteName() {
return 'mail';
}
public function getFlavorText() {
return pht('Yo dawg, we heard you like MTAs.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_ADMIN;
+ }
+
public function getRoutes() {
return array(
$this->getBaseURI() => array(
'' => 'PhabricatorMetaMTAListController',
'send/' => 'PhabricatorMetaMTASendController',
'view/(?P<id>\d+)/' => 'PhabricatorMetaMTAViewController',
'receive/' => 'PhabricatorMetaMTAReceiveController',
'received/' => 'PhabricatorMetaMTAReceivedListController',
'sendgrid/' => 'PhabricatorMetaMTASendGridReceiveController',
),
);
}
public function getTitleGlyph() {
return '@';
}
}
diff --git a/src/applications/owners/application/PhabricatorApplicationOwners.php b/src/applications/owners/application/PhabricatorApplicationOwners.php
index 5659c862a1..bf4a40ce70 100644
--- a/src/applications/owners/application/PhabricatorApplicationOwners.php
+++ b/src/applications/owners/application/PhabricatorApplicationOwners.php
@@ -1,58 +1,62 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationOwners extends PhabricatorApplication {
public function getBaseURI() {
return '/owners/';
}
public function getAutospriteName() {
return 'owners';
}
public function getShortDescription() {
return 'Group Source Code';
}
public function getTitleGlyph() {
return "\xE2\x98\x81";
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Owners_Tool_User_Guide.html');
}
public function getFlavorText() {
return pht('Adopt today!');
}
+ public function getApplicationGroup() {
+ return self::GROUP_ORGANIZATION;
+ }
+
public function getRoutes() {
return array(
'/owners/' => array(
'' => 'PhabricatorOwnersListController',
'view/(?P<view>[^/]+)/' => 'PhabricatorOwnersListController',
'edit/(?P<id>\d+)/' => 'PhabricatorOwnersEditController',
'new/' => 'PhabricatorOwnersEditController',
'package/(?P<id>\d+)/' => 'PhabricatorOwnersDetailController',
'delete/(?P<id>\d+)/' => 'PhabricatorOwnersDeleteController',
),
);
}
}
diff --git a/src/applications/paste/application/PhabricatorApplicationPaste.php b/src/applications/paste/application/PhabricatorApplicationPaste.php
index 0ca94dd5c4..655d78608d 100644
--- a/src/applications/paste/application/PhabricatorApplicationPaste.php
+++ b/src/applications/paste/application/PhabricatorApplicationPaste.php
@@ -1,44 +1,48 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPaste extends PhabricatorApplication {
public function getBaseURI() {
return '/paste/';
}
public function getAutospriteName() {
return 'paste';
}
public function getTitleGlyph() {
return "\xE2\x9C\x8E";
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/P(?P<id>\d+)' => 'PhabricatorPasteViewController',
'/paste/' => array(
'' => 'PhabricatorPasteEditController',
'edit/(?P<id>\d+)/' => 'PhabricatorPasteEditController',
'filter/(?P<filter>\w+)/' => 'PhabricatorPasteListController',
),
);
}
}
diff --git a/src/applications/people/application/PhabricatorApplicationPeople.php b/src/applications/people/application/PhabricatorApplicationPeople.php
index 40eda3ec28..91facadc36 100644
--- a/src/applications/people/application/PhabricatorApplicationPeople.php
+++ b/src/applications/people/application/PhabricatorApplicationPeople.php
@@ -1,86 +1,90 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPeople extends PhabricatorApplication {
public function getShortDescription() {
return 'User Accounts';
}
public function getBaseURI() {
return '/people/';
}
public function getTitleGlyph() {
return "\xE2\x99\x9F";
}
public function getAutospriteName() {
return 'people';
}
public function getFlavorText() {
return pht('Sort of a social utility.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_ADMIN;
+ }
+
public function getRoutes() {
return array(
'/people/' => array(
'' => 'PhabricatorPeopleListController',
'logs/' => 'PhabricatorPeopleLogsController',
'edit/(?:(?P<id>\d+)/(?:(?P<view>\w+)/)?)?'
=> 'PhabricatorPeopleEditController',
'ldap/' => 'PhabricatorPeopleLdapController',
),
'/p/(?P<username>[\w._-]+)/(?:(?P<page>\w+)/)?'
=> 'PhabricatorPeopleProfileController',
'/emailverify/(?P<code>[^/]+)/' =>
'PhabricatorEmailVerificationController',
);
}
public function buildMainMenuItems(
PhabricatorUser $user,
PhabricatorController $controller = null) {
$items = array();
if (($controller instanceof PhabricatorPeopleProfileController) &&
($controller->getProfileUser()) &&
($controller->getProfileUser()->getPHID() == $user->getPHID())) {
$class = 'main-menu-item-icon-profile-selected';
} else {
$class = 'main-menu-item-icon-profile-not-selected';
}
if ($user->isLoggedIn()) {
$image = $user->loadProfileImageURI();
$item = new PhabricatorMainMenuIconView();
$item->setName($user->getUsername());
$item->addClass('main-menu-item-icon-profile '.$class);
$item->addStyle('background-image: url('.$image.')');
$item->setHref('/p/'.$user->getUsername().'/');
$item->setSortOrder(0.0);
$items[] = $item;
}
return $items;
}
}
diff --git a/src/applications/phame/application/PhabricatorApplicationPhame.php b/src/applications/phame/application/PhabricatorApplicationPhame.php
index e05e951487..5038c1cd9f 100644
--- a/src/applications/phame/application/PhabricatorApplicationPhame.php
+++ b/src/applications/phame/application/PhabricatorApplicationPhame.php
@@ -1,74 +1,78 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPhame extends PhabricatorApplication {
public function getBaseURI() {
return '/phame/';
}
public function getAutospriteName() {
return 'phame';
}
public function getShortDescription() {
return 'Blog';
}
public function getTitleGlyph() {
return "\xe2\x9c\xa9";
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Phame_User_Guide.html');
}
+ public function getApplicationGroup() {
+ return self::GROUP_COMMUNICATION;
+ }
+
public function getRoutes() {
return array(
'/phame/' => array(
'' => 'PhameAllPostListController',
'post/' => array(
'' => 'PhameUserPostListController',
'delete/(?P<phid>[^/]+)/' => 'PhamePostDeleteController',
'edit/(?P<phid>[^/]+)/' => 'PhamePostEditController',
'new/' => 'PhamePostEditController',
'preview/' => 'PhamePostPreviewController',
'view/(?P<phid>[^/]+)/' => 'PhamePostViewController',
),
'draft/' => array(
'' => 'PhameDraftListController',
'new/' => 'PhamePostEditController',
),
'blog/' => array(
'' => 'PhameUserBlogListController',
'all/' => 'PhameAllBlogListController',
'new/' => 'PhameBlogEditController',
'delete/(?P<phid>[^/]+)/' => 'PhameBlogDeleteController',
'edit/(?P<phid>[^/]+)/' => 'PhameBlogEditController',
'view/(?P<phid>[^/]+)/' => 'PhameBlogViewController',
),
'posts/' => array(
'' => 'PhameUserPostListController',
'(?P<bloggername>\w+)/' => 'PhameBloggerPostListController',
'(?P<bloggername>\w+)/(?P<phametitle>.+/)'
=> 'PhamePostViewController',
),
),
);
}
}
diff --git a/src/applications/phid/application/PhabricatorApplicationPHID.php b/src/applications/phid/application/PhabricatorApplicationPHID.php
index 8c41c701da..5da3a8dd5a 100644
--- a/src/applications/phid/application/PhabricatorApplicationPHID.php
+++ b/src/applications/phid/application/PhabricatorApplicationPHID.php
@@ -1,49 +1,53 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPHID extends PhabricatorApplication {
public function getName() {
return 'PHID Manager';
}
public function getBaseURI() {
return '/phid/';
}
public function getAutospriteName() {
return 'phid';
}
public function getShortDescription() {
return 'Lookup PHIDs';
}
public function getTitleGlyph() {
return "#";
}
+ public function getApplicationGroup() {
+ return self::GROUP_DEVELOPER;
+ }
+
public function getRoutes() {
return array(
'/phid/' => array(
'' => 'PhabricatorPHIDLookupController',
),
);
}
}
diff --git a/src/applications/phriction/application/PhabricatorApplicationPhriction.php b/src/applications/phriction/application/PhabricatorApplicationPhriction.php
index 2a9b42380d..7bfe8febdc 100644
--- a/src/applications/phriction/application/PhabricatorApplicationPhriction.php
+++ b/src/applications/phriction/application/PhabricatorApplicationPhriction.php
@@ -1,65 +1,69 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPhriction extends PhabricatorApplication {
public function getShortDescription() {
return 'Wiki';
}
public function getBaseURI() {
return '/w/';
}
public function getAutospriteName() {
return 'phriction';
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Phriction_User_Guide.html');
}
public function getRoutes() {
return array(
// Match "/w/" with slug "/".
'/w(?P<slug>/)' => 'PhrictionDocumentController',
// Match "/w/x/y/z/" with slug "x/y/z/".
'/w/(?P<slug>.+/)' => 'PhrictionDocumentController',
'/phriction/' => array(
'' => 'PhrictionListController',
'list/(?P<view>[^/]+)/' => 'PhrictionListController',
'history(?P<slug>/)' => 'PhrictionHistoryController',
'history/(?P<slug>.+/)' => 'PhrictionHistoryController',
'edit/(?:(?P<id>\d+)/)?' => 'PhrictionEditController',
'delete/(?P<id>\d+)/' => 'PhrictionDeleteController',
'preview/' => 'PhrictionDocumentPreviewController',
'diff/(?P<id>\d+)/' => 'PhrictionDiffController',
),
);
}
- public function getCoreApplicationOrder() {
+ public function getApplicationGroup() {
+ return self::GROUP_COMMUNICATION;
+ }
+
+ public function getApplicationOrder() {
return 0.140;
}
}
diff --git a/src/applications/ponder/application/PhabricatorApplicationPonder.php b/src/applications/ponder/application/PhabricatorApplicationPonder.php
index d04d2748be..16e64059ac 100644
--- a/src/applications/ponder/application/PhabricatorApplicationPonder.php
+++ b/src/applications/ponder/application/PhabricatorApplicationPonder.php
@@ -1,63 +1,67 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPonder extends PhabricatorApplication {
public function getBaseURI() {
return '/ponder/';
}
public function getShortDescription() {
return 'Find Answers';
}
public function getAutospriteName() {
return 'ponder';
}
public function getFactObjectsForAnalysis() {
return array(
new PonderQuestion(),
);
}
public function loadStatus(PhabricatorUser $user) {
// replace with "x new unanswered questions" or some such
$status = array();
return $status;
}
+ public function getApplicationGroup() {
+ return self::GROUP_COMMUNICATION;
+ }
+
public function getroutes() {
return array(
'/Q(?P<id>\d+)' => 'PonderQuestionViewController',
'/ponder/' => array(
'(?P<page>feed/)?' => 'PonderFeedController',
'(?P<page>questions)/' => 'PonderFeedController',
'(?P<page>answers)/' => 'PonderFeedController',
'answer/add/' => 'PonderAnswerSaveController',
'answer/preview/' => 'PonderAnswerPreviewController',
'question/ask/' => 'PonderQuestionAskController',
'question/preview/' => 'PonderQuestionPreviewController',
'comment/add/' => 'PonderCommentSaveController',
'(?P<kind>question)/vote/' => 'PonderVoteSaveController',
'(?P<kind>answer)/vote/' => 'PonderVoteSaveController'
));
}
}
diff --git a/src/applications/project/application/PhabricatorApplicationProject.php b/src/applications/project/application/PhabricatorApplicationProject.php
index bba25821d6..49594817d0 100644
--- a/src/applications/project/application/PhabricatorApplicationProject.php
+++ b/src/applications/project/application/PhabricatorApplicationProject.php
@@ -1,57 +1,61 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationProject extends PhabricatorApplication {
public function getName() {
return 'Projects';
}
public function getShortDescription() {
return 'Organize Work';
}
public function getBaseURI() {
return '/project/';
}
public function getAutospriteName() {
return 'projects';
}
public function getFlavorText() {
return pht('Group stuff into big piles.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_ORGANIZATION;
+ }
+
public function getRoutes() {
return array(
'/project/' => array(
'' => 'PhabricatorProjectListController',
'filter/(?P<filter>[^/]+)/' => 'PhabricatorProjectListController',
'edit/(?P<id>\d+)/' => 'PhabricatorProjectProfileEditController',
'members/(?P<id>\d+)/' => 'PhabricatorProjectMembersEditController',
'view/(?P<id>\d+)/(?:(?P<page>\w+)/)?'
=> 'PhabricatorProjectProfileController',
'create/' => 'PhabricatorProjectCreateController',
'update/(?P<id>\d+)/(?P<action>[^/]+)/'
=> 'PhabricatorProjectUpdateController',
),
);
}
}
diff --git a/src/applications/repository/application/PhabricatorApplicationRepositories.php b/src/applications/repository/application/PhabricatorApplicationRepositories.php
index 8d8b2fecfa..c55760e542 100644
--- a/src/applications/repository/application/PhabricatorApplicationRepositories.php
+++ b/src/applications/repository/application/PhabricatorApplicationRepositories.php
@@ -1,51 +1,55 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationRepositories extends PhabricatorApplication {
public function getBaseURI() {
return '/repository/';
}
public function getAutospriteName() {
return 'repositories';
}
public function getShortDescription() {
return 'Track Repositories';
}
public function getTitleGlyph() {
return "rX";
}
+ public function getApplicationGroup() {
+ return self::GROUP_ADMIN;
+ }
+
public function getRoutes() {
return array(
'/repository/' => array(
'' => 'PhabricatorRepositoryListController',
'create/' => 'PhabricatorRepositoryCreateController',
'edit/(?P<id>\d+)/(?:(?P<view>\w+)?/)?' =>
'PhabricatorRepositoryEditController',
'delete/(?P<id>\d+)/' => 'PhabricatorRepositoryDeleteController',
'project/(?P<id>\d+)/' =>
'PhabricatorRepositoryArcanistProjectEditController',
),
);
}
}
diff --git a/src/applications/settings/application/PhabricatorApplicationSettings.php b/src/applications/settings/application/PhabricatorApplicationSettings.php
index 22dc2a2f0a..275845e6d9 100644
--- a/src/applications/settings/application/PhabricatorApplicationSettings.php
+++ b/src/applications/settings/application/PhabricatorApplicationSettings.php
@@ -1,66 +1,70 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationSettings extends PhabricatorApplication {
public function getBaseURI() {
return '/settings/';
}
public function getShortDescription() {
return 'User Preferences';
}
public function getAutospriteName() {
return 'settings';
}
public function getRoutes() {
return array(
'/settings/' => array(
'(?:panel/(?P<key>[^/]+)/)?' => 'PhabricatorSettingsMainController',
'adjust/' => 'PhabricatorSettingsAdjustController',
),
);
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function buildMainMenuItems(
PhabricatorUser $user,
PhabricatorController $controller = null) {
$items = array();
if ($controller instanceof PhabricatorSettingsMainController) {
$class = 'main-menu-item-icon-settings-selected';
} else {
$class = 'main-menu-item-icon-settings';
}
if ($user->isLoggedIn()) {
$item = new PhabricatorMainMenuIconView();
$item->setName(pht('Settings'));
$item->addClass('autosprite main-menu-item-icon '.$class);
$item->setHref('/settings/');
$item->setSortOrder(0.90);
$items[] = $item;
}
return $items;
}
}
diff --git a/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php b/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php
index 7d55e82a69..7424b156af 100644
--- a/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php
+++ b/src/applications/slowvote/application/PhabricatorApplicationSlowvote.php
@@ -1,55 +1,59 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationSlowvote extends PhabricatorApplication {
public function getBaseURI() {
return '/vote/';
}
public function getAutospriteName() {
return 'slowvote';
}
public function getShortDescription() {
return 'Conduct Polls';
}
public function getTitleGlyph() {
return "\xE2\x9C\x94";
}
public function getHelpURI() {
return PhabricatorEnv::getDoclink('article/Slowvote_User_Guide.html');
}
public function getFlavorText() {
return pht('Design by committee.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_UTILITIES;
+ }
+
public function getRoutes() {
return array(
'/V(?P<id>\d+)' => 'PhabricatorSlowvotePollController',
'/vote/' => array(
'(?:view/(?P<view>\w+)/)?' => 'PhabricatorSlowvoteListController',
'create/' => 'PhabricatorSlowvoteCreateController',
),
);
}
}
diff --git a/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php
index 7b89a89047..a0c899f4a0 100644
--- a/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php
+++ b/src/applications/uiexample/application/PhabricatorApplicationUIExamples.php
@@ -1,50 +1,58 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationUIExamples extends PhabricatorApplication {
public function getBaseURI() {
return '/uiexample/';
}
public function getShortDescription() {
return 'Developer UI Examples';
}
public function getAutospriteName() {
return 'uiexample';
}
public function getTitleGlyph() {
return "\xE2\x8F\x9A";
}
public function getFlavorText() {
return pht('A gallery of modern art.');
}
+ public function getApplicationGroup() {
+ return self::GROUP_DEVELOPER;
+ }
+
+ public function getApplicationOrder() {
+ return 0.110;
+ }
+
public function getRoutes() {
return array(
'/uiexample/' => array(
'' => 'PhabricatorUIExampleRenderController',
'view/(?P<class>[^/]+)/' => 'PhabricatorUIExampleRenderController',
),
);
}
}
diff --git a/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php b/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php
index 16b0e763de..4e8bd1c920 100644
--- a/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php
+++ b/src/applications/xhpastview/application/PhabricatorApplicationPHPAST.php
@@ -1,55 +1,59 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class PhabricatorApplicationPHPAST extends PhabricatorApplication {
public function getBaseURI() {
return '/xhpast/';
}
public function getAutospriteName() {
return 'phpast';
}
public function getShortDescription() {
return 'Visual PHP Parser';
}
public function getTitleGlyph() {
return "\xE2\x96\xA0";
}
+ public function getApplicationGroup() {
+ return self::GROUP_DEVELOPER;
+ }
+
public function getRoutes() {
return array(
'/xhpast/' => array(
'' => 'PhabricatorXHPASTViewRunController',
'view/(?P<id>\d+)/'
=> 'PhabricatorXHPASTViewFrameController',
'frameset/(?P<id>\d+)/'
=> 'PhabricatorXHPASTViewFramesetController',
'input/(?P<id>\d+)/'
=> 'PhabricatorXHPASTViewInputController',
'tree/(?P<id>\d+)/'
=> 'PhabricatorXHPASTViewTreeController',
'stream/(?P<id>\d+)/'
=> 'PhabricatorXHPASTViewStreamController',
),
);
}
}
diff --git a/src/view/layout/AphrontSideNavView.php b/src/view/layout/AphrontSideNavView.php
index 6e032a1bd6..f7f16ffedc 100644
--- a/src/view/layout/AphrontSideNavView.php
+++ b/src/view/layout/AphrontSideNavView.php
@@ -1,265 +1,270 @@
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
final class AphrontSideNavView extends AphrontView {
private $items = array();
private $flexNav;
private $isFlexible;
private $showApplicationMenu;
private $user;
private $currentApplication;
private $active;
public function setUser(PhabricatorUser $user) {
$this->user = $user;
return $this;
}
public function setShowApplicationMenu($show_application_menu) {
$this->showApplicationMenu = $show_application_menu;
return $this;
}
public function setCurrentApplication(PhabricatorApplication $current) {
$this->currentApplication = $current;
return $this;
}
public function addNavItem($item) {
$this->items[] = $item;
return $this;
}
public function setFlexNav($flex) {
$this->flexNav = $flex;
return $this;
}
public function setFlexible($flexible) {
$this->isFlexible = $flexible;
return $this;
}
public function setActive($active) {
$this->active = $active;
return $this;
}
public function render() {
$view = new AphrontNullView();
$view->appendChild($this->items);
if ($this->flexNav) {
$user = $this->user;
require_celerity_resource('phabricator-nav-view-css');
$nav_classes = array();
$nav_classes[] = 'phabricator-nav';
$app_id = celerity_generate_unique_node_id();
$nav_id = null;
$drag_id = null;
$content_id = celerity_generate_unique_node_id();
$local_id = null;
$local_menu = null;
$main_id = celerity_generate_unique_node_id();
$apps = $this->renderApplications();
$app_menu = phutil_render_tag(
'div',
array(
'class' => 'phabricator-nav-col phabricator-nav-app',
'id' => $app_id,
),
$apps->render());
if ($this->isFlexible) {
$drag_id = celerity_generate_unique_node_id();
$flex_bar = phutil_render_tag(
'div',
array(
'class' => 'phabricator-nav-drag',
'id' => $drag_id,
),
'');
} else {
$flex_bar = null;
}
$nav_menu = null;
if ($this->items) {
$local_id = celerity_generate_unique_node_id();
$nav_classes[] = 'has-local-nav';
$local_menu = phutil_render_tag(
'div',
array(
'class' => 'phabricator-nav-col phabricator-nav-local',
'id' => $local_id,
),
$view->render());
}
Javelin::initBehavior(
'phabricator-nav',
array(
'mainID' => $main_id,
'appID' => $app_id,
'localID' => $local_id,
'dragID' => $drag_id,
'contentID' => $content_id,
));
if ($this->active && $local_id) {
Javelin::initBehavior(
'phabricator-active-nav',
array(
'localID' => $local_id,
));
}
$header_part =
'<div class="phabricator-nav-head">'.
'<div class="phabricator-nav-head-tablet">'.
'<a href="#" class="nav-button nav-button-w nav-button-menu" '.
'id="tablet-menu1"></a>'.
'<a href="#" class="nav-button nav-button-e nav-button-content '.
'nav-button-selected" id="tablet-menu2"></a>'.
'</div>'.
'<div class="phabricator-nav-head-phone">'.
'<a href="#" class="nav-button nav-button-w nav-button-apps" '.
'id="phone-menu1"></button>'.
'<a href="#" class="nav-button nav-button-menu" '.
'id="phone-menu2"></button>'.
'<a href="#" class="nav-button nav-button-e nav-button-content '.
'nav-button-selected" id="phone-menu3"></button>'.
'</div>'.
'</div>';
return $header_part.phutil_render_tag(
'div',
array(
'class' => implode(' ', $nav_classes),
'id' => $main_id,
),
$app_menu.
$local_menu.
$flex_bar.
phutil_render_tag(
'div',
array(
'class' => 'phabricator-nav-content',
'id' => $content_id,
),
$this->renderChildren()));
} else {
require_celerity_resource('aphront-side-nav-view-css');
return
'<table class="aphront-side-nav-view">'.
'<tr>'.
'<th class="aphront-side-nav-navigation">'.
$view->render().
'</th>'.
'<td class="aphront-side-nav-content">'.
$this->renderChildren().
'</td>'.
'</tr>'.
'</table>';
}
}
private function renderApplications() {
$core = array();
$current = $this->currentApplication;
$meta = null;
+ $group_core = PhabricatorApplication::GROUP_CORE;
+
$applications = PhabricatorApplication::getAllInstalledApplications();
foreach ($applications as $application) {
if ($application instanceof PhabricatorApplicationApplications) {
$meta = $application;
continue;
}
- if ($application->getCoreApplicationOrder() !== null) {
+ if ($application->getApplicationGroup() != $group_core) {
+ continue;
+ }
+ if ($application->getApplicationOrder() !== null) {
$core[] = $application;
}
}
- $core = msort($core, 'getCoreApplicationOrder');
+ $core = msort($core, 'getApplicationOrder');
if ($meta) {
$core[] = $meta;
}
$core = mpull($core, null, 'getPHID');
if ($current && empty($core[$current->getPHID()])) {
array_unshift($core, $current);
}
Javelin::initBehavior('phabricator-tooltips', array());
require_celerity_resource('aphront-tooltip-css');
$apps = array();
foreach ($core as $phid => $application) {
$classes = array();
$classes[] = 'phabricator-nav-app-item';
if ($current && $phid == $current->getPHID()) {
$classes[] = 'phabricator-nav-app-item-selected';
}
$iclasses = array();
$iclasses[] = 'phabricator-nav-app-item-icon';
$style = null;
if ($application->getIconURI()) {
$style = 'background-image: url('.$application->getIconURI().'); '.
'background-size: 30px auto;';
} else {
$iclasses[] = 'autosprite';
$iclasses[] = 'app-'.$application->getAutospriteName();
}
$icon = phutil_render_tag(
'span',
array(
'class' => implode(' ', $iclasses),
'style' => $style,
),
'');
$apps[] = javelin_render_tag(
'a',
array(
'class' => implode(' ', $classes),
'href' => $application->getBaseURI(),
'sigil' => 'has-tooltip',
'meta' => array(
'tip' => $application->getName(),
'align' => 'E',
),
),
$icon.
phutil_escape_html($application->getName()));
}
return id(new AphrontNullView())->appendChild($apps);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Wed, Apr 30, 1:36 AM (21 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
108509
Default Alt Text
(81 KB)

Event Timeline