2017-05-05 20:02:54 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class FundInitiativeMerchantTransaction
|
|
|
|
extends FundInitiativeTransactionType {
|
|
|
|
|
|
|
|
const TRANSACTIONTYPE = 'fund:merchant';
|
|
|
|
|
|
|
|
public function generateOldValue($object) {
|
|
|
|
return $object->getMerchantPHID();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function applyInternalEffects($object, $value) {
|
|
|
|
$object->setMerchantPHID($value);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTitle() {
|
|
|
|
$new = $this->getNewValue();
|
|
|
|
$new_merchant = $this->renderHandleList(array($new));
|
|
|
|
|
|
|
|
$old = $this->getOldValue();
|
|
|
|
$old_merchant = $this->renderHandleList(array($old));
|
|
|
|
|
|
|
|
if ($old) {
|
|
|
|
return pht(
|
|
|
|
'%s changed the merchant receiving funds from this '.
|
|
|
|
'initiative from %s to %s.',
|
|
|
|
$this->renderAuthor(),
|
|
|
|
$old_merchant,
|
|
|
|
$new_merchant);
|
|
|
|
} else {
|
|
|
|
return pht(
|
|
|
|
'%s set the merchant receiving funds from this '.
|
|
|
|
'initiative to %s.',
|
|
|
|
$this->renderAuthor(),
|
|
|
|
$new_merchant);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getTitleForFeed() {
|
|
|
|
$new = $this->getNewValue();
|
|
|
|
$new_merchant = $this->renderHandleList(array($new));
|
|
|
|
|
|
|
|
$old = $this->getOldValue();
|
|
|
|
$old_merchant = $this->renderHandleList(array($old));
|
|
|
|
|
|
|
|
return pht(
|
|
|
|
'%s changed the merchant receiving funds from %s '.
|
2017-05-09 18:00:24 +02:00
|
|
|
'from %s to %s.',
|
2017-05-05 20:02:54 +02:00
|
|
|
$this->renderAuthor(),
|
|
|
|
$this->renderObject(),
|
|
|
|
$old_merchant,
|
|
|
|
$new_merchant);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateTransactions($object, array $xactions) {
|
|
|
|
$errors = array();
|
|
|
|
|
|
|
|
if ($this->isEmptyTextTransaction($object->getMerchantPHID(), $xactions)) {
|
|
|
|
$errors[] = $this->newRequiredError(
|
|
|
|
pht('Initiatives must have a payable merchant.'));
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($xactions as $xaction) {
|
|
|
|
$merchant_phid = $xaction->getNewValue();
|
|
|
|
|
|
|
|
// Make sure the actor has permission to edit the merchant they're
|
|
|
|
// selecting. You aren't allowed to send payments to an account you
|
|
|
|
// do not control.
|
|
|
|
$merchants = id(new PhortuneMerchantQuery())
|
|
|
|
->setViewer($this->getActor())
|
|
|
|
->withPHIDs(array($merchant_phid))
|
|
|
|
->requireCapabilities(
|
|
|
|
array(
|
|
|
|
PhabricatorPolicyCapability::CAN_VIEW,
|
|
|
|
PhabricatorPolicyCapability::CAN_EDIT,
|
|
|
|
))
|
|
|
|
->execute();
|
|
|
|
if (!$merchants) {
|
|
|
|
$errors[] = $this->newInvalidError(
|
|
|
|
pht('You must specify a merchant account you control as the '.
|
|
|
|
'recipient of funds from this initiative.'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $errors;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIcon() {
|
|
|
|
return 'fa-bank';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|