From 5660c901ef556b8538a9936fc155f903f307aa0e Mon Sep 17 00:00:00 2001 From: Afaque Hussain Date: Thu, 24 Jan 2013 12:13:31 -0800 Subject: [PATCH] Application Detail View Summary: Added Applications Details View Applications Detail View Test Plan: In "Applications" application, clicked on each application to check whether the each application detail view is displayed. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D4615 --- src/__phutil_library_map__.php | 2 + .../PhabricatorApplicationApplications.php | 2 + ...ricatorApplicationDetailViewController.php | 77 +++++++++++++++++++ .../PhabricatorApplicationsListController.php | 10 +-- 4 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 src/applications/meta/controller/PhabricatorApplicationDetailViewController.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index f12b305c9d..6201530b3e 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -603,6 +603,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php', 'PhabricatorApplicationCountdown' => 'applications/countdown/application/PhabricatorApplicationCountdown.php', 'PhabricatorApplicationDaemons' => 'applications/daemon/application/PhabricatorApplicationDaemons.php', + 'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php', 'PhabricatorApplicationDifferential' => 'applications/differential/application/PhabricatorApplicationDifferential.php', 'PhabricatorApplicationDiffusion' => 'applications/diffusion/application/PhabricatorApplicationDiffusion.php', 'PhabricatorApplicationDiviner' => 'applications/diviner/application/PhabricatorApplicationDiviner.php', @@ -1997,6 +1998,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationConfigOptions' => 'Phobject', 'PhabricatorApplicationCountdown' => 'PhabricatorApplication', 'PhabricatorApplicationDaemons' => 'PhabricatorApplication', + 'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController', 'PhabricatorApplicationDifferential' => 'PhabricatorApplication', 'PhabricatorApplicationDiffusion' => 'PhabricatorApplication', 'PhabricatorApplicationDiviner' => 'PhabricatorApplication', diff --git a/src/applications/meta/application/PhabricatorApplicationApplications.php b/src/applications/meta/application/PhabricatorApplicationApplications.php index 488b385b88..6139945b6f 100644 --- a/src/applications/meta/application/PhabricatorApplicationApplications.php +++ b/src/applications/meta/application/PhabricatorApplicationApplications.php @@ -26,6 +26,8 @@ final class PhabricatorApplicationApplications extends PhabricatorApplication { return array( '/applications/' => array( '' => 'PhabricatorApplicationsListController', + 'view/(?P\w+)/' => + 'PhabricatorApplicationDetailViewController', ), diff --git a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php new file mode 100644 index 0000000000..db9cd66199 --- /dev/null +++ b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php @@ -0,0 +1,77 @@ +application = $data['application']; + } + + public function processRequest() { + $request = $this->getRequest(); + $user = $request->getUser(); + + $selected = null; + $applications = PhabricatorApplication::getAllInstalledApplications(); + + foreach ($applications as $application) { + if (get_class($application) == $this->application) { + $selected = $application; + break; + } + } + + 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); + + return $this->buildApplicationPage( + array( + $crumbs, + id(new PhabricatorHeaderView())->setHeader($title), + $actions, + $properties, + ), + array( + 'title' => $title, + 'device' => true, + )); + } + + private function buildPropertyView(PhabricatorApplication $selected) { + $properties = new PhabricatorPropertyListView(); + + $properties->addProperty( + pht('Status'), pht('Installed')); + + $properties->addProperty( + pht('Description'), $selected->getShortDescription()); + + return $properties; + } + + private function buildActionView(PhabricatorUser $user) { + + return id(new PhabricatorActionListView()) + ->setUser($user) + ->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Uninstall')) + ->setIcon('delete') + ); + } + +} diff --git a/src/applications/meta/controller/PhabricatorApplicationsListController.php b/src/applications/meta/controller/PhabricatorApplicationsListController.php index 36809159e6..3ef64b24bd 100644 --- a/src/applications/meta/controller/PhabricatorApplicationsListController.php +++ b/src/applications/meta/controller/PhabricatorApplicationsListController.php @@ -45,16 +45,16 @@ final class PhabricatorApplicationsListController private function buildInstalledApplicationsList(array $applications) { + $list = new PhabricatorObjectItemListView(); - $list = new PhabricatorObjectItemListView(); - foreach ($applications as $applications) { + foreach ($applications as $application) { $item = id(new PhabricatorObjectItemView()) - ->setHeader($applications->getName()) + ->setHeader($application->getName()) + ->setHref('/applications/view/'.get_class($application).'/') ->addAttribute( - phutil_escape_html($applications->getShortDescription())); + phutil_escape_html($application->getShortDescription())); $list->addItem($item); } - return $list; }