From 2703a2e9979e6f7acf1e4b0c47599f4433d1f01a Mon Sep 17 00:00:00 2001 From: Afaque Hussain Date: Wed, 30 Jan 2013 13:32:32 -0800 Subject: [PATCH] Disabled Uninstall state for essential applications Summary: Disabled Uninstall state for essential applications of Phabricator. Information provided why they cannot uninstall these applications. Also take care of users trying to install an application which cannot be uninstalled by editing the URI. Test Plan: Manually tested Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D4743 --- ...ricatorApplicationDetailViewController.php | 44 ++++++++++-------- ...bricatorApplicationUninstallController.php | 46 +++++++++++-------- 2 files changed, 54 insertions(+), 36 deletions(-) diff --git a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php index 259b3c7439..beda1d894f 100644 --- a/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php +++ b/src/applications/meta/controller/PhabricatorApplicationDetailViewController.php @@ -64,30 +64,38 @@ final class PhabricatorApplicationDetailViewController private function buildActionView( PhabricatorUser $user, PhabricatorApplication $selected) { + $view = id(new PhabricatorActionListView()) + ->setUser($user); + if ($selected->canUninstall()) { if ($selected->isInstalled()) { - - return id(new PhabricatorActionListView()) - ->setUser($user) - ->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Uninstall')) - ->setIcon('delete') - ->setHref( + $view->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Uninstall')) + ->setIcon('delete') + ->setHref( $this->getApplicationURI(get_class($selected).'/uninstall/')) - ); + ); } else { - return id(new PhabricatorActionListView()) - ->setUser($user) - ->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Install')) - ->setIcon('new') - ->setHref( - $this->getApplicationURI(get_class($selected).'/install/')) - ); + $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/PhabricatorApplicationUninstallController.php b/src/applications/meta/controller/PhabricatorApplicationUninstallController.php index fcf32ea4a4..51b03cb08b 100644 --- a/src/applications/meta/controller/PhabricatorApplicationUninstallController.php +++ b/src/applications/meta/controller/PhabricatorApplicationUninstallController.php @@ -17,7 +17,7 @@ final class PhabricatorApplicationUninstallController $selected = PhabricatorApplication::getByClass($this->application); - if (!$selected || !$selected->canUninstall()) { + if (!$selected) { return new Aphront404Response(); } @@ -26,27 +26,37 @@ final class PhabricatorApplicationUninstallController return id(new AphrontRedirectResponse())->setURI('/applications/'); } + $dialog = id(new AphrontDialogView()) + ->setUser($user) + ->addCancelButton('/applications/view/'.$this->application); + if ($this->action == 'install') { + if ($selected->canUninstall()) { + $dialog->setTitle('Confirmation') + ->appendChild( + 'Install '. $selected->getName(). ' application ?' + ) + ->addSubmitButton('Install'); - $dialog = id(new AphrontDialogView()) - ->setUser($user) - ->setTitle('Confirmation') - ->appendChild( - 'Install '. $selected->getName(). ' application ?' - ) - ->addSubmitButton('Install') - ->addCancelButton('/applications/view/'.$this->application); + } else { + $dialog->setTitle('Information') + ->appendChild('You cannot install a installed application.'); + } } else { - $dialog = id(new AphrontDialogView()) - ->setUser($user) - ->setTitle('Confirmation') - ->appendChild( - 'Really Uninstall '. $selected->getName(). ' application ?' - ) - ->addSubmitButton('Uninstall') - ->addCancelButton('/applications/view/'.$this->application); + if ($selected->canUninstall()) { + $dialog->setTitle('Confirmation') + ->appendChild( + 'Really Uninstall '. $selected->getName(). ' application ?' + ) + ->addSubmitButton('Uninstall'); + } else { + $dialog->setTitle('Information') + ->appendChild( + 'This application cannot be uninstalled, + because it is required for Phabricator to work.' + ); + } } - return id(new AphrontDialogResponse())->setDialog($dialog); }