@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 PhortuneAccountEmailQuery
4 extends PhabricatorCursorPagedPolicyAwareQuery {
5
6 private $ids;
7 private $phids;
8 private $accountPHIDs;
9 private $addressKeys;
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 withAddressKeys(array $keys) {
28 $this->addressKeys = $keys;
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 PhortuneAccountEmail();
39 }
40
41 protected function willFilterPage(array $addresses) {
42 $accounts = id(new PhortuneAccountQuery())
43 ->setViewer($this->getViewer())
44 ->setParentQuery($this)
45 ->withPHIDs(mpull($addresses, 'getAccountPHID'))
46 ->execute();
47 $accounts = mpull($accounts, null, 'getPHID');
48
49 foreach ($addresses as $key => $address) {
50 $account = idx($accounts, $address->getAccountPHID());
51
52 if (!$account) {
53 $this->didRejectResult($addresses[$key]);
54 unset($addresses[$key]);
55 continue;
56 }
57
58 $address->attachAccount($account);
59 }
60
61 return $addresses;
62 }
63
64 protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
65 $where = parent::buildWhereClauseParts($conn);
66
67 if ($this->ids !== null) {
68 $where[] = qsprintf(
69 $conn,
70 'address.id IN (%Ld)',
71 $this->ids);
72 }
73
74 if ($this->phids !== null) {
75 $where[] = qsprintf(
76 $conn,
77 'address.phid IN (%Ls)',
78 $this->phids);
79 }
80
81 if ($this->accountPHIDs !== null) {
82 $where[] = qsprintf(
83 $conn,
84 'address.accountPHID IN (%Ls)',
85 $this->accountPHIDs);
86 }
87
88 if ($this->addressKeys !== null) {
89 $where[] = qsprintf(
90 $conn,
91 'address.addressKey IN (%Ls)',
92 $this->addressKeys);
93 }
94
95 if ($this->statuses !== null) {
96 $where[] = qsprintf(
97 $conn,
98 'address.status IN (%Ls)',
99 $this->statuses);
100 }
101
102 return $where;
103 }
104
105 public function getQueryApplicationClass() {
106 return PhabricatorPhortuneApplication::class;
107 }
108
109 protected function getPrimaryTableAlias() {
110 return 'address';
111 }
112
113}