Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15434312
D17239.id41459.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
18 KB
Referenced Files
None
Subscribers
None
D17239.id41459.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 26, 2:57 AM (1 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7722015
Default Alt Text
D17239.id41459.diff (18 KB)
Attached To
Mode
D17239: Move Favorites and User menus to MenuBarExtensions
Attached
Detach File
Event Timeline
Log In to Comment