3 final class PhabricatorBadgesAwardQuery
4 extends PhabricatorCursorPagedPolicyAwareQuery
{
7 private $recipientPHIDs;
9 private $badgeStatuses = null;
11 protected function willFilterPage(array $awards) {
12 $badge_phids = array();
13 foreach ($awards as $key => $award) {
14 $badge_phids[] = $award->getBadgePHID();
17 $badges = id(new PhabricatorBadgesQuery())
18 ->setViewer($this->getViewer())
19 ->withPHIDs($badge_phids)
22 $badges = mpull($badges, null, 'getPHID');
23 foreach ($awards as $key => $award) {
24 $award_badge = idx($badges, $award->getBadgePHID());
27 $this->didRejectResult($award);
30 $award->attachBadge($award_badge);
36 public function withBadgePHIDs(array $phids) {
37 $this->badgePHIDs
= $phids;
41 public function withRecipientPHIDs(array $phids) {
42 $this->recipientPHIDs
= $phids;
46 public function withAwarderPHIDs(array $phids) {
47 $this->awarderPHIDs
= $phids;
51 public function withBadgeStatuses(array $statuses) {
52 $this->badgeStatuses
= $statuses;
56 private function shouldJoinBadge() {
57 return (bool)$this->badgeStatuses
;
60 protected function loadPage() {
61 return $this->loadStandardPage($this->newResultObject());
64 public function newResultObject() {
65 return new PhabricatorBadgesAward();
68 protected function getPrimaryTableAlias() {
69 return 'badges_award';
72 protected function buildWhereClauseParts(AphrontDatabaseConnection
$conn) {
73 $where = parent
::buildWhereClauseParts($conn);
75 if ($this->badgePHIDs
!== null) {
78 'badges_award.badgePHID IN (%Ls)',
82 if ($this->recipientPHIDs
!== null) {
85 'badges_award.recipientPHID IN (%Ls)',
86 $this->recipientPHIDs
);
89 if ($this->awarderPHIDs
!== null) {
92 'badges_award.awarderPHID IN (%Ls)',
96 if ($this->badgeStatuses
!== null) {
99 'badges_badge.status IN (%Ls)',
100 $this->badgeStatuses
);
107 protected function buildJoinClauseParts(AphrontDatabaseConnection
$conn) {
108 $join = parent
::buildJoinClauseParts($conn);
109 $badges = new PhabricatorBadgesBadge();
111 if ($this->shouldJoinBadge()) {
114 'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid',
115 $badges->getTableName());
121 public function getQueryApplicationClass() {
122 return 'PhabricatorBadgesApplication';