Page MenuHomePhabricator

D16750.id40342.diff
No OneTemporary

D16750.id40342.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -4174,6 +4174,7 @@
'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',
@@ -9414,6 +9415,7 @@
'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
--- a/src/applications/phortune/application/PhabricatorPhortuneApplication.php
+++ b/src/applications/phortune/application/PhabricatorPhortuneApplication.php
@@ -81,7 +81,10 @@
),
'merchant/' => array(
'(?:query/(?P<queryKey>[^/]+)/)?' => 'PhortuneMerchantListController',
- 'edit/(?:(?P<id>\d+)/)?' => 'PhortuneMerchantEditController',
+ $this->getEditRoutePattern('new/')
+ => 'PhortuneMerchantEditController',
+ $this->getEditRoutePattern('edit/')
+ => 'PhortuneMerchantEditController',
'orders/(?P<merchantID>\d+)/(?:query/(?P<queryKey>[^/]+)/)?'
=> 'PhortuneCartListController',
'(?P<merchantID>\d+)/' => array(
diff --git a/src/applications/phortune/controller/PhortuneMerchantEditController.php b/src/applications/phortune/controller/PhortuneMerchantEditController.php
--- a/src/applications/phortune/controller/PhortuneMerchantEditController.php
+++ b/src/applications/phortune/controller/PhortuneMerchantEditController.php
@@ -4,193 +4,8 @@
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
--- /dev/null
+++ b/src/applications/phortune/editor/PhortuneMerchantEditEngine.php
@@ -0,0 +1,120 @@
+<?php
+
+final class PhortuneMerchantEditEngine
+ extends PhabricatorEditEngine {
+
+ const ENGINECONST = 'phortune.merchant';
+
+ public function getEngineName() {
+ return pht('Phortune');
+ }
+
+ public function getEngineApplicationClass() {
+ return 'PhabricatorPhortuneApplication';
+ }
+
+ public function getSummaryHeader() {
+ return pht('Configure Phortune Merchant Forms');
+ }
+
+ public function getSummaryText() {
+ return pht('Configure creation and editing forms for Phortune Merchants.');
+ }
+
+ protected function newEditableObject() {
+ return PhortuneMerchant::initializeNewMerchant($this->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('Badge long description.'))
+ ->setConduitTypeDescription(pht('New badge 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
--- a/src/applications/phortune/storage/PhortuneMerchant.php
+++ b/src/applications/phortune/storage/PhortuneMerchant.php
@@ -43,6 +43,10 @@
return $this;
}
+ public function getViewURI() {
+ return '/phortune/merchant/'.$this->getID().'/';
+ }
+
/* -( PhabricatorApplicationTransactionInterface )------------------------- */

File Metadata

Mime Type
text/plain
Expires
Mon, Oct 28, 11:09 PM (2 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6753280
Default Alt Text
D16750.id40342.diff (13 KB)

Event Timeline