diff --git a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php index beda1d894f..0fa192f5a3 100644 --- a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php +++ b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php @@ -1,101 +1,118 @@ application = $data['application']; } public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $selected = PhabricatorApplication::getByClass($this->application); if (!$selected) { return new Aphront404Response(); } $title = $selected->getName(); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addCrumb( id(new PhabricatorCrumbView()) ->setName(pht('Applications')) ->setHref($this->getApplicationURI())); - $properties = $this->buildPropertyView($selected); - $actions = $this->buildActionView($user, $selected); - - return $this->buildApplicationPage( - array( - $crumbs, - id(new PhabricatorHeaderView())->setHeader($title), - $actions, - $properties, - ), - array( - 'title' => $title, - 'device' => true, - )); - } + $header = id(new PhabricatorHeaderView()) + ->setHeader($title); - private function buildPropertyView(PhabricatorApplication $selected) { - $properties = new PhabricatorPropertyListView(); + $status_tag = id(new PhabricatorTagView()) + ->setType(PhabricatorTagView::TYPE_STATE); if ($selected->isInstalled()) { - $properties->addProperty( - pht('Status'), pht('Installed')); + $status_tag->setName(pht('Installed')); + $status_tag->setBackgroundColor(PhabricatorTagView::COLOR_GREEN); } else { - $properties->addProperty( - pht('Status'), pht('Uninstalled')); + $status_tag->setName(pht('Uninstalled')); + $status_tag->setBackgroundColor(PhabricatorTagView::COLOR_RED); } - $properties->addProperty( - pht('Description'), $selected->getShortDescription()); + if ($selected->isBeta()) { + $beta_tag = id(new PhabricatorTagView()) + ->setType(PhabricatorTagView::TYPE_STATE) + ->setName(pht('Beta')) + ->setBackgroundColor(PhabricatorTagView::COLOR_GREY); + $header->addTag($beta_tag); + } + + + $header->addTag($status_tag); + + $properties = $this->buildPropertyView($selected); + $actions = $this->buildActionView($user, $selected); + + return $this->buildApplicationPage( + array( + $crumbs, + $header, + $actions, + $properties, + ), + array( + 'title' => $title, + 'device' => true, + )); + } + + private function buildPropertyView(PhabricatorApplication $selected) { + $properties = id(new PhabricatorPropertyListView()) + ->addProperty( + pht('Description'), $selected->getShortDescription() + ); return $properties; } private function buildActionView( PhabricatorUser $user, PhabricatorApplication $selected) { $view = id(new PhabricatorActionListView()) ->setUser($user); if ($selected->canUninstall()) { if ($selected->isInstalled()) { $view->addAction( id(new PhabricatorActionView()) ->setName(pht('Uninstall')) ->setIcon('delete') ->setHref( $this->getApplicationURI(get_class($selected).'/uninstall/')) ); } else { $view->addAction( id(new PhabricatorActionView()) ->setName(pht('Install')) ->setIcon('new') ->setHref( $this->getApplicationURI(get_class($selected).'/install/')) ); } } else { $view->addAction( id(new PhabricatorActionView()) ->setName(pht('Uninstall')) ->setIcon('delete') ->setDisabled(true) ->setHref( $this->getApplicationURI(get_class($selected).'/uninstall/')) ); } return $view; } } diff --git a/src/applications/meta/controller/PhabricatorApplicationsListController.php b/src/applications/meta/controller/PhabricatorApplicationsListController.php index a6b3ef1fce..80ca3dcbfc 100644 --- a/src/applications/meta/controller/PhabricatorApplicationsListController.php +++ b/src/applications/meta/controller/PhabricatorApplicationsListController.php @@ -1,61 +1,70 @@ getRequest(); $user = $request->getUser(); $nav = $this->buildSideNavView(); $nav->selectFilter('/'); $applications = PhabricatorApplication::getAllApplications(); $list = $this->buildInstalledApplicationsList($applications); $title = pht('Installed Applications'); $header = id(new PhabricatorHeaderView()) ->setHeader($title); $nav->appendChild( array( $header, $list )); $crumbs = $this ->buildApplicationCrumbs() ->addCrumb( id(new PhabricatorCrumbView()) ->setName(pht('Applications')) ->setHref($this->getApplicationURI())); $nav->setCrumbs($crumbs); return $this->buildApplicationPage( $nav, array( 'title' => $title, 'device' => true, ) ); } private function buildInstalledApplicationsList(array $applications) { $list = new PhabricatorObjectItemListView(); foreach ($applications as $application) { $item = id(new PhabricatorObjectItemView()) ->setHeader($application->getName()) ->setHref('/applications/view/'.get_class($application).'/') ->addAttribute( phutil_escape_html($application->getShortDescription())); + + if (!$application->isInstalled()) { + $item->addIcon('delete', pht('Uninstalled')); + } + + if ($application->isBeta()) { + $item->addIcon('lint-warning', pht('Beta')); + } $list->addItem($item); + } return $list; } }