@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 recaptime-dev/main 113 lines 2.5 kB view raw
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}