mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-22 11:39:03 +01:00
Update PhortuneMerchant to Modular Transactions
Summary: Modernize PhortuneMerchant for Modular Transactions. Also changed the language of "Members" to "Managers", which I think fits better given the power/capability. Test Plan: - Create a new Merchant - Test not filling in a name, see error - Test removing myself, see error - Edit an existing Merchant - Add new managers - Test removing myself, see error - Replace Picture - Update various fields, contact info, email, footer - Verify transactions are now nice and pretty Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17584
This commit is contained in:
parent
26d6096e0a
commit
28941b3105
15 changed files with 431 additions and 226 deletions
|
@ -4367,19 +4367,26 @@ phutil_register_library_map(array(
|
|||
'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php',
|
||||
'PhortuneMerchant' => 'applications/phortune/storage/PhortuneMerchant.php',
|
||||
'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php',
|
||||
'PhortuneMerchantContactInfoTransaction' => 'applications/phortune/xaction/PhortuneMerchantContactInfoTransaction.php',
|
||||
'PhortuneMerchantController' => 'applications/phortune/controller/merchant/PhortuneMerchantController.php',
|
||||
'PhortuneMerchantDescriptionTransaction' => 'applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php',
|
||||
'PhortuneMerchantEditController' => 'applications/phortune/controller/merchant/PhortuneMerchantEditController.php',
|
||||
'PhortuneMerchantEditEngine' => 'applications/phortune/editor/PhortuneMerchantEditEngine.php',
|
||||
'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php',
|
||||
'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php',
|
||||
'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php',
|
||||
'PhortuneMerchantInvoiceEmailTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php',
|
||||
'PhortuneMerchantInvoiceFooterTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php',
|
||||
'PhortuneMerchantListController' => 'applications/phortune/controller/merchant/PhortuneMerchantListController.php',
|
||||
'PhortuneMerchantNameTransaction' => 'applications/phortune/xaction/PhortuneMerchantNameTransaction.php',
|
||||
'PhortuneMerchantPHIDType' => 'applications/phortune/phid/PhortuneMerchantPHIDType.php',
|
||||
'PhortuneMerchantPictureController' => 'applications/phortune/controller/merchant/PhortuneMerchantPictureController.php',
|
||||
'PhortuneMerchantPictureTransaction' => 'applications/phortune/xaction/PhortuneMerchantPictureTransaction.php',
|
||||
'PhortuneMerchantQuery' => 'applications/phortune/query/PhortuneMerchantQuery.php',
|
||||
'PhortuneMerchantSearchEngine' => 'applications/phortune/query/PhortuneMerchantSearchEngine.php',
|
||||
'PhortuneMerchantTransaction' => 'applications/phortune/storage/PhortuneMerchantTransaction.php',
|
||||
'PhortuneMerchantTransactionQuery' => 'applications/phortune/query/PhortuneMerchantTransactionQuery.php',
|
||||
'PhortuneMerchantTransactionType' => 'applications/phortune/xaction/PhortuneMerchantTransactionType.php',
|
||||
'PhortuneMerchantViewController' => 'applications/phortune/controller/merchant/PhortuneMerchantViewController.php',
|
||||
'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php',
|
||||
'PhortuneOrderTableView' => 'applications/phortune/view/PhortuneOrderTableView.php',
|
||||
|
@ -9820,19 +9827,26 @@ phutil_register_library_map(array(
|
|||
'PhabricatorPolicyInterface',
|
||||
),
|
||||
'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability',
|
||||
'PhortuneMerchantContactInfoTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantController' => 'PhortuneController',
|
||||
'PhortuneMerchantDescriptionTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantEditController' => 'PhortuneMerchantController',
|
||||
'PhortuneMerchantEditEngine' => 'PhabricatorEditEngine',
|
||||
'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor',
|
||||
'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType',
|
||||
'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController',
|
||||
'PhortuneMerchantInvoiceEmailTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantInvoiceFooterTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantListController' => 'PhortuneMerchantController',
|
||||
'PhortuneMerchantNameTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantPHIDType' => 'PhabricatorPHIDType',
|
||||
'PhortuneMerchantPictureController' => 'PhortuneMerchantController',
|
||||
'PhortuneMerchantPictureTransaction' => 'PhortuneMerchantTransactionType',
|
||||
'PhortuneMerchantQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
|
||||
'PhortuneMerchantSearchEngine' => 'PhabricatorApplicationSearchEngine',
|
||||
'PhortuneMerchantTransaction' => 'PhabricatorApplicationTransaction',
|
||||
'PhortuneMerchantTransaction' => 'PhabricatorModularTransaction',
|
||||
'PhortuneMerchantTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
|
||||
'PhortuneMerchantTransactionType' => 'PhabricatorModularTransactionType',
|
||||
'PhortuneMerchantViewController' => 'PhortuneMerchantController',
|
||||
'PhortuneMonthYearExpiryControl' => 'AphrontFormControl',
|
||||
'PhortuneOrderTableView' => 'AphrontView',
|
||||
|
|
|
@ -76,7 +76,8 @@ final class PhortuneMerchantPictureController
|
|||
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhortuneMerchantTransaction())
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_PICTURE)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantPictureTransaction::TRANSACTIONTYPE)
|
||||
->setNewValue($new_value);
|
||||
|
||||
$editor = id(new PhortuneMerchantEditor())
|
||||
|
|
|
@ -240,7 +240,7 @@ final class PhortuneMerchantViewController
|
|||
}
|
||||
|
||||
$curtain->newPanel()
|
||||
->setHeaderText(pht('Members'))
|
||||
->setHeaderText(pht('Managers'))
|
||||
->appendChild($member_list);
|
||||
|
||||
return $curtain;
|
||||
|
|
|
@ -14,7 +14,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$add_edges) {
|
||||
|
||||
return pht(
|
||||
'%s added %s merchant member(s): %s.',
|
||||
'%s added %s merchant manager(s): %s.',
|
||||
$actor,
|
||||
$add_count,
|
||||
$add_edges);
|
||||
|
@ -26,7 +26,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$rem_edges) {
|
||||
|
||||
return pht(
|
||||
'%s removed %s merchant member(s): %s.',
|
||||
'%s removed %s merchant manager(s): %s.',
|
||||
$actor,
|
||||
$rem_count,
|
||||
$rem_edges);
|
||||
|
@ -41,7 +41,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$rem_edges) {
|
||||
|
||||
return pht(
|
||||
'%s edited %s merchant member(s), added %s: %s; removed %s: %s.',
|
||||
'%s edited %s merchant manager(s), added %s: %s; removed %s: %s.',
|
||||
$actor,
|
||||
$total_count,
|
||||
$add_count,
|
||||
|
@ -57,7 +57,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$add_edges) {
|
||||
|
||||
return pht(
|
||||
'%s added %s merchant member(s) to %s: %s.',
|
||||
'%s added %s merchant manager(s) to %s: %s.',
|
||||
$actor,
|
||||
$add_count,
|
||||
$object,
|
||||
|
@ -71,7 +71,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$rem_edges) {
|
||||
|
||||
return pht(
|
||||
'%s removed %s merchant member(s) from %s: %s.',
|
||||
'%s removed %s merchant manager(s) from %s: %s.',
|
||||
$actor,
|
||||
$rem_count,
|
||||
$object,
|
||||
|
@ -88,7 +88,7 @@ final class PhortuneMerchantHasMemberEdgeType extends PhabricatorEdgeType {
|
|||
$rem_edges) {
|
||||
|
||||
return pht(
|
||||
'%s edited %s merchant member(s) for %s, added %s: %s; removed %s: %s.',
|
||||
'%s edited %s merchant manager(s) for %s, added %s: %s; removed %s: %s.',
|
||||
$actor,
|
||||
$total_count,
|
||||
$object,
|
||||
|
|
|
@ -81,21 +81,22 @@ final class PhortuneMerchantEditEngine
|
|||
->setDescription(pht('Merchant name.'))
|
||||
->setConduitTypeDescription(pht('New Merchant name.'))
|
||||
->setIsRequired(true)
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_NAME)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantNameTransaction::TRANSACTIONTYPE)
|
||||
->setValue($object->getName()),
|
||||
|
||||
id(new PhabricatorUsersEditField())
|
||||
->setKey('members')
|
||||
->setAliases(array('memberPHIDs'))
|
||||
->setLabel(pht('Members'))
|
||||
->setAliases(array('memberPHIDs', 'managerPHIDs'))
|
||||
->setLabel(pht('Managers'))
|
||||
->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.'))
|
||||
->setDescription(pht('Initial merchant managers.'))
|
||||
->setConduitDescription(pht('Set merchant managers.'))
|
||||
->setConduitTypeDescription(pht('New list of managers.'))
|
||||
->setInitialValue($object->getMemberPHIDs())
|
||||
->setValue($member_phids),
|
||||
|
||||
|
@ -104,7 +105,8 @@ final class PhortuneMerchantEditEngine
|
|||
->setLabel(pht('Description'))
|
||||
->setDescription(pht('Merchant description.'))
|
||||
->setConduitTypeDescription(pht('New merchant description.'))
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_DESCRIPTION)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantDescriptionTransaction::TRANSACTIONTYPE)
|
||||
->setValue($object->getDescription()),
|
||||
|
||||
id(new PhabricatorRemarkupEditField())
|
||||
|
@ -112,7 +114,8 @@ final class PhortuneMerchantEditEngine
|
|||
->setLabel(pht('Contact Info'))
|
||||
->setDescription(pht('Merchant contact information.'))
|
||||
->setConduitTypeDescription(pht('Merchant contact information.'))
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_CONTACTINFO)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantContactInfoTransaction::TRANSACTIONTYPE)
|
||||
->setValue($object->getContactInfo()),
|
||||
|
||||
id(new PhabricatorTextEditField())
|
||||
|
@ -121,7 +124,8 @@ final class PhortuneMerchantEditEngine
|
|||
->setDescription(pht('Email address invoices are sent from.'))
|
||||
->setConduitTypeDescription(
|
||||
pht('Email address invoices are sent from.'))
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_INVOICEEMAIL)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantInvoiceEmailTransaction::TRANSACTIONTYPE)
|
||||
->setValue($object->getInvoiceEmail()),
|
||||
|
||||
id(new PhabricatorRemarkupEditField())
|
||||
|
@ -129,7 +133,8 @@ final class PhortuneMerchantEditEngine
|
|||
->setLabel(pht('Invoice Footer'))
|
||||
->setDescription(pht('Footer on invoice forms.'))
|
||||
->setConduitTypeDescription(pht('Footer on invoice forms.'))
|
||||
->setTransactionType(PhortuneMerchantTransaction::TYPE_INVOICEFOOTER)
|
||||
->setTransactionType(
|
||||
PhortuneMerchantInvoiceFooterTransaction::TRANSACTIONTYPE)
|
||||
->setValue($object->getInvoiceFooter()),
|
||||
|
||||
);
|
||||
|
|
|
@ -11,104 +11,19 @@ final class PhortuneMerchantEditor
|
|||
return pht('Phortune Merchants');
|
||||
}
|
||||
|
||||
public function getCreateObjectTitle($author, $object) {
|
||||
return pht('%s created this merchant.', $author);
|
||||
}
|
||||
|
||||
public function getTransactionTypes() {
|
||||
$types = parent::getTransactionTypes();
|
||||
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_NAME;
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_DESCRIPTION;
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_CONTACTINFO;
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_PICTURE;
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_INVOICEEMAIL;
|
||||
$types[] = PhortuneMerchantTransaction::TYPE_INVOICEFOOTER;
|
||||
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
|
||||
$types[] = PhabricatorTransactions::TYPE_EDGE;
|
||||
|
||||
return $types;
|
||||
}
|
||||
|
||||
protected function getCustomTransactionOldValue(
|
||||
PhabricatorLiskDAO $object,
|
||||
PhabricatorApplicationTransaction $xaction) {
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case PhortuneMerchantTransaction::TYPE_NAME:
|
||||
return $object->getName();
|
||||
case PhortuneMerchantTransaction::TYPE_DESCRIPTION:
|
||||
return $object->getDescription();
|
||||
case PhortuneMerchantTransaction::TYPE_CONTACTINFO:
|
||||
return $object->getContactInfo();
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
return $object->getInvoiceEmail();
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER:
|
||||
return $object->getInvoiceFooter();
|
||||
case PhortuneMerchantTransaction::TYPE_PICTURE:
|
||||
return $object->getProfileImagePHID();
|
||||
}
|
||||
|
||||
return parent::getCustomTransactionOldValue($object, $xaction);
|
||||
}
|
||||
|
||||
protected function getCustomTransactionNewValue(
|
||||
PhabricatorLiskDAO $object,
|
||||
PhabricatorApplicationTransaction $xaction) {
|
||||
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case PhortuneMerchantTransaction::TYPE_NAME:
|
||||
case PhortuneMerchantTransaction::TYPE_DESCRIPTION:
|
||||
case PhortuneMerchantTransaction::TYPE_CONTACTINFO:
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER:
|
||||
case PhortuneMerchantTransaction::TYPE_PICTURE:
|
||||
return $xaction->getNewValue();
|
||||
}
|
||||
|
||||
return parent::getCustomTransactionNewValue($object, $xaction);
|
||||
}
|
||||
|
||||
protected function applyCustomInternalTransaction(
|
||||
PhabricatorLiskDAO $object,
|
||||
PhabricatorApplicationTransaction $xaction) {
|
||||
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case PhortuneMerchantTransaction::TYPE_NAME:
|
||||
$object->setName($xaction->getNewValue());
|
||||
return;
|
||||
case PhortuneMerchantTransaction::TYPE_DESCRIPTION:
|
||||
$object->setDescription($xaction->getNewValue());
|
||||
return;
|
||||
case PhortuneMerchantTransaction::TYPE_CONTACTINFO:
|
||||
$object->setContactInfo($xaction->getNewValue());
|
||||
return;
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
$object->setInvoiceEmail($xaction->getNewValue());
|
||||
return;
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER:
|
||||
$object->setInvoiceFooter($xaction->getNewValue());
|
||||
return;
|
||||
case PhortuneMerchantTransaction::TYPE_PICTURE:
|
||||
$object->setProfileImagePHID($xaction->getNewValue());
|
||||
return;
|
||||
}
|
||||
|
||||
return parent::applyCustomInternalTransaction($object, $xaction);
|
||||
}
|
||||
|
||||
protected function applyCustomExternalTransaction(
|
||||
PhabricatorLiskDAO $object,
|
||||
PhabricatorApplicationTransaction $xaction) {
|
||||
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case PhortuneMerchantTransaction::TYPE_NAME:
|
||||
case PhortuneMerchantTransaction::TYPE_DESCRIPTION:
|
||||
case PhortuneMerchantTransaction::TYPE_CONTACTINFO:
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEFOOTER:
|
||||
case PhortuneMerchantTransaction::TYPE_PICTURE:
|
||||
return;
|
||||
}
|
||||
|
||||
return parent::applyCustomExternalTransaction($object, $xaction);
|
||||
}
|
||||
|
||||
protected function validateTransaction(
|
||||
PhabricatorLiskDAO $object,
|
||||
$type,
|
||||
|
@ -117,48 +32,28 @@ final class PhortuneMerchantEditor
|
|||
$errors = parent::validateTransaction($object, $type, $xactions);
|
||||
|
||||
switch ($type) {
|
||||
case PhortuneMerchantTransaction::TYPE_NAME:
|
||||
$missing = $this->validateIsEmptyTextField(
|
||||
$object->getName(),
|
||||
$xactions);
|
||||
|
||||
if ($missing) {
|
||||
$error = new PhabricatorApplicationTransactionValidationError(
|
||||
$type,
|
||||
pht('Required'),
|
||||
pht('Merchant name is required.'),
|
||||
nonempty(last($xactions), null));
|
||||
|
||||
$error->setIsMissingFieldError(true);
|
||||
$errors[] = $error;
|
||||
}
|
||||
break;
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
$new_email = null;
|
||||
case PhabricatorTransactions::TYPE_EDGE:
|
||||
foreach ($xactions as $xaction) {
|
||||
switch ($xaction->getTransactionType()) {
|
||||
case PhortuneMerchantTransaction::TYPE_INVOICEEMAIL:
|
||||
$new_email = $xaction->getNewValue();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (strlen($new_email)) {
|
||||
$email = new PhutilEmailAddress($new_email);
|
||||
$domain = $email->getDomainName();
|
||||
|
||||
if (!$domain) {
|
||||
$error = new PhabricatorApplicationTransactionValidationError(
|
||||
$type,
|
||||
pht('Invalid'),
|
||||
pht('%s is not a valid email.', $new_email),
|
||||
nonempty(last($xactions), null));
|
||||
|
||||
$errors[] = $error;
|
||||
switch ($xaction->getMetadataValue('edge:type')) {
|
||||
case PhortuneMerchantHasMemberEdgeType::EDGECONST:
|
||||
$new = $xaction->getNewValue();
|
||||
$set = idx($new, '-', array());
|
||||
$actor_phid = $this->requireActor()->getPHID();
|
||||
foreach ($set as $phid) {
|
||||
if ($actor_phid == $phid) {
|
||||
$error = new PhabricatorApplicationTransactionValidationError(
|
||||
$type,
|
||||
pht('Invalid'),
|
||||
pht('You can not remove yourself as an merchant manager.'),
|
||||
$xaction);
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,7 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantTransaction
|
||||
extends PhabricatorApplicationTransaction {
|
||||
|
||||
const TYPE_NAME = 'merchant:name';
|
||||
const TYPE_DESCRIPTION = 'merchant:description';
|
||||
const TYPE_CONTACTINFO = 'merchant:contactinfo';
|
||||
const TYPE_INVOICEEMAIL = 'merchant:invoiceemail';
|
||||
const TYPE_INVOICEFOOTER = 'merchant:invoicefooter';
|
||||
const TYPE_PICTURE = 'merchant:picture';
|
||||
extends PhabricatorModularTransaction {
|
||||
|
||||
public function getApplicationName() {
|
||||
return 'phortune';
|
||||
|
@ -22,79 +15,8 @@ final class PhortuneMerchantTransaction
|
|||
return null;
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
$author_phid = $this->getAuthorPHID();
|
||||
|
||||
$old = $this->getOldValue();
|
||||
$new = $this->getNewValue();
|
||||
|
||||
switch ($this->getTransactionType()) {
|
||||
case self::TYPE_NAME:
|
||||
if ($old === null) {
|
||||
return pht(
|
||||
'%s created this merchant.',
|
||||
$this->renderHandleLink($author_phid));
|
||||
} else {
|
||||
return pht(
|
||||
'%s renamed this merchant from "%s" to "%s".',
|
||||
$this->renderHandleLink($author_phid),
|
||||
$old,
|
||||
$new);
|
||||
}
|
||||
break;
|
||||
case self::TYPE_DESCRIPTION:
|
||||
return pht(
|
||||
'%s updated the description for this merchant.',
|
||||
$this->renderHandleLink($author_phid));
|
||||
case self::TYPE_CONTACTINFO:
|
||||
return pht(
|
||||
'%s updated the contact information for this merchant.',
|
||||
$this->renderHandleLink($author_phid));
|
||||
case self::TYPE_INVOICEEMAIL:
|
||||
return pht(
|
||||
'%s updated the invoice email for this merchant.',
|
||||
$this->renderHandleLink($author_phid));
|
||||
case self::TYPE_INVOICEFOOTER:
|
||||
return pht(
|
||||
'%s updated the invoice footer for this merchant.',
|
||||
$this->renderHandleLink($author_phid));
|
||||
}
|
||||
|
||||
return parent::getTitle();
|
||||
}
|
||||
|
||||
public function shouldHide() {
|
||||
$old = $this->getOldValue();
|
||||
switch ($this->getTransactionType()) {
|
||||
case self::TYPE_DESCRIPTION:
|
||||
case self::TYPE_CONTACTINFO:
|
||||
case self::TYPE_INVOICEEMAIL:
|
||||
case self::TYPE_INVOICEFOOTER:
|
||||
return ($old === null);
|
||||
}
|
||||
return parent::shouldHide();
|
||||
}
|
||||
|
||||
public function hasChangeDetails() {
|
||||
switch ($this->getTransactionType()) {
|
||||
case self::TYPE_DESCRIPTION:
|
||||
return ($this->getOldValue() !== null);
|
||||
case self::TYPE_CONTACTINFO:
|
||||
return ($this->getOldValue() !== null);
|
||||
case self::TYPE_INVOICEEMAIL:
|
||||
return ($this->getOldValue() !== null);
|
||||
case self::TYPE_INVOICEFOOTER:
|
||||
return ($this->getOldValue() !== null);
|
||||
}
|
||||
|
||||
return parent::hasChangeDetails();
|
||||
}
|
||||
|
||||
public function renderChangeDetails(PhabricatorUser $viewer) {
|
||||
return $this->renderTextCorpusChangeDetails(
|
||||
$viewer,
|
||||
$this->getOldValue(),
|
||||
$this->getNewValue());
|
||||
public function getBaseTransactionClass() {
|
||||
return 'PhortuneMerchantTransactionType';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantContactInfoTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:contactinfo';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getContactInfo();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setContactInfo($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return pht(
|
||||
'%s updated the merchant contact info.',
|
||||
$this->renderAuthor());
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
return pht(
|
||||
'%s updated the merchant contact info for %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject());
|
||||
}
|
||||
|
||||
public function hasChangeDetailView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getMailDiffSectionHeader() {
|
||||
return pht('CHANGES TO MERCHANT CONTACT INFO');
|
||||
}
|
||||
|
||||
public function newChangeDetailView() {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
return id(new PhabricatorApplicationTransactionTextDiffDetailView())
|
||||
->setViewer($viewer)
|
||||
->setOldText($this->getOldValue())
|
||||
->setNewText($this->getNewValue());
|
||||
}
|
||||
|
||||
public function newRemarkupChanges() {
|
||||
$changes = array();
|
||||
|
||||
$changes[] = $this->newRemarkupChange()
|
||||
->setOldValue($this->getOldValue())
|
||||
->setNewValue($this->getNewValue());
|
||||
|
||||
return $changes;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantDescriptionTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:description';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getDescription();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setDescription($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return pht(
|
||||
'%s updated the merchant description.',
|
||||
$this->renderAuthor());
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
return pht(
|
||||
'%s updated the merchant description for %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject());
|
||||
}
|
||||
|
||||
public function hasChangeDetailView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getMailDiffSectionHeader() {
|
||||
return pht('CHANGES TO MERCHANT DESCRIPTION');
|
||||
}
|
||||
|
||||
public function newChangeDetailView() {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
return id(new PhabricatorApplicationTransactionTextDiffDetailView())
|
||||
->setViewer($viewer)
|
||||
->setOldText($this->getOldValue())
|
||||
->setNewText($this->getNewValue());
|
||||
}
|
||||
|
||||
public function newRemarkupChanges() {
|
||||
$changes = array();
|
||||
|
||||
$changes[] = $this->newRemarkupChange()
|
||||
->setOldValue($this->getOldValue())
|
||||
->setNewValue($this->getNewValue());
|
||||
|
||||
return $changes;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantInvoiceEmailTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:invoiceemail';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getInvoiceEmail();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setInvoiceEmail($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
$old = $this->getOldValue();
|
||||
$new = $this->getNewValue();
|
||||
|
||||
if (strlen($old) && strlen($new)) {
|
||||
return pht(
|
||||
'%s updated the invoice email from %s to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderOldValue(),
|
||||
$this->renderNewValue());
|
||||
} else if (strlen($old)) {
|
||||
return pht(
|
||||
'%s removed the invoice email.',
|
||||
$this->renderAuthor());
|
||||
} else {
|
||||
return pht(
|
||||
'%s set the invoice email to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderNewValue());
|
||||
}
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
$old = $this->getOldValue();
|
||||
$new = $this->getNewValue();
|
||||
|
||||
if (strlen($old) && strlen($new)) {
|
||||
return pht(
|
||||
'%s updated %s invoice email from %s to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject(),
|
||||
$this->renderOldValue(),
|
||||
$this->renderNewValue());
|
||||
} else if (strlen($old)) {
|
||||
return pht(
|
||||
'%s removed the invoice email for %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject());
|
||||
} else {
|
||||
return pht(
|
||||
'%s set the invoice email for %s to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject(),
|
||||
$this->renderNewValue());
|
||||
}
|
||||
}
|
||||
|
||||
public function getIcon() {
|
||||
return 'fa-envelope';
|
||||
}
|
||||
|
||||
public function validateTransactions($object, array $xactions) {
|
||||
$errors = array();
|
||||
|
||||
$max_length = $object->getColumnMaximumByteLength('invoiceEmail');
|
||||
foreach ($xactions as $xaction) {
|
||||
if (strlen($xaction->getNewValue())) {
|
||||
$email = new PhutilEmailAddress($xaction->getNewValue());
|
||||
$domain = $email->getDomainName();
|
||||
if (!strlen($domain)) {
|
||||
$errors[] = $this->newInvalidError(
|
||||
pht('Invoice email "%s" must be a valid email.',
|
||||
$xaction->getNewValue()));
|
||||
}
|
||||
|
||||
$new_value = $xaction->getNewValue();
|
||||
$new_length = strlen($new_value);
|
||||
if ($new_length > $max_length) {
|
||||
$errors[] = $this->newInvalidError(
|
||||
pht('The email can be no longer than %s characters.',
|
||||
new PhutilNumber($max_length)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantInvoiceFooterTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:invoicefooter';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getInvoiceFooter();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setInvoiceFooter($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return pht(
|
||||
'%s updated the merchant invoice footer.',
|
||||
$this->renderAuthor());
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
return pht(
|
||||
'%s updated the merchant invoice footer for %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject());
|
||||
}
|
||||
|
||||
public function hasChangeDetailView() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getMailDiffSectionHeader() {
|
||||
return pht('CHANGES TO MERCHANT INVOICE FOOTER');
|
||||
}
|
||||
|
||||
public function newChangeDetailView() {
|
||||
$viewer = $this->getViewer();
|
||||
|
||||
return id(new PhabricatorApplicationTransactionTextDiffDetailView())
|
||||
->setViewer($viewer)
|
||||
->setOldText($this->getOldValue())
|
||||
->setNewText($this->getNewValue());
|
||||
}
|
||||
|
||||
public function newRemarkupChanges() {
|
||||
$changes = array();
|
||||
|
||||
$changes[] = $this->newRemarkupChange()
|
||||
->setOldValue($this->getOldValue())
|
||||
->setNewValue($this->getNewValue());
|
||||
|
||||
return $changes;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantNameTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:name';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getName();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setName($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return pht(
|
||||
'%s renamed this merchant from %s to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderOldValue(),
|
||||
$this->renderNewValue());
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
return pht(
|
||||
'%s renamed %s merchant name from %s to %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject(),
|
||||
$this->renderOldValue(),
|
||||
$this->renderNewValue());
|
||||
}
|
||||
|
||||
public function validateTransactions($object, array $xactions) {
|
||||
$errors = array();
|
||||
|
||||
if ($this->isEmptyTextTransaction($object->getName(), $xactions)) {
|
||||
$errors[] = $this->newRequiredError(
|
||||
pht('Merchants must have a name.'));
|
||||
}
|
||||
|
||||
$max_length = $object->getColumnMaximumByteLength('name');
|
||||
foreach ($xactions as $xaction) {
|
||||
$new_value = $xaction->getNewValue();
|
||||
$new_length = strlen($new_value);
|
||||
if ($new_length > $max_length) {
|
||||
$errors[] = $this->newInvalidError(
|
||||
pht('The name can be no longer than %s characters.',
|
||||
new PhutilNumber($max_length)));
|
||||
}
|
||||
}
|
||||
|
||||
return $errors;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
final class PhortuneMerchantPictureTransaction
|
||||
extends PhortuneMerchantTransactionType {
|
||||
|
||||
const TRANSACTIONTYPE = 'merchant:picture';
|
||||
|
||||
public function generateOldValue($object) {
|
||||
return $object->getProfileImagePHID();
|
||||
}
|
||||
|
||||
public function applyInternalEffects($object, $value) {
|
||||
$object->setProfileImagePHID($value);
|
||||
}
|
||||
|
||||
public function getTitle() {
|
||||
return pht(
|
||||
'%s updated the picture.',
|
||||
$this->renderAuthor());
|
||||
}
|
||||
|
||||
public function getTitleForFeed() {
|
||||
return pht(
|
||||
'%s updated the picture for merchant %s.',
|
||||
$this->renderAuthor(),
|
||||
$this->renderObject());
|
||||
}
|
||||
|
||||
public function getIcon() {
|
||||
return 'fa-camera-retro';
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
<?php
|
||||
|
||||
abstract class PhortuneMerchantTransactionType
|
||||
extends PhabricatorModularTransactionType {}
|
|
@ -1610,6 +1610,20 @@ final class PhabricatorUSEnglishTranslation
|
|||
|
||||
'%s accepted this revision as %s reviewer(s): %s.' =>
|
||||
'%s accepted this revision as: %3$s.',
|
||||
|
||||
'%s added %s merchant manager(s): %s.' => array(
|
||||
array(
|
||||
'%s added a merchant manager: %3$s.',
|
||||
'%s added merchant managers: %3$s.',
|
||||
),
|
||||
),
|
||||
|
||||
'%s removed %s merchant manager(s): %s.' => array(
|
||||
array(
|
||||
'%s removed a merchant manager: %3$s.',
|
||||
'%s removed merchant managers: %3$s.',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue