Path: blob/master/src/applications/meta/controller/PhabricatorApplicationUninstallController.php
12256 views
<?php12final class PhabricatorApplicationUninstallController3extends PhabricatorApplicationsController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();7$user = $request->getUser();8$action = $request->getURIData('action');9$application_name = $request->getURIData('application');1011$application = id(new PhabricatorApplicationQuery())12->setViewer($viewer)13->withClasses(array($application_name))14->requireCapabilities(15array(16PhabricatorPolicyCapability::CAN_VIEW,17PhabricatorPolicyCapability::CAN_EDIT,18))19->executeOne();2021if (!$application) {22return new Aphront404Response();23}2425$view_uri = $this->getApplicationURI('view/'.$application_name);2627$prototypes_enabled = PhabricatorEnv::getEnvConfig(28'phabricator.show-prototypes');2930$dialog = id(new AphrontDialogView())31->setUser($viewer)32->addCancelButton($view_uri);3334if ($application->isPrototype() && !$prototypes_enabled) {35$dialog36->setTitle(pht('Prototypes Not Enabled'))37->appendChild(38pht(39'To manage prototypes, enable them by setting %s in your '.40'configuration.',41phutil_tag('tt', array(), 'phabricator.show-prototypes')));42return id(new AphrontDialogResponse())->setDialog($dialog);43}4445if ($request->isDialogFormPost()) {46$xactions = array();47$template = $application->getApplicationTransactionTemplate();48$xactions[] = id(clone $template)49->setTransactionType(50PhabricatorApplicationUninstallTransaction::TRANSACTIONTYPE)51->setNewValue($action);5253$editor = id(new PhabricatorApplicationEditor())54->setActor($user)55->setContentSourceFromRequest($request)56->setContinueOnNoEffect(true)57->setContinueOnMissingFields(true);5859try {60$editor->applyTransactions($application, $xactions);61return id(new AphrontRedirectResponse())->setURI($view_uri);62} catch (PhabricatorApplicationTransactionValidationException $ex) {63$validation_exception = $ex;64}6566return $this->newDialog()67->setTitle(pht('Validation Failed'))68->setValidationException($validation_exception)69->addCancelButton($view_uri);70}7172if ($action == 'install') {73if ($application->canUninstall()) {74$dialog75->setTitle(pht('Confirmation'))76->appendChild(77pht(78'Install %s application?',79$application->getName()))80->addSubmitButton(pht('Install'));8182} else {83$dialog84->setTitle(pht('Information'))85->appendChild(pht('You cannot install an installed application.'));86}87} else {88if ($application->canUninstall()) {89$dialog->setTitle(pht('Really Uninstall Application?'));9091if ($application instanceof PhabricatorHomeApplication) {92$dialog93->appendParagraph(94pht(95'Are you absolutely certain you want to uninstall the Home '.96'application?'))97->appendParagraph(98pht(99'This is very unusual and will leave you without any '.100'content on the home page. You should only do this if you '.101'are certain you know what you are doing.'))102->addSubmitButton(pht('Completely Break Everything'));103} else {104$dialog105->appendParagraph(106pht(107'Really uninstall the %s application?',108$application->getName()))109->addSubmitButton(pht('Uninstall'));110}111} else {112$dialog113->setTitle(pht('Information'))114->appendChild(115pht(116'This application is required and cannot be uninstalled.'));117}118}119return id(new AphrontDialogResponse())->setDialog($dialog);120}121122}123124125