diff --git a/src/applications/transactions/controller/PhabricatorEditEngineController.php b/src/applications/transactions/controller/PhabricatorEditEngineController.php index e7306c7866..9c712f7e3a 100644 --- a/src/applications/transactions/controller/PhabricatorEditEngineController.php +++ b/src/applications/transactions/controller/PhabricatorEditEngineController.php @@ -1,86 +1,79 @@ engineKey = $engine_key; return $this; } public function getEngineKey() { return $this->engineKey; } protected function buildApplicationCrumbs() { $crumbs = parent::buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Edit Engines'), '/transactions/editengine/'); $engine_key = $this->getEngineKey(); if ($engine_key !== null) { $engine = PhabricatorEditEngine::getByKey( $this->getViewer(), $engine_key); if ($engine) { $crumbs->addTextCrumb( $engine->getEngineName(), "/transactions/editengine/{$engine_key}/"); } } return $crumbs; } protected function loadConfigForEdit() { return $this->loadConfig($need_edit = true); } protected function loadConfigForView() { return $this->loadConfig($need_edit = false); } private function loadConfig($need_edit) { $request = $this->getRequest(); $viewer = $this->getViewer(); $engine_key = $request->getURIData('engineKey'); $this->setEngineKey($engine_key); $key = $request->getURIData('key'); if ($need_edit) { $capabilities = array( PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT, ); } else { $capabilities = array( PhabricatorPolicyCapability::CAN_VIEW, ); } $config = id(new PhabricatorEditEngineConfigurationQuery()) ->setViewer($viewer) ->withEngineKeys(array($engine_key)) ->withIdentifiers(array($key)) ->requireCapabilities($capabilities) ->executeOne(); if ($config) { $engine = $config->getEngine(); - - // TODO: When we're editing the meta-engine, we need to set the engine - // itself as its own target. This is hacky and it would be nice to find - // a cleaner approach later. - if ($engine instanceof PhabricatorEditEngineConfigurationEditEngine) { - $engine->setTargetEngine($engine); - } } return $config; } } diff --git a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php index de667ace4e..0c1c4787db 100644 --- a/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php +++ b/src/applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php @@ -1,99 +1,100 @@ targetEngine = $target_engine; return $this; } public function getTargetEngine() { if (!$this->targetEngine) { - throw new PhutilInvalidStateException('setTargetEngine'); + // If we don't have a target engine, assume we're editing ourselves. + return new PhabricatorEditEngineConfigurationEditEngine(); } return $this->targetEngine; } protected function getCreateNewObjectPolicy() { return $this->getTargetEngine() ->getApplication() ->getPolicy(PhabricatorPolicyCapability::CAN_EDIT); } public function getEngineName() { return pht('Edit Configurations'); } public function getEngineApplicationClass() { return 'PhabricatorTransactionsApplication'; } protected function newEditableObject() { return PhabricatorEditEngineConfiguration::initializeNewConfiguration( $this->getViewer(), $this->getTargetEngine()); } protected function newObjectQuery() { return id(new PhabricatorEditEngineConfigurationQuery()); } protected function getObjectCreateTitleText($object) { return pht('Create New Form'); } protected function getObjectEditTitleText($object) { return pht('Edit Form %d: %s', $object->getID(), $object->getDisplayName()); } protected function getObjectEditShortText($object) { return pht('Form %d', $object->getID()); } protected function getObjectCreateShortText() { return pht('Create Form'); } protected function getObjectViewURI($object) { $id = $object->getID(); return $this->getURI("view/{$id}/"); } protected function getEditorURI() { return $this->getURI('edit/'); } protected function getObjectCreateCancelURI($object) { return $this->getURI(); } private function getURI($path = null) { $engine_key = $this->getTargetEngine()->getEngineKey(); return "/transactions/editengine/{$engine_key}/{$path}"; } protected function buildCustomEditFields($object) { return array( id(new PhabricatorTextEditField()) ->setKey('name') ->setLabel(pht('Name')) ->setDescription(pht('Name of the form.')) ->setTransactionType( PhabricatorEditEngineConfigurationTransaction::TYPE_NAME) ->setValue($object->getName()), id(new PhabricatorRemarkupEditField()) ->setKey('preamble') ->setLabel(pht('Preamble')) ->setDescription(pht('Optional instructions, shown above the form.')) ->setTransactionType( PhabricatorEditEngineConfigurationTransaction::TYPE_PREAMBLE) ->setValue($object->getPreamble()), ); } }