@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 PhortunePaymentMethodQuery
4 extends PhabricatorCursorPagedPolicyAwareQuery {
5
6 private $ids;
7 private $phids;
8 private $accountPHIDs;
9 private $merchantPHIDs;
10 private $statuses;
11
12 public function withIDs(array $ids) {
13 $this->ids = $ids;
14 return $this;
15 }
16
17 public function withPHIDs(array $phids) {
18 $this->phids = $phids;
19 return $this;
20 }
21
22 public function withAccountPHIDs(array $phids) {
23 $this->accountPHIDs = $phids;
24 return $this;
25 }
26
27 public function withMerchantPHIDs(array $phids) {
28 $this->merchantPHIDs = $phids;
29 return $this;
30 }
31
32 public function withStatuses(array $statuses) {
33 $this->statuses = $statuses;
34 return $this;
35 }
36
37 public function newResultObject() {
38 return new PhortunePaymentMethod();
39 }
40
41 protected function willFilterPage(array $methods) {
42 $accounts = id(new PhortuneAccountQuery())
43 ->setViewer($this->getViewer())
44 ->withPHIDs(mpull($methods, 'getAccountPHID'))
45 ->execute();
46 $accounts = mpull($accounts, null, 'getPHID');
47
48 foreach ($methods as $key => $method) {
49 $account = idx($accounts, $method->getAccountPHID());
50 if (!$account) {
51 unset($methods[$key]);
52 $this->didRejectResult($method);
53 continue;
54 }
55 $method->attachAccount($account);
56 }
57
58 if (!$methods) {
59 return $methods;
60 }
61
62 $merchants = id(new PhortuneMerchantQuery())
63 ->setViewer($this->getViewer())
64 ->withPHIDs(mpull($methods, 'getMerchantPHID'))
65 ->execute();
66 $merchants = mpull($merchants, null, 'getPHID');
67
68 foreach ($methods as $key => $method) {
69 $merchant = idx($merchants, $method->getMerchantPHID());
70 if (!$merchant) {
71 unset($methods[$key]);
72 $this->didRejectResult($method);
73 continue;
74 }
75 $method->attachMerchant($merchant);
76 }
77
78 if (!$methods) {
79 return $methods;
80 }
81
82 $provider_configs = id(new PhortunePaymentProviderConfigQuery())
83 ->setViewer($this->getViewer())
84 ->withPHIDs(mpull($methods, 'getProviderPHID'))
85 ->execute();
86 $provider_configs = mpull($provider_configs, null, 'getPHID');
87
88 foreach ($methods as $key => $method) {
89 $provider_config = idx($provider_configs, $method->getProviderPHID());
90 if (!$provider_config) {
91 unset($methods[$key]);
92 $this->didRejectResult($method);
93 continue;
94 }
95 $method->attachProviderConfig($provider_config);
96 }
97
98 return $methods;
99 }
100
101 protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
102 $where = parent::buildWhereClauseParts($conn);
103
104 if ($this->ids !== null) {
105 $where[] = qsprintf(
106 $conn,
107 'id IN (%Ld)',
108 $this->ids);
109 }
110
111 if ($this->phids !== null) {
112 $where[] = qsprintf(
113 $conn,
114 'phid IN (%Ls)',
115 $this->phids);
116 }
117
118 if ($this->accountPHIDs !== null) {
119 $where[] = qsprintf(
120 $conn,
121 'accountPHID IN (%Ls)',
122 $this->accountPHIDs);
123 }
124
125 if ($this->merchantPHIDs !== null) {
126 $where[] = qsprintf(
127 $conn,
128 'merchantPHID IN (%Ls)',
129 $this->merchantPHIDs);
130 }
131
132 if ($this->statuses !== null) {
133 $where[] = qsprintf(
134 $conn,
135 'status IN (%Ls)',
136 $this->statuses);
137 }
138
139 return $where;
140 }
141
142 public function getQueryApplicationClass() {
143 return PhabricatorPhortuneApplication::class;
144 }
145
146}