Path: blob/master/src/applications/meta/controller/PhabricatorApplicationEditController.php
12256 views
<?php12final class PhabricatorApplicationEditController3extends PhabricatorApplicationsController {45public function handleRequest(AphrontRequest $request) {6$user = $request->getUser();7$application = $request->getURIData('application');89$application = id(new PhabricatorApplicationQuery())10->setViewer($user)11->withClasses(array($application))12->requireCapabilities(13array(14PhabricatorPolicyCapability::CAN_VIEW,15PhabricatorPolicyCapability::CAN_EDIT,16))17->executeOne();18if (!$application) {19return new Aphront404Response();20}2122$title = $application->getName();2324$view_uri = $this->getApplicationURI('view/'.get_class($application).'/');2526$policies = id(new PhabricatorPolicyQuery())27->setViewer($user)28->setObject($application)29->execute();3031if ($request->isFormPost()) {32$xactions = array();3334$template = $application->getApplicationTransactionTemplate();35foreach ($application->getCapabilities() as $capability) {36if (!$application->isCapabilityEditable($capability)) {37continue;38}3940$old = $application->getPolicy($capability);41$new = $request->getStr('policy:'.$capability);4243if ($old == $new) {44// No change to the setting.45continue;46}4748$xactions[] = id(clone $template)49->setTransactionType(50PhabricatorApplicationPolicyChangeTransaction::TRANSACTIONTYPE)51->setMetadataValue(52PhabricatorApplicationPolicyChangeTransaction::METADATA_ATTRIBUTE,53$capability)54->setNewValue($new);55}5657$editor = id(new PhabricatorApplicationEditor())58->setActor($user)59->setContentSourceFromRequest($request)60->setContinueOnNoEffect(true)61->setContinueOnMissingFields(true);6263try {64$editor->applyTransactions($application, $xactions);65return id(new AphrontRedirectResponse())->setURI($view_uri);66} catch (PhabricatorApplicationTransactionValidationException $ex) {67$validation_exception = $ex;68}6970return $this->newDialog()71->setTitle(pht('Validation Failed'))72->setValidationException($validation_exception)73->addCancelButton($view_uri);74}7576$descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions(77$user,78$application);7980$form = id(new AphrontFormView())81->setUser($user);8283$locked_policies = PhabricatorEnv::getEnvConfig('policy.locked');84foreach ($application->getCapabilities() as $capability) {85$label = $application->getCapabilityLabel($capability);86$can_edit = $application->isCapabilityEditable($capability);87$locked = idx($locked_policies, $capability);88$caption = $application->getCapabilityCaption($capability);8990if (!$can_edit || $locked) {91$form->appendChild(92id(new AphrontFormStaticControl())93->setLabel($label)94->setValue(idx($descriptions, $capability))95->setCaption($caption));96} else {97$control = id(new AphrontFormPolicyControl())98->setUser($user)99->setDisabled($locked)100->setCapability($capability)101->setPolicyObject($application)102->setPolicies($policies)103->setLabel($label)104->setName('policy:'.$capability)105->setCaption($caption);106107$template = $application->getCapabilityTemplatePHIDType($capability);108if ($template) {109$phid_types = PhabricatorPHIDType::getAllTypes();110$phid_type = idx($phid_types, $template);111if ($phid_type) {112$template_object = $phid_type->newObject();113if ($template_object) {114$template_policies = id(new PhabricatorPolicyQuery())115->setViewer($user)116->setObject($template_object)117->execute();118119// NOTE: We want to expose both any object template policies120// (like "Subscribers") and any custom policy.121$all_policies = $template_policies + $policies;122123$control->setPolicies($all_policies);124$control->setTemplateObject($template_object);125}126}127128$control->setTemplatePHIDType($template);129}130131$form->appendControl($control);132}133134}135136$form->appendChild(137id(new AphrontFormSubmitControl())138->setValue(pht('Save Policies'))139->addCancelButton($view_uri));140141$crumbs = $this->buildApplicationCrumbs();142$crumbs->addTextCrumb($application->getName(), $view_uri);143$crumbs->addTextCrumb(pht('Edit Policies'));144$crumbs->setBorder(true);145146$header = id(new PHUIHeaderView())147->setHeader(pht('Edit Policies: %s', $application->getName()))148->setHeaderIcon('fa-pencil');149150$object_box = id(new PHUIObjectBoxView())151->setHeaderText(pht('Policies'))152->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)153->setForm($form);154155$view = id(new PHUITwoColumnView())156->setHeader($header)157->setFooter(array(158$object_box,159));160161return $this->newPage()162->setTitle($title)163->setCrumbs($crumbs)164->appendChild($view);165}166167}168169170