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); }