@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

at upstream/main 124 lines 2.9 kB view raw
1<?php 2 3/** 4 * @extends PhabricatorCursorPagedPolicyAwareQuery<PhabricatorBadgesAward> 5 */ 6final class PhabricatorBadgesAwardQuery 7 extends PhabricatorCursorPagedPolicyAwareQuery { 8 9 private $badgePHIDs; 10 private $recipientPHIDs; 11 private $awarderPHIDs; 12 private $badgeStatuses = null; 13 14 protected function willFilterPage(array $awards) { 15 $badge_phids = array(); 16 foreach ($awards as $key => $award) { 17 $badge_phids[] = $award->getBadgePHID(); 18 } 19 20 $badges = id(new PhabricatorBadgesQuery()) 21 ->setViewer($this->getViewer()) 22 ->withPHIDs($badge_phids) 23 ->execute(); 24 25 $badges = mpull($badges, null, 'getPHID'); 26 foreach ($awards as $key => $award) { 27 $award_badge = idx($badges, $award->getBadgePHID()); 28 if (!$award_badge) { 29 unset($awards[$key]); 30 $this->didRejectResult($award); 31 continue; 32 } 33 $award->attachBadge($award_badge); 34 } 35 36 return $awards; 37 } 38 39 public function withBadgePHIDs(array $phids) { 40 $this->badgePHIDs = $phids; 41 return $this; 42 } 43 44 public function withRecipientPHIDs(array $phids) { 45 $this->recipientPHIDs = $phids; 46 return $this; 47 } 48 49 public function withAwarderPHIDs(array $phids) { 50 $this->awarderPHIDs = $phids; 51 return $this; 52 } 53 54 public function withBadgeStatuses(array $statuses) { 55 $this->badgeStatuses = $statuses; 56 return $this; 57 } 58 59 private function shouldJoinBadge() { 60 return (bool)$this->badgeStatuses; 61 } 62 63 public function newResultObject() { 64 return new PhabricatorBadgesAward(); 65 } 66 67 protected function getPrimaryTableAlias() { 68 return 'badges_award'; 69 } 70 71 protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) { 72 $where = parent::buildWhereClauseParts($conn); 73 74 if ($this->badgePHIDs !== null) { 75 $where[] = qsprintf( 76 $conn, 77 'badges_award.badgePHID IN (%Ls)', 78 $this->badgePHIDs); 79 } 80 81 if ($this->recipientPHIDs !== null) { 82 $where[] = qsprintf( 83 $conn, 84 'badges_award.recipientPHID IN (%Ls)', 85 $this->recipientPHIDs); 86 } 87 88 if ($this->awarderPHIDs !== null) { 89 $where[] = qsprintf( 90 $conn, 91 'badges_award.awarderPHID IN (%Ls)', 92 $this->awarderPHIDs); 93 } 94 95 if ($this->badgeStatuses !== null) { 96 $where[] = qsprintf( 97 $conn, 98 'badges_badge.status IN (%Ls)', 99 $this->badgeStatuses); 100 } 101 102 103 return $where; 104 } 105 106 protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) { 107 $join = parent::buildJoinClauseParts($conn); 108 $badges = new PhabricatorBadgesBadge(); 109 110 if ($this->shouldJoinBadge()) { 111 $join[] = qsprintf( 112 $conn, 113 'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid', 114 $badges->getTableName()); 115 } 116 117 return $join; 118 } 119 120 public function getQueryApplicationClass() { 121 return PhabricatorBadgesApplication::class; 122 } 123 124}