@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
at upstream/main 146 lines 3.5 kB view raw
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}