Page MenuHomePhabricator

D17239.diff
No OneTemporary

D17239.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1785,6 +1785,7 @@
'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php',
'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php',
'PeopleHovercardEngineExtension' => 'applications/people/engineextension/PeopleHovercardEngineExtension.php',
+ 'PeopleMainMenuBarExtension' => 'applications/people/engineextension/PeopleMainMenuBarExtension.php',
'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php',
'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php',
'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php',
@@ -2671,6 +2672,7 @@
'PhabricatorFavoritesApplication' => 'applications/favorites/application/PhabricatorFavoritesApplication.php',
'PhabricatorFavoritesController' => 'applications/favorites/controller/PhabricatorFavoritesController.php',
'PhabricatorFavoritesMainController' => 'applications/favorites/controller/PhabricatorFavoritesMainController.php',
+ 'PhabricatorFavoritesMainMenuBarExtension' => 'applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php',
'PhabricatorFavoritesMenuItemController' => 'applications/favorites/controller/PhabricatorFavoritesMenuItemController.php',
'PhabricatorFavoritesProfileMenuEngine' => 'applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php',
'PhabricatorFaxContentSource' => 'infrastructure/contentsource/PhabricatorFaxContentSource.php',
@@ -6662,6 +6664,7 @@
'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability',
'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability',
'PeopleHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension',
+ 'PeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension',
'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector',
'Phabricator404Controller' => 'PhabricatorController',
'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions',
@@ -7685,6 +7688,7 @@
'PhabricatorFavoritesApplication' => 'PhabricatorApplication',
'PhabricatorFavoritesController' => 'PhabricatorController',
'PhabricatorFavoritesMainController' => 'PhabricatorFavoritesController',
+ 'PhabricatorFavoritesMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension',
'PhabricatorFavoritesMenuItemController' => 'PhabricatorFavoritesController',
'PhabricatorFavoritesProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
'PhabricatorFaxContentSource' => 'PhabricatorContentSource',
diff --git a/src/applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php b/src/applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php
--- a/src/applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php
+++ b/src/applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php
@@ -9,6 +9,10 @@
return true;
}
+ public function getExtensionOrder() {
+ return 900;
+ }
+
public function buildMainMenus() {
$viewer = $this->getViewer();
diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php
--- a/src/applications/base/PhabricatorApplication.php
+++ b/src/applications/base/PhabricatorApplication.php
@@ -315,23 +315,6 @@
}
- /**
- * Build extra items for the main menu. Generally, this is used to render
- * static dropdowns.
- *
- * @param PhabricatorUser The viewing user.
- * @param AphrontController The current controller. May be null for special
- * pages like 404, exception handlers, etc.
- * @return view List of menu items.
- * @task ui
- */
- public function buildMainMenuExtraNodes(
- PhabricatorUser $viewer,
- PhabricatorController $controller = null) {
- return array();
- }
-
-
/* -( Application Management )--------------------------------------------- */
diff --git a/src/applications/favorites/application/PhabricatorFavoritesApplication.php b/src/applications/favorites/application/PhabricatorFavoritesApplication.php
--- a/src/applications/favorites/application/PhabricatorFavoritesApplication.php
+++ b/src/applications/favorites/application/PhabricatorFavoritesApplication.php
@@ -32,82 +32,4 @@
return false;
}
- public function buildMainMenuExtraNodes(
- PhabricatorUser $viewer,
- PhabricatorController $controller = null) {
-
- $dropdown = $this->renderFavoritesDropdown($viewer);
- if (!$dropdown) {
- return null;
- }
-
- return id(new PHUIButtonView())
- ->setTag('a')
- ->setHref('#')
- ->setIcon('fa-star')
- ->addClass('phabricator-core-user-menu')
- ->setNoCSS(true)
- ->setDropdown(true)
- ->setDropdownMenu($dropdown);
- }
-
- private function renderFavoritesDropdown(PhabricatorUser $viewer) {
- $application = __CLASS__;
-
- $applications = id(new PhabricatorApplicationQuery())
- ->setViewer($viewer)
- ->withClasses(array($application))
- ->withInstalled(true)
- ->execute();
- $favorites = head($applications);
- if (!$favorites) {
- return null;
- }
-
- $menu_engine = id(new PhabricatorFavoritesProfileMenuEngine())
- ->setViewer($viewer)
- ->setProfileObject($favorites);
-
- if ($viewer->getPHID()) {
- $menu_engine
- ->setCustomPHID($viewer->getPHID())
- ->setMenuType(PhabricatorProfileMenuEngine::MENU_COMBINED);
- } else {
- $menu_engine
- ->setMenuType(PhabricatorProfileMenuEngine::MENU_GLOBAL);
- }
-
- $filter_view = $menu_engine->buildNavigation();
-
- $menu_view = $filter_view->getMenu();
- $item_views = $menu_view->getItems();
-
- $view = id(new PhabricatorActionListView())
- ->setViewer($viewer);
- foreach ($item_views as $item) {
- $type = null;
- if (!strlen($item->getName())) {
- $type = PhabricatorActionView::TYPE_DIVIDER;
- }
- $action = id(new PhabricatorActionView())
- ->setName($item->getName())
- ->setHref($item->getHref())
- ->setType($type);
- $view->addAction($action);
- }
-
- // Build out edit interface
- if ($viewer->isLoggedIn()) {
- $view->addAction(
- id(new PhabricatorActionView())
- ->setType(PhabricatorActionView::TYPE_DIVIDER));
- $view->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Edit Favorites'))
- ->setHref('/favorites/'));
- }
-
- return $view;
- }
-
}
diff --git a/src/applications/favorites/application/PhabricatorFavoritesApplication.php b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
copy from src/applications/favorites/application/PhabricatorFavoritesApplication.php
copy to src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
--- a/src/applications/favorites/application/PhabricatorFavoritesApplication.php
+++ b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
@@ -1,47 +1,29 @@
<?php
-final class PhabricatorFavoritesApplication extends PhabricatorApplication {
+final class PhabricatorFavoritesMainMenuBarExtension
+ extends PhabricatorMainMenuBarExtension {
- public function getBaseURI() {
- return '/favorites/';
- }
+ const MAINMENUBARKEY = 'favorites';
- public function getName() {
- return pht('Favorites');
+ public function isExtensionEnabledForViewer(PhabricatorUser $viewer) {
+ return PhabricatorApplication::isClassInstalledForViewer(
+ 'PhabricatorFavoritesApplication',
+ $viewer);
}
- public function getShortDescription() {
- return pht('Favorite Items');
+ public function getExtensionOrder() {
+ return 1100;
}
- public function getIcon() {
- return 'fa-star';
- }
+ public function buildMainMenus() {
+ $viewer = $this->getViewer();
- public function getRoutes() {
- return array(
- '/favorites/' => array(
- '' => 'PhabricatorFavoritesMainController',
- '(?P<type>global|personal)/item/' => $this->getProfileMenuRouting(
- 'PhabricatorFavoritesMenuItemController'),
- ),
- );
- }
-
- public function isLaunchable() {
- return false;
- }
-
- public function buildMainMenuExtraNodes(
- PhabricatorUser $viewer,
- PhabricatorController $controller = null) {
-
- $dropdown = $this->renderFavoritesDropdown($viewer);
+ $dropdown = $this->newDropdown($viewer);
if (!$dropdown) {
return null;
}
- return id(new PHUIButtonView())
+ $favorites_menu = id(new PHUIButtonView())
->setTag('a')
->setHref('#')
->setIcon('fa-star')
@@ -49,14 +31,16 @@
->setNoCSS(true)
->setDropdown(true)
->setDropdownMenu($dropdown);
- }
- private function renderFavoritesDropdown(PhabricatorUser $viewer) {
- $application = __CLASS__;
+ return array(
+ $favorites_menu,
+ );
+ }
+ private function newDropdown(PhabricatorUser $viewer) {
$applications = id(new PhabricatorApplicationQuery())
->setViewer($viewer)
- ->withClasses(array($application))
+ ->withClasses(array('PhabricatorFavoritesApplication'))
->withInstalled(true)
->execute();
$favorites = head($applications);
@@ -96,7 +80,6 @@
$view->addAction($action);
}
- // Build out edit interface
if ($viewer->isLoggedIn()) {
$view->addAction(
id(new PhabricatorActionView())
diff --git a/src/applications/home/application/PhabricatorHomeApplication.php b/src/applications/home/application/PhabricatorHomeApplication.php
--- a/src/applications/home/application/PhabricatorHomeApplication.php
+++ b/src/applications/home/application/PhabricatorHomeApplication.php
@@ -42,114 +42,4 @@
return 9;
}
- public function buildMainMenuExtraNodes(
- PhabricatorUser $viewer,
- PhabricatorController $controller = null) {
-
- if (!$viewer->isLoggedIn()) {
- return;
- }
-
- $image = $viewer->getProfileImageURI();
-
- $profile_image = id(new PHUIIconView())
- ->setImage($image)
- ->setHeadSize(PHUIIconView::HEAD_SMALL);
-
- if ($controller) {
- $application = $controller->getCurrentApplication();
- } else {
- $application = null;
- }
- $dropdown_menu = $this->renderUserDropdown($viewer, $application);
-
- $menu_id = celerity_generate_unique_node_id();
-
- Javelin::initBehavior(
- 'user-menu',
- array(
- 'menuID' => $menu_id,
- 'menu' => $dropdown_menu->getDropdownMenuMetadata(),
- ));
-
- return id(new PHUIButtonView())
- ->setID($menu_id)
- ->setTag('a')
- ->setHref('/p/'.$viewer->getUsername().'/')
- ->setIcon($profile_image)
- ->addClass('phabricator-core-user-menu')
- ->setHasCaret(true)
- ->setNoCSS(true);
- }
-
- private function renderUserDropdown(
- PhabricatorUser $viewer,
- $application) {
-
- $person_to_show = id(new PHUIObjectItemView())
- ->setObjectName($viewer->getRealName())
- ->setSubHead($viewer->getUsername())
- ->setImageURI($viewer->getProfileImageURI());
-
- $user_view = id(new PHUIObjectItemListView())
- ->setViewer($viewer)
- ->setFlush(true)
- ->setSimple(true)
- ->addItem($person_to_show)
- ->addClass('phabricator-core-user-profile-object');
-
- $view = id(new PhabricatorActionListView())
- ->setViewer($viewer);
-
- // User Menu
- $view->addAction(
- id(new PhabricatorActionView())
- ->appendChild($user_view));
-
- $view->addAction(
- id(new PhabricatorActionView())
- ->setType(PhabricatorActionView::TYPE_DIVIDER));
-
- $view->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Profile'))
- ->setHref('/p/'.$viewer->getUsername().'/'));
-
- $view->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Settings'))
- ->setHref('/settings/user/'.$viewer->getUsername().'/'));
-
- $view->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Manage'))
- ->setHref('/people/manage/'.$viewer->getID().'/'));
-
- // Help Menus
- if ($application) {
- $help_links = $application->getHelpMenuItems($viewer);
- if ($help_links) {
- foreach ($help_links as $link) {
- $view->addAction($link);
- }
- }
- }
-
- // Logout Menu
- $view->addAction(
- id(new PhabricatorActionView())
- ->addSigil('logout-item')
- ->setType(PhabricatorActionView::TYPE_DIVIDER));
-
- $view->addAction(
- id(new PhabricatorActionView())
- ->setName(pht('Log Out %s', $viewer->getUsername()))
- ->addSigil('logout-item')
- ->setHref('/logout/')
- ->setColor(PhabricatorActionView::RED)
- ->setWorkflow(true));
-
- return $view;
- }
-
}
diff --git a/src/applications/home/application/PhabricatorHomeApplication.php b/src/applications/people/engineextension/PeopleMainMenuBarExtension.php
copy from src/applications/home/application/PhabricatorHomeApplication.php
copy to src/applications/people/engineextension/PeopleMainMenuBarExtension.php
--- a/src/applications/home/application/PhabricatorHomeApplication.php
+++ b/src/applications/people/engineextension/PeopleMainMenuBarExtension.php
@@ -1,67 +1,22 @@
<?php
-final class PhabricatorHomeApplication extends PhabricatorApplication {
+final class PeopleMainMenuBarExtension
+ extends PhabricatorMainMenuBarExtension {
- const DASHBOARD_DEFAULT = 'dashboard:default';
+ const MAINMENUBARKEY = 'user';
- public function getBaseURI() {
- return '/home/';
+ public function isExtensionEnabledForViewer(PhabricatorUser $viewer) {
+ return $viewer->isLoggedIn();
}
- public function getName() {
- return pht('Home');
+ public function getExtensionOrder() {
+ return 1200;
}
- public function getShortDescription() {
- return pht('Command Center');
- }
-
- public function getIcon() {
- return 'fa-home';
- }
-
- public function getRoutes() {
- return array(
- '/' => 'PhabricatorHomeMainController',
- '/(?P<only>home)/' => 'PhabricatorHomeMainController',
- '/home/' => array(
- 'menu/' => array(
- '' => 'PhabricatorHomeMenuController',
- '(?P<type>global|personal)/item/' => $this->getProfileMenuRouting(
- 'PhabricatorHomeMenuItemController'),
- ),
- ),
- );
- }
-
- public function isLaunchable() {
- return false;
- }
-
- public function getApplicationOrder() {
- return 9;
- }
-
- public function buildMainMenuExtraNodes(
- PhabricatorUser $viewer,
- PhabricatorController $controller = null) {
-
- if (!$viewer->isLoggedIn()) {
- return;
- }
-
- $image = $viewer->getProfileImageURI();
-
- $profile_image = id(new PHUIIconView())
- ->setImage($image)
- ->setHeadSize(PHUIIconView::HEAD_SMALL);
-
- if ($controller) {
- $application = $controller->getCurrentApplication();
- } else {
- $application = null;
- }
- $dropdown_menu = $this->renderUserDropdown($viewer, $application);
+ public function buildMainMenus() {
+ $viewer = $this->getViewer();
+ $application = $this->getApplication();
+ $dropdown_menu = $this->newDropdown($viewer, $application);
$menu_id = celerity_generate_unique_node_id();
@@ -72,7 +27,12 @@
'menu' => $dropdown_menu->getDropdownMenuMetadata(),
));
- return id(new PHUIButtonView())
+ $image = $viewer->getProfileImageURI();
+ $profile_image = id(new PHUIIconView())
+ ->setImage($image)
+ ->setHeadSize(PHUIIconView::HEAD_SMALL);
+
+ $user_menu = id(new PHUIButtonView())
->setID($menu_id)
->setTag('a')
->setHref('/p/'.$viewer->getUsername().'/')
@@ -80,9 +40,13 @@
->addClass('phabricator-core-user-menu')
->setHasCaret(true)
->setNoCSS(true);
+
+ return array(
+ $user_menu,
+ );
}
- private function renderUserDropdown(
+ private function newDropdown(
PhabricatorUser $viewer,
$application) {
@@ -101,7 +65,6 @@
$view = id(new PhabricatorActionListView())
->setViewer($viewer);
- // User Menu
$view->addAction(
id(new PhabricatorActionView())
->appendChild($user_view));
@@ -125,7 +88,6 @@
->setName(pht('Manage'))
->setHref('/people/manage/'.$viewer->getID().'/'));
- // Help Menus
if ($application) {
$help_links = $application->getHelpMenuItems($viewer);
if ($help_links) {
@@ -135,7 +97,6 @@
}
}
- // Logout Menu
$view->addAction(
id(new PhabricatorActionView())
->addSigil('logout-item')
diff --git a/src/view/page/menu/PhabricatorMainMenuBarExtension.php b/src/view/page/menu/PhabricatorMainMenuBarExtension.php
--- a/src/view/page/menu/PhabricatorMainMenuBarExtension.php
+++ b/src/view/page/menu/PhabricatorMainMenuBarExtension.php
@@ -64,12 +64,17 @@
return true;
}
+ public function getExtensionOrder() {
+ return 1000;
+ }
+
abstract public function buildMainMenus();
final public static function getAllExtensions() {
return id(new PhutilClassMapQuery())
->setAncestorClass(__CLASS__)
->setUniqueMethod('getExtensionKey')
+ ->setSortMethod('getExtensionOrder')
->execute();
}
diff --git a/src/view/page/menu/PhabricatorMainMenuView.php b/src/view/page/menu/PhabricatorMainMenuView.php
--- a/src/view/page/menu/PhabricatorMainMenuView.php
+++ b/src/view/page/menu/PhabricatorMainMenuView.php
@@ -82,20 +82,6 @@
phutil_implode_html(' ', $aural));
}
- // Build out Header Menus
- $applications = PhabricatorApplication::getAllInstalledApplications();
-
- $menus = array();
- $controller = $this->getController();
- foreach ($applications as $application) {
- $app_extra = $application->buildMainMenuExtraNodes(
- $viewer,
- $controller);
- if ($app_extra !== null) {
- $menus[] = $app_extra;
- }
- }
-
$extensions = PhabricatorMainMenuBarExtension::getAllEnabledExtensions();
foreach ($extensions as $extension) {
$extension->setViewer($viewer);
@@ -116,13 +102,18 @@
}
}
- // Builds out "login" button
+ $menus = array();
foreach ($extensions as $extension) {
foreach ($extension->buildMainMenus() as $menu) {
$menus[] = $menu;
}
}
+ // Because we display these with "float: right", reverse their order before
+ // rendering them into the document so that the extension order and display
+ // order are the same.
+ $menus = array_reverse($menus);
+
foreach ($menus as $menu) {
$menu_bar[] = $menu;
}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 3:57 AM (2 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6288500
Default Alt Text
D17239.diff (18 KB)

Event Timeline