Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14006001
D16750.id40342.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
13 KB
Referenced Files
None
Subscribers
None
D16750.id40342.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D16750: Update Phortune Merchant to EditEngine
Attached
Detach File
Event Timeline
Log In to Comment