diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index dcb61c6342..c6b7b28774 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -4180,6 +4180,7 @@ phutil_register_library_map(array( 'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php', 'PhortuneMerchantController' => 'applications/phortune/controller/PhortuneMerchantController.php', 'PhortuneMerchantEditController' => 'applications/phortune/controller/PhortuneMerchantEditController.php', + 'PhortuneMerchantEditEngine' => 'applications/phortune/editor/PhortuneMerchantEditEngine.php', 'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php', 'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php', 'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/PhortuneMerchantInvoiceCreateController.php', @@ -9430,6 +9431,7 @@ phutil_register_library_map(array( 'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability', 'PhortuneMerchantController' => 'PhortuneController', 'PhortuneMerchantEditController' => 'PhortuneMerchantController', + 'PhortuneMerchantEditEngine' => 'PhabricatorEditEngine', 'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor', 'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType', 'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController', diff --git a/src/applications/phortune/application/PhabricatorPhortuneApplication.php b/src/applications/phortune/application/PhabricatorPhortuneApplication.php index 313328e41e..434cc4119a 100644 --- a/src/applications/phortune/application/PhabricatorPhortuneApplication.php +++ b/src/applications/phortune/application/PhabricatorPhortuneApplication.php @@ -82,7 +82,8 @@ final class PhabricatorPhortuneApplication extends PhabricatorApplication { 'merchant/' => array( '(?:query/(?P[^/]+)/)?' => 'PhortuneMerchantListController', 'picture/(?:(?P\d+)/)?' => 'PhortuneMerchantPictureController', - 'edit/(?:(?P\d+)/)?' => 'PhortuneMerchantEditController', + $this->getEditRoutePattern('edit/') + => 'PhortuneMerchantEditController', 'orders/(?P\d+)/(?:query/(?P[^/]+)/)?' => 'PhortuneCartListController', '(?P\d+)/' => array( diff --git a/src/applications/phortune/controller/PhortuneMerchantEditController.php b/src/applications/phortune/controller/PhortuneMerchantEditController.php index 4def6edebf..07c743251c 100644 --- a/src/applications/phortune/controller/PhortuneMerchantEditController.php +++ b/src/applications/phortune/controller/PhortuneMerchantEditController.php @@ -4,193 +4,8 @@ final class PhortuneMerchantEditController extends PhortuneMerchantController { public function handleRequest(AphrontRequest $request) { - $viewer = $request->getViewer(); - $id = $request->getURIData('id'); - - if ($id) { - $merchant = id(new PhortuneMerchantQuery()) - ->setViewer($viewer) - ->withIDs(array($id)) - ->requireCapabilities( - array( - PhabricatorPolicyCapability::CAN_VIEW, - PhabricatorPolicyCapability::CAN_EDIT, - )) - ->executeOne(); - if (!$merchant) { - return new Aphront404Response(); - } - $is_new = false; - } else { - $this->requireApplicationCapability( - PhortuneMerchantCapability::CAPABILITY); - - $merchant = PhortuneMerchant::initializeNewMerchant($viewer); - $merchant->attachMemberPHIDs(array($viewer->getPHID())); - $is_new = true; - } - - if ($is_new) { - $title = pht('Create Merchant'); - $button_text = pht('Create Merchant'); - $cancel_uri = $this->getApplicationURI('merchant/'); - } else { - $title = pht( - 'Edit Merchant %d %s', - $merchant->getID(), - $merchant->getName()); - $button_text = pht('Save Changes'); - $cancel_uri = $this->getApplicationURI( - '/merchant/'.$merchant->getID().'/'); - } - - $e_name = true; - $v_name = $merchant->getName(); - $v_desc = $merchant->getDescription(); - $v_cont = $merchant->getContactInfo(); - $v_members = $merchant->getMemberPHIDs(); - $e_members = null; - - $validation_exception = null; - if ($request->isFormPost()) { - $v_name = $request->getStr('name'); - $v_desc = $request->getStr('desc'); - $v_cont = $request->getStr('cont'); - $v_view = $request->getStr('viewPolicy'); - $v_edit = $request->getStr('editPolicy'); - $v_members = $request->getArr('memberPHIDs'); - - $type_name = PhortuneMerchantTransaction::TYPE_NAME; - $type_desc = PhortuneMerchantTransaction::TYPE_DESCRIPTION; - $type_cont = PhortuneMerchantTransaction::TYPE_CONTACTINFO; - $type_edge = PhabricatorTransactions::TYPE_EDGE; - $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; - - $edge_members = PhortuneMerchantHasMemberEdgeType::EDGECONST; - - $xactions = array(); - - $xactions[] = id(new PhortuneMerchantTransaction()) - ->setTransactionType($type_name) - ->setNewValue($v_name); - - $xactions[] = id(new PhortuneMerchantTransaction()) - ->setTransactionType($type_desc) - ->setNewValue($v_desc); - - $xactions[] = id(new PhortuneMerchantTransaction()) - ->setTransactionType($type_cont) - ->setNewValue($v_cont); - - $xactions[] = id(new PhortuneMerchantTransaction()) - ->setTransactionType($type_view) - ->setNewValue($v_view); - - $xactions[] = id(new PhortuneMerchantTransaction()) - ->setTransactionType($type_edge) - ->setMetadataValue('edge:type', $edge_members) - ->setNewValue( - array( - '=' => array_fuse($v_members), - )); - - $editor = id(new PhortuneMerchantEditor()) - ->setActor($viewer) - ->setContentSourceFromRequest($request) - ->setContinueOnNoEffect(true); - - try { - $editor->applyTransactions($merchant, $xactions); - - $id = $merchant->getID(); - $merchant_uri = $this->getApplicationURI("merchant/{$id}/"); - return id(new AphrontRedirectResponse())->setURI($merchant_uri); - } catch (PhabricatorApplicationTransactionValidationException $ex) { - $validation_exception = $ex; - - $e_name = $ex->getShortMessage($type_name); - $e_mbmers = $ex->getShortMessage($type_edge); - - $merchant->setViewPolicy($v_view); - } - } - - $policies = id(new PhabricatorPolicyQuery()) - ->setViewer($viewer) - ->setObject($merchant) - ->execute(); - - $form = id(new AphrontFormView()) - ->setUser($viewer) - ->appendChild( - id(new AphrontFormTextControl()) - ->setName('name') - ->setLabel(pht('Name')) - ->setValue($v_name) - ->setError($e_name)) - ->appendChild( - id(new PhabricatorRemarkupControl()) - ->setUser($viewer) - ->setName('desc') - ->setLabel(pht('Description')) - ->setValue($v_desc)) - ->appendChild( - id(new PhabricatorRemarkupControl()) - ->setUser($viewer) - ->setName('cont') - ->setLabel(pht('Contact Info')) - ->setValue($v_cont)) - ->appendControl( - id(new AphrontFormTokenizerControl()) - ->setDatasource(new PhabricatorPeopleDatasource()) - ->setLabel(pht('Members')) - ->setName('memberPHIDs') - ->setValue($v_members) - ->setError($e_members)) - ->appendChild( - id(new AphrontFormPolicyControl()) - ->setName('viewPolicy') - ->setPolicyObject($merchant) - ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) - ->setPolicies($policies)) - ->appendChild( - id(new AphrontFormSubmitControl()) - ->setValue($button_text) - ->addCancelButton($cancel_uri)); - - $header = id(new PHUIHeaderView()) - ->setHeader($title); - - $crumbs = $this->buildApplicationCrumbs(); - if ($is_new) { - $crumbs->addTextCrumb(pht('Create Merchant')); - $header->setHeaderIcon('fa-plus-square'); - } else { - $crumbs->addTextCrumb( - pht('Merchant %d', $merchant->getID()), - $this->getApplicationURI('/merchant/'.$merchant->getID().'/')); - $crumbs->addTextCrumb(pht('Edit')); - $header->setHeaderIcon('fa-pencil'); - } - $crumbs->setBorder(true); - - $box = id(new PHUIObjectBoxView()) - ->setHeaderText(pht('Merchant')) - ->setValidationException($validation_exception) - ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) - ->setForm($form); - - $view = id(new PHUITwoColumnView()) - ->setHeader($header) - ->setFooter(array( - $box, - )); - - return $this->newPage() - ->setTitle($title) - ->setCrumbs($crumbs) - ->appendChild($view); - - } - + return id(new PhortuneMerchantEditEngine()) + ->setController($this) + ->buildResponse(); + } } diff --git a/src/applications/phortune/editor/PhortuneMerchantEditEngine.php b/src/applications/phortune/editor/PhortuneMerchantEditEngine.php new file mode 100644 index 0000000000..1c68fe67c9 --- /dev/null +++ b/src/applications/phortune/editor/PhortuneMerchantEditEngine.php @@ -0,0 +1,120 @@ +getViewer()); + } + + protected function newObjectQuery() { + return new PhortuneMerchantQuery(); + } + + protected function getObjectCreateTitleText($object) { + return pht('Create New Merchant'); + } + + protected function getObjectEditTitleText($object) { + return pht('Edit Merchant: %s', $object->getName()); + } + + protected function getObjectEditShortText($object) { + return $object->getName(); + } + + protected function getObjectCreateShortText() { + return pht('Create Merchant'); + } + + protected function getObjectName() { + return pht('Merchant'); + } + + protected function getObjectCreateCancelURI($object) { + return $this->getApplication()->getApplicationURI('/'); + } + + protected function getEditorURI() { + return $this->getApplication()->getApplicationURI('edit/'); + } + + protected function getObjectViewURI($object) { + return $object->getViewURI(); + } + + public function isEngineConfigurable() { + return false; + } + + protected function buildCustomEditFields($object) { + $viewer = $this->getViewer(); + + if ($this->getIsCreate()) { + $member_phids = array($viewer->getPHID()); + } else { + $member_phids = $object->getMemberPHIDs(); + } + + return array( + id(new PhabricatorTextEditField()) + ->setKey('name') + ->setLabel(pht('Name')) + ->setDescription(pht('Merchant name.')) + ->setConduitTypeDescription(pht('New Merchant name.')) + ->setIsRequired(true) + ->setTransactionType(PhortuneMerchantTransaction::TYPE_NAME) + ->setValue($object->getName()), + + id(new PhabricatorRemarkupEditField()) + ->setKey('description') + ->setLabel(pht('Description')) + ->setDescription(pht('Merchant description.')) + ->setConduitTypeDescription(pht('New merchant description.')) + ->setTransactionType(PhortuneMerchantTransaction::TYPE_DESCRIPTION) + ->setValue($object->getDescription()), + + id(new PhabricatorRemarkupEditField()) + ->setKey('contactInfo') + ->setLabel(pht('Contact Info')) + ->setDescription(pht('Merchant contact information.')) + ->setConduitTypeDescription(pht('Merchant contact information.')) + ->setTransactionType(PhortuneMerchantTransaction::TYPE_CONTACTINFO) + ->setValue($object->getContactInfo()), + + id(new PhabricatorUsersEditField()) + ->setKey('members') + ->setAliases(array('memberPHIDs')) + ->setLabel(pht('Members')) + ->setUseEdgeTransactions(true) + ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) + ->setMetadataValue( + 'edge:type', + PhortuneMerchantHasMemberEdgeType::EDGECONST) + ->setDescription(pht('Initial merchant members.')) + ->setConduitDescription(pht('Set merchant members.')) + ->setConduitTypeDescription(pht('New list of members.')) + ->setValue($member_phids), + + ); + } + +} diff --git a/src/applications/phortune/storage/PhortuneMerchant.php b/src/applications/phortune/storage/PhortuneMerchant.php index 7d202eeaf0..b2117a2662 100644 --- a/src/applications/phortune/storage/PhortuneMerchant.php +++ b/src/applications/phortune/storage/PhortuneMerchant.php @@ -63,7 +63,6 @@ final class PhortuneMerchant extends PhortuneDAO return $this->assertAttached($this->profileImageFile); } - /* -( PhabricatorApplicationTransactionInterface )------------------------- */