Remove product literal strings in "pht()", part 18
[phabricator.git] / src / applications / badges / query / PhabricatorBadgesAwardQuery.php
blob347462de4d568b05ff9baaeae931fc0dde09adc3
1 <?php
3 final class PhabricatorBadgesAwardQuery
4 extends PhabricatorCursorPagedPolicyAwareQuery {
6 private $badgePHIDs;
7 private $recipientPHIDs;
8 private $awarderPHIDs;
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)
20 ->execute();
22 $badges = mpull($badges, null, 'getPHID');
23 foreach ($awards as $key => $award) {
24 $award_badge = idx($badges, $award->getBadgePHID());
25 if (!$award_badge) {
26 unset($awards[$key]);
27 $this->didRejectResult($award);
28 continue;
30 $award->attachBadge($award_badge);
33 return $awards;
36 public function withBadgePHIDs(array $phids) {
37 $this->badgePHIDs = $phids;
38 return $this;
41 public function withRecipientPHIDs(array $phids) {
42 $this->recipientPHIDs = $phids;
43 return $this;
46 public function withAwarderPHIDs(array $phids) {
47 $this->awarderPHIDs = $phids;
48 return $this;
51 public function withBadgeStatuses(array $statuses) {
52 $this->badgeStatuses = $statuses;
53 return $this;
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) {
76 $where[] = qsprintf(
77 $conn,
78 'badges_award.badgePHID IN (%Ls)',
79 $this->badgePHIDs);
82 if ($this->recipientPHIDs !== null) {
83 $where[] = qsprintf(
84 $conn,
85 'badges_award.recipientPHID IN (%Ls)',
86 $this->recipientPHIDs);
89 if ($this->awarderPHIDs !== null) {
90 $where[] = qsprintf(
91 $conn,
92 'badges_award.awarderPHID IN (%Ls)',
93 $this->awarderPHIDs);
96 if ($this->badgeStatuses !== null) {
97 $where[] = qsprintf(
98 $conn,
99 'badges_badge.status IN (%Ls)',
100 $this->badgeStatuses);
104 return $where;
107 protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
108 $join = parent::buildJoinClauseParts($conn);
109 $badges = new PhabricatorBadgesBadge();
111 if ($this->shouldJoinBadge()) {
112 $join[] = qsprintf(
113 $conn,
114 'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid',
115 $badges->getTableName());
118 return $join;
121 public function getQueryApplicationClass() {
122 return 'PhabricatorBadgesApplication';