Differential D20279 Diff 48493 src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php
- This file was added.
| <?php | |||||
| final class PhabricatorProjectTriggerEditController | |||||
| extends PhabricatorProjectTriggerController { | |||||
| public function handleRequest(AphrontRequest $request) { | |||||
| $request = $this->getRequest(); | |||||
| $viewer = $request->getViewer(); | |||||
| $id = $request->getURIData('id'); | |||||
| if ($id) { | |||||
| $trigger = id(new PhabricatorProjectTriggerQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($id)) | |||||
| ->requireCapabilities( | |||||
| array( | |||||
| PhabricatorPolicyCapability::CAN_VIEW, | |||||
| PhabricatorPolicyCapability::CAN_EDIT, | |||||
| )) | |||||
| ->executeOne(); | |||||
| if (!$trigger) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| } else { | |||||
| $trigger = PhabricatorProjectTrigger::initializeNewTrigger(); | |||||
| } | |||||
| $column_phid = $request->getStr('columnPHID'); | |||||
| if ($column_phid) { | |||||
| $column = id(new PhabricatorProjectColumnQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withPHIDs(array($column_phid)) | |||||
| ->requireCapabilities( | |||||
| array( | |||||
| PhabricatorPolicyCapability::CAN_VIEW, | |||||
| PhabricatorPolicyCapability::CAN_EDIT, | |||||
| )) | |||||
| ->executeOne(); | |||||
| if (!$column) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| $board_uri = $column->getBoardURI(); | |||||
| } else { | |||||
| $column = null; | |||||
| $board_uri = null; | |||||
| } | |||||
| if ($board_uri) { | |||||
| $cancel_uri = $board_uri; | |||||
| } else if ($trigger->getID()) { | |||||
| $cancel_uri = $trigger->getURI(); | |||||
| } else { | |||||
| $cancel_uri = $this->getApplicationURI('trigger/'); | |||||
| } | |||||
| $v_name = $trigger->getName(); | |||||
| $v_edit = $trigger->getEditPolicy(); | |||||
| $e_name = null; | |||||
| $e_edit = null; | |||||
| $validation_exception = null; | |||||
| if ($request->isFormPost()) { | |||||
| try { | |||||
| $v_name = $request->getStr('name'); | |||||
| $v_edit = $request->getStr('editPolicy'); | |||||
| $xactions = array(); | |||||
| if (!$trigger->getID()) { | |||||
| $xactions[] = $trigger->getApplicationTransactionTemplate() | |||||
| ->setTransactionType(PhabricatorTransactions::TYPE_CREATE) | |||||
| ->setNewValue(true); | |||||
| } | |||||
| $xactions[] = $trigger->getApplicationTransactionTemplate() | |||||
| ->setTransactionType( | |||||
| PhabricatorProjectTriggerNameTransaction::TRANSACTIONTYPE) | |||||
| ->setNewValue($v_name); | |||||
| $xactions[] = $trigger->getApplicationTransactionTemplate() | |||||
| ->setTransactionType(PhabricatorTransactions::TYPE_EDIT_POLICY) | |||||
| ->setNewValue($v_edit); | |||||
| $editor = $trigger->getApplicationTransactionEditor() | |||||
| ->setActor($viewer) | |||||
| ->setContentSourceFromRequest($request) | |||||
| ->setContinueOnNoEffect(true); | |||||
| $editor->applyTransactions($trigger, $xactions); | |||||
| $next_uri = $trigger->getURI(); | |||||
| if ($column) { | |||||
| $column_xactions = array(); | |||||
| // TODO: Modularize column transactions so we can change the column | |||||
| // trigger here. For now, this does nothing. | |||||
| $column_editor = $column->getApplicationTransactionEditor() | |||||
| ->setActor($viewer) | |||||
| ->setContentSourceFromRequest($request) | |||||
| ->setContinueOnNoEffect(true); | |||||
| $column_editor->applyTransactions($column, $column_xactions); | |||||
| $next_uri = $column->getBoardURI(); | |||||
| } | |||||
| return id(new AphrontRedirectResponse())->setURI($next_uri); | |||||
| } catch (PhabricatorApplicationTransactionValidationException $ex) { | |||||
| $validation_exception = $ex; | |||||
| $e_name = $ex->getShortMessage( | |||||
| PhabricatorProjectTriggerNameTransaction::TRANSACTIONTYPE); | |||||
| $e_edit = $ex->getShortMessage( | |||||
| PhabricatorTransactions::TYPE_EDIT_POLICY); | |||||
| $trigger->setEditPolicy($v_edit); | |||||
| } | |||||
| } | |||||
| if ($trigger->getID()) { | |||||
| $title = $trigger->getObjectName(); | |||||
| $submit = pht('Save Trigger'); | |||||
| $header = pht('Edit Trigger: %s', $trigger->getObjectName()); | |||||
| } else { | |||||
| $title = pht('New Trigger'); | |||||
| $submit = pht('Create Trigger'); | |||||
| $header = pht('New Trigger'); | |||||
| } | |||||
| $form = id(new AphrontFormView()) | |||||
| ->setViewer($viewer); | |||||
| if ($column) { | |||||
| $form->addHiddenInput('columnPHID', $column->getPHID()); | |||||
| } | |||||
| $form->appendControl( | |||||
| id(new AphrontFormTextControl()) | |||||
| ->setLabel(pht('Name')) | |||||
| ->setName('name') | |||||
| ->setValue($v_name) | |||||
| ->setError($e_name) | |||||
| ->setPlaceholder($trigger->getDefaultName())); | |||||
| $policies = id(new PhabricatorPolicyQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->setObject($trigger) | |||||
| ->execute(); | |||||
| $form->appendControl( | |||||
| id(new AphrontFormPolicyControl()) | |||||
| ->setName('editPolicy') | |||||
| ->setPolicyObject($trigger) | |||||
| ->setCapability(PhabricatorPolicyCapability::CAN_EDIT) | |||||
| ->setPolicies($policies) | |||||
| ->setError($e_edit)); | |||||
| $form->appendControl( | |||||
| id(new AphrontFormSubmitControl()) | |||||
| ->setValue($submit) | |||||
| ->addCancelButton($cancel_uri)); | |||||
| $header = id(new PHUIHeaderView()) | |||||
| ->setHeader($header); | |||||
| $box_view = id(new PHUIObjectBoxView()) | |||||
| ->setHeader($header) | |||||
| ->setValidationException($validation_exception) | |||||
| ->appendChild($form); | |||||
| $column_view = id(new PHUITwoColumnView()) | |||||
| ->setFooter($box_view); | |||||
| $crumbs = $this->buildApplicationCrumbs() | |||||
| ->setBorder(true); | |||||
| if ($column) { | |||||
| $crumbs->addTextCrumb( | |||||
| pht( | |||||
| '%s: %s', | |||||
| $column->getProject()->getDisplayName(), | |||||
| $column->getName()), | |||||
| $board_uri); | |||||
| } | |||||
| $crumbs->addTextCrumb($title); | |||||
| return $this->newPage() | |||||
| ->setTitle($title) | |||||
| ->setCrumbs($crumbs) | |||||
| ->appendChild($column_view); | |||||
| } | |||||
| } | |||||