@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class FundInitiativeBackerTransaction
4 extends FundInitiativeTransactionType {
5
6 const TRANSACTIONTYPE = 'fund:backer';
7
8 public function generateOldValue($object) {
9 return null;
10 }
11
12 public function applyInternalEffects($object, $value) {
13 $amount = $this->getMetadataValue(
14 FundInitiativeTransaction::PROPERTY_AMOUNT);
15 $amount = PhortuneCurrency::newFromString($amount);
16 $total = $object->getTotalAsCurrency()->add($amount);
17 $object->setTotalAsCurrency($total);
18 }
19
20 public function applyExternalEffects($object, $value) {
21 $backer = id(new FundBackerQuery())
22 ->setViewer($this->getActor())
23 ->withPHIDs(array($value))
24 ->executeOne();
25 if (!$backer) {
26 throw new Exception(pht('Unable to load %s!', 'FundBacker'));
27 }
28
29 $subx = array();
30 $subx[] = id(new FundBackerTransaction())
31 ->setTransactionType(FundBackerStatusTransaction::TRANSACTIONTYPE)
32 ->setNewValue(FundBacker::STATUS_PURCHASED);
33
34 $content_source = $this->getEditor()->getContentSource();
35
36 $editor = id(new FundBackerEditor())
37 ->setActor($this->getActor())
38 ->setContentSource($content_source)
39 ->setContinueOnMissingFields(true)
40 ->setContinueOnNoEffect(true);
41
42 $editor->applyTransactions($backer, $subx);
43 }
44
45 public function getTitle() {
46 $amount = $this->getMetadataValue(
47 FundInitiativeTransaction::PROPERTY_AMOUNT);
48 $amount = PhortuneCurrency::newFromString($amount);
49 return pht(
50 '%s backed this initiative with %s.',
51 $this->renderAuthor(),
52 $amount->formatForDisplay());
53 }
54
55 public function getTitleForFeed() {
56 $amount = $this->getMetadataValue(
57 FundInitiativeTransaction::PROPERTY_AMOUNT);
58 $amount = PhortuneCurrency::newFromString($amount);
59 return pht(
60 '%s backed %s with %s.',
61 $this->renderAuthor(),
62 $this->renderObject(),
63 $amount->formatForDisplay());
64 }
65
66 public function getIcon() {
67 return 'fa-heart';
68 }
69
70 public function getColor() {
71 return 'red';
72 }
73
74
75}