@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 PhortuneSubscriptionCart
4 extends PhortuneCartImplementation {
5
6 private $subscriptionPHID;
7 private $subscription;
8
9 public function setSubscriptionPHID($subscription_phid) {
10 $this->subscriptionPHID = $subscription_phid;
11 return $this;
12 }
13
14 public function getSubscriptionPHID() {
15 return $this->subscriptionPHID;
16 }
17
18 public function setSubscription(PhortuneSubscription $subscription) {
19 $this->subscription = $subscription;
20 return $this;
21 }
22
23 public function getSubscription() {
24 return $this->subscription;
25 }
26
27 public function getName(PhortuneCart $cart) {
28 return $this->getSubscription()->getCartName($cart);
29 }
30
31 public function willCreateCart(
32 PhabricatorUser $viewer,
33 PhortuneCart $cart) {
34
35 $subscription = $this->getSubscription();
36 if (!$subscription) {
37 throw new PhutilInvalidStateException('setSubscription');
38 }
39
40 $cart->setMetadataValue('subscriptionPHID', $subscription->getPHID());
41 }
42
43 public function loadImplementationsForCarts(
44 PhabricatorUser $viewer,
45 array $carts) {
46
47 $phids = array();
48 foreach ($carts as $cart) {
49 $phids[] = $cart->getMetadataValue('subscriptionPHID');
50 }
51
52 $subscriptions = id(new PhortuneSubscriptionQuery())
53 ->setViewer($viewer)
54 ->withPHIDs($phids)
55 ->execute();
56 $subscriptions = mpull($subscriptions, null, 'getPHID');
57
58 $objects = array();
59 foreach ($carts as $key => $cart) {
60 $subscription_phid = $cart->getMetadataValue('subscriptionPHID');
61 $subscription = idx($subscriptions, $subscription_phid);
62 if (!$subscription) {
63 continue;
64 }
65
66 $object = id(new PhortuneSubscriptionCart())
67 ->setSubscriptionPHID($subscription_phid)
68 ->setSubscription($subscription);
69
70 $objects[$key] = $object;
71 }
72
73 return $objects;
74 }
75
76 public function getCancelURI(PhortuneCart $cart) {
77 return $this->getSubscription()->getURI();
78 }
79
80 public function getDoneURI(PhortuneCart $cart) {
81 return $this->getSubscription()->getURI();
82 }
83
84 public function getDoneActionName(PhortuneCart $cart) {
85 return pht('Return to Subscription');
86 }
87
88}