Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14003450
D20356.id48607.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
17 KB
Referenced Files
None
Subscribers
None
D20356.id48607.diff
View Options
diff --git a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
--- a/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
+++ b/src/applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php
@@ -20,7 +20,7 @@
$dropdown = $this->newDropdown($viewer);
if (!$dropdown) {
- return null;
+ return array();
}
$favorites_menu = id(new PHUIButtonView())
@@ -59,7 +59,8 @@
$menu_engine->setController($controller);
}
- $filter_view = $menu_engine->buildNavigation();
+ $filter_view = $menu_engine->newProfileMenuItemViewList()
+ ->newNavigationView();
$menu_view = $filter_view->getMenu();
$item_views = $menu_view->getItems();
diff --git a/src/applications/home/controller/PhabricatorHomeController.php b/src/applications/home/controller/PhabricatorHomeController.php
--- a/src/applications/home/controller/PhabricatorHomeController.php
+++ b/src/applications/home/controller/PhabricatorHomeController.php
@@ -1,44 +1,4 @@
<?php
-abstract class PhabricatorHomeController extends PhabricatorController {
-
- private $home;
- private $profileMenu;
-
- public function buildApplicationMenu() {
- $menu = $this->newApplicationMenu();
-
- $profile_menu = $this->getProfileMenu();
- if ($profile_menu) {
- $menu->setProfileMenu($profile_menu);
- }
-
- return $menu;
- }
-
- protected function getProfileMenu() {
- if (!$this->profileMenu) {
- $viewer = $this->getViewer();
- $applications = id(new PhabricatorApplicationQuery())
- ->setViewer($viewer)
- ->withClasses(array('PhabricatorHomeApplication'))
- ->withInstalled(true)
- ->execute();
- $home = head($applications);
- if (!$home) {
- return null;
- }
-
- $engine = id(new PhabricatorHomeProfileMenuEngine())
- ->setViewer($viewer)
- ->setController($this)
- ->setProfileObject($home)
- ->setCustomPHID($viewer->getPHID());
-
- $this->profileMenu = $engine->buildNavigation();
- }
-
- return $this->profileMenu;
- }
-
-}
+abstract class PhabricatorHomeController
+ extends PhabricatorController {}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
@@ -30,8 +30,9 @@
$crumbs->addTextCrumb(pht('Badges'));
$crumbs->setBorder(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_BADGES);
+ $nav = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_BADGES);
// Best option?
$badges = id(new PhabricatorBadgesQuery())
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php b/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
@@ -32,8 +32,9 @@
$crumbs->addTextCrumb(pht('Recent Commits'));
$crumbs->setBorder(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_COMMITS);
+ $nav = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_COMMITS);
$view = id(new PHUITwoColumnView())
->setHeader($header)
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileController.php b/src/applications/people/controller/PhabricatorPeopleProfileController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileController.php
@@ -4,7 +4,6 @@
extends PhabricatorPeopleController {
private $user;
- private $profileMenu;
public function shouldRequireAdmin() {
return false;
@@ -19,34 +18,6 @@
return $this->user;
}
- public function buildApplicationMenu() {
- $menu = $this->newApplicationMenu();
-
- $profile_menu = $this->getProfileMenu();
- if ($profile_menu) {
- $menu->setProfileMenu($profile_menu);
- }
-
- return $menu;
- }
-
- protected function getProfileMenu() {
- if (!$this->profileMenu) {
- $user = $this->getUser();
- if ($user) {
- $viewer = $this->getViewer();
-
- $engine = id(new PhabricatorPeopleProfileMenuEngine())
- ->setViewer($viewer)
- ->setProfileObject($user);
-
- $this->profileMenu = $engine->buildNavigation();
- }
- }
-
- return $this->profileMenu;
- }
-
protected function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
@@ -138,4 +109,24 @@
return $header;
}
+ final protected function newNavigation(
+ PhabricatorUser $user,
+ $item_identifier) {
+
+ $viewer = $this->getViewer();
+
+ $engine = id(new PhabricatorPeopleProfileMenuEngine())
+ ->setViewer($viewer)
+ ->setController($this)
+ ->setProfileObject($user);
+
+ $view_list = $engine->newProfileMenuItemViewList();
+
+ $view_list->setSelectedViewWithItemIdentifier($item_identifier);
+
+ $navigation = $view_list->newNavigationView();
+
+ return $navigation;
+ }
+
}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php
@@ -29,8 +29,9 @@
$properties = $this->buildPropertyView($user);
$name = $user->getUsername();
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_MANAGE);
+ $nav = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_MANAGE);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Manage'));
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileRevisionsController.php b/src/applications/people/controller/PhabricatorPeopleProfileRevisionsController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileRevisionsController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileRevisionsController.php
@@ -32,8 +32,9 @@
$crumbs->addTextCrumb(pht('Recent Revisions'));
$crumbs->setBorder(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_REVISIONS);
+ $nav = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_REVISIONS);
$view = id(new PHUITwoColumnView())
->setHeader($header)
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php b/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
@@ -32,8 +32,9 @@
$crumbs->addTextCrumb(pht('Assigned Tasks'));
$crumbs->setBorder(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_TASKS);
+ $nav = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_TASKS);
$view = id(new PHUITwoColumnView())
->setHeader($header)
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php
@@ -64,15 +64,16 @@
$calendar,
));
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_PROFILE);
+ $navigation = $this->newNavigation(
+ $user,
+ PhabricatorPeopleProfileMenuEngine::ITEM_PROFILE);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->setBorder(true);
return $this->newPage()
->setTitle($user->getUsername())
- ->setNavigation($nav)
+ ->setNavigation($navigation)
->setCrumbs($crumbs)
->setPageObjectPHIDs(
array(
diff --git a/src/applications/project/controller/PhabricatorProjectBoardViewController.php b/src/applications/project/controller/PhabricatorProjectBoardViewController.php
--- a/src/applications/project/controller/PhabricatorProjectBoardViewController.php
+++ b/src/applications/project/controller/PhabricatorProjectBoardViewController.php
@@ -172,7 +172,9 @@
return $content;
}
- $nav = $this->newWorkboardProfileMenu();
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_WORKBOARD);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Workboard'));
@@ -719,7 +721,9 @@
->appendChild($board)
->addClass('project-board-wrapper');
- $nav = $this->newWorkboardProfileMenu();
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_WORKBOARD);
$divider = id(new PHUIListItemView())
->setType(PHUIListItemView::TYPE_DIVIDER);
@@ -1503,15 +1507,4 @@
->addCancelButton($profile_uri);
}
- private function newWorkboardProfileMenu() {
- $default_item = id(new PhabricatorProfileMenuItemConfiguration())
- ->setBuiltinKey(PhabricatorProject::ITEM_WORKBOARD);
-
- $menu = parent::getProfileMenu($default_item);
-
- $menu->addClass('project-board-nav');
-
- return $menu;
- }
-
}
diff --git a/src/applications/project/controller/PhabricatorProjectController.php b/src/applications/project/controller/PhabricatorProjectController.php
--- a/src/applications/project/controller/PhabricatorProjectController.php
+++ b/src/applications/project/controller/PhabricatorProjectController.php
@@ -84,30 +84,6 @@
return null;
}
- public function buildApplicationMenu() {
- $menu = $this->newApplicationMenu();
-
- $profile_menu = $this->getProfileMenu();
- if ($profile_menu) {
- $menu->setProfileMenu($profile_menu);
- }
-
- $menu->setSearchEngine(new PhabricatorProjectSearchEngine());
-
- return $menu;
- }
-
- protected function getProfileMenu($default_item = null) {
- if (!$this->profileMenu) {
- $engine = $this->getProfileMenuEngine();
- if ($engine) {
- $this->profileMenu = $engine->buildNavigation($default_item);
- }
- }
-
- return $this->profileMenu;
- }
-
protected function buildApplicationCrumbs() {
return $this->newApplicationCrumbs('profile');
}
@@ -207,4 +183,23 @@
return implode(', ', $result);
}
+ final protected function newNavigation(
+ PhabricatorProject $project,
+ $item_identifier) {
+
+ $engine = $this->getProfileMenuEngine();
+
+ $view_list = $engine->newProfileMenuItemViewList();
+
+ $view_list->setSelectedViewWithItemIdentifier($item_identifier);
+
+ $navigation = $view_list->newNavigationView();
+
+ if ($item_identifier === PhabricatorProject::ITEM_WORKBOARD) {
+ $navigation->addClass('project-board-nav');
+ }
+
+ return $navigation;
+ }
+
}
diff --git a/src/applications/project/controller/PhabricatorProjectManageController.php b/src/applications/project/controller/PhabricatorProjectManageController.php
--- a/src/applications/project/controller/PhabricatorProjectManageController.php
+++ b/src/applications/project/controller/PhabricatorProjectManageController.php
@@ -37,8 +37,9 @@
new PhabricatorProjectTransactionQuery());
$timeline->setShouldTerminate(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorProject::ITEM_MANAGE);
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_MANAGE);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Manage'));
diff --git a/src/applications/project/controller/PhabricatorProjectMembersViewController.php b/src/applications/project/controller/PhabricatorProjectMembersViewController.php
--- a/src/applications/project/controller/PhabricatorProjectMembersViewController.php
+++ b/src/applications/project/controller/PhabricatorProjectMembersViewController.php
@@ -36,8 +36,9 @@
->setUserPHIDs($project->getWatcherPHIDs())
->setShowNote(true);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorProject::ITEM_MEMBERS);
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_MEMBERS);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Members'));
diff --git a/src/applications/project/controller/PhabricatorProjectProfileController.php b/src/applications/project/controller/PhabricatorProjectProfileController.php
--- a/src/applications/project/controller/PhabricatorProjectProfileController.php
+++ b/src/applications/project/controller/PhabricatorProjectProfileController.php
@@ -74,8 +74,9 @@
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
->setUserPHIDs($project->getWatcherPHIDs());
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorProject::ITEM_PROFILE);
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_PROFILE);
$stories = id(new PhabricatorFeedQuery())
->setViewer($viewer)
diff --git a/src/applications/project/controller/PhabricatorProjectSubprojectsController.php b/src/applications/project/controller/PhabricatorProjectSubprojectsController.php
--- a/src/applications/project/controller/PhabricatorProjectSubprojectsController.php
+++ b/src/applications/project/controller/PhabricatorProjectSubprojectsController.php
@@ -77,8 +77,9 @@
$milestones,
$subprojects);
- $nav = $this->getProfileMenu();
- $nav->selectFilter(PhabricatorProject::ITEM_SUBPROJECTS);
+ $nav = $this->newNavigation(
+ $project,
+ PhabricatorProject::ITEM_SUBPROJECTS);
$crumbs = $this->buildApplicationCrumbs();
$crumbs->addTextCrumb(pht('Subprojects'));
diff --git a/src/applications/project/controller/PhabricatorProjectViewController.php b/src/applications/project/controller/PhabricatorProjectViewController.php
--- a/src/applications/project/controller/PhabricatorProjectViewController.php
+++ b/src/applications/project/controller/PhabricatorProjectViewController.php
@@ -18,7 +18,7 @@
$project = $this->getProject();
$engine = $this->getProfileMenuEngine();
- $default = $engine->getDefaultItem();
+ $default = $engine->getDefaultMenuItemConfiguration();
// If defaults are broken somehow, serve the manage page. See T13033 for
// discussion.
diff --git a/src/applications/search/controller/PhabricatorApplicationSearchController.php b/src/applications/search/controller/PhabricatorApplicationSearchController.php
--- a/src/applications/search/controller/PhabricatorApplicationSearchController.php
+++ b/src/applications/search/controller/PhabricatorApplicationSearchController.php
@@ -387,7 +387,6 @@
require_celerity_resource('application-search-view-css');
return $this->newPage()
- ->setApplicationMenu($this->buildApplicationMenu())
->setTitle(pht('Query: %s', $title))
->setCrumbs($crumbs)
->setNavigation($nav)
@@ -611,7 +610,6 @@
->setFooter($lists);
return $this->newPage()
- ->setApplicationMenu($this->buildApplicationMenu())
->setTitle(pht('Saved Queries'))
->setCrumbs($crumbs)
->setNavigation($nav)
diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php
--- a/src/view/page/PhabricatorStandardPageView.php
+++ b/src/view/page/PhabricatorStandardPageView.php
@@ -32,18 +32,6 @@
return $this->showFooter;
}
- public function setApplicationMenu($application_menu) {
- // NOTE: For now, this can either be a PHUIListView or a
- // PHUIApplicationMenuView.
-
- $this->applicationMenu = $application_menu;
- return $this;
- }
-
- public function getApplicationMenu() {
- return $this->applicationMenu;
- }
-
public function setApplicationName($application_name) {
$this->applicationName = $application_name;
return $this;
@@ -345,7 +333,7 @@
$menu->setController($this->getController());
}
- $application_menu = $this->getApplicationMenu();
+ $application_menu = $this->applicationMenu;
if ($application_menu) {
if ($application_menu instanceof PHUIApplicationMenuView) {
$crumbs = $this->getCrumbs();
@@ -865,13 +853,6 @@
public function produceAphrontResponse() {
$controller = $this->getController();
- if (!$this->getApplicationMenu()) {
- $application_menu = $controller->buildApplicationMenu();
- if ($application_menu) {
- $this->setApplicationMenu($application_menu);
- }
- }
-
$viewer = $this->getUser();
if ($viewer && $viewer->getPHID()) {
$object_phids = $this->pageObjects;
@@ -887,6 +868,14 @@
$response = id(new AphrontAjaxResponse())
->setContent($content);
} else {
+ // See T13247. Try to find some navigational menu items to create a
+ // mobile navigation menu from.
+ $application_menu = $controller->buildApplicationMenu();
+ if (!$application_menu) {
+ $application_menu = $this->getNavigation()->getMenu();
+ }
+ $this->applicationMenu = $application_menu;
+
$content = $this->render();
$response = id(new AphrontWebpageResponse())
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Oct 27, 6:17 AM (3 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6736046
Default Alt Text
D20356.id48607.diff (17 KB)
Attached To
Mode
D20356: Automatically build mobile menus from navigation, and clean up external ProfileMenu API
Attached
Detach File
Event Timeline
Log In to Comment