diff --git a/src/applications/favorites/application/PhabricatorFavoritesApplication.php b/src/applications/favorites/application/PhabricatorFavoritesApplication.php index 842d2e33b..958355a2b 100644 --- a/src/applications/favorites/application/PhabricatorFavoritesApplication.php +++ b/src/applications/favorites/application/PhabricatorFavoritesApplication.php @@ -1,104 +1,113 @@ array( '' => 'PhabricatorFavoritesMainController', '(?Pglobal|personal)/item/' => $this->getProfileMenuRouting( 'PhabricatorFavoritesMenuItemController'), ), ); } public function isLaunchable() { 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($this->renderFavoritesDropdown($viewer)); + ->setDropdownMenu($dropdown); } private function renderFavoritesDropdown(PhabricatorUser $viewer) { - $application = __CLASS__; - $favorites = id(new PhabricatorApplicationQuery()) + + $applications = id(new PhabricatorApplicationQuery()) ->setViewer($viewer) ->withClasses(array($application)) ->withInstalled(true) - ->executeOne(); + ->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; } }