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