Skip to content

Commit fd69dfa

Browse files
author
Chad Little
committedMar 15, 2017
Allow searching for Badge Awards by Badge status
Summary: Fixes T12398. This adds `withBadgeStatuses` as a query parameter when searching for Awards to show. In most (all?) cases we currently only show active badges. Test Plan: Assign myself a badge, archive it and verify it does not appear on profile, comment form, or timeline. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Maniphest Tasks: T12398 Differential Revision: https://secure.phabricator.com/D17499
1 parent a72d187 commit fd69dfa

File tree

4 files changed

+52
-13
lines changed

4 files changed

+52
-13
lines changed
 

‎src/applications/badges/query/PhabricatorBadgesAwardQuery.php

+44-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ final class PhabricatorBadgesAwardQuery
66
private $badgePHIDs;
77
private $recipientPHIDs;
88
private $awarderPHIDs;
9-
9+
private $badgeStatuses = null;
1010

1111
protected function willFilterPage(array $awards) {
1212
$badge_phids = array();
@@ -22,6 +22,11 @@ protected function willFilterPage(array $awards) {
2222
$badges = mpull($badges, null, 'getPHID');
2323
foreach ($awards as $key => $award) {
2424
$award_badge = idx($badges, $award->getBadgePHID());
25+
if (!$award_badge) {
26+
unset($awards[$key]);
27+
$this->didRejectResult($award);
28+
continue;
29+
}
2530
$award->attachBadge($award_badge);
2631
}
2732

@@ -43,6 +48,15 @@ public function withAwarderPHIDs(array $phids) {
4348
return $this;
4449
}
4550

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+
4660
protected function loadPage() {
4761
return $this->loadStandardPage($this->newResultObject());
4862
}
@@ -51,33 +65,59 @@ public function newResultObject() {
5165
return new PhabricatorBadgesAward();
5266
}
5367

68+
protected function getPrimaryTableAlias() {
69+
return 'badges_award';
70+
}
71+
5472
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
5573
$where = parent::buildWhereClauseParts($conn);
5674

5775
if ($this->badgePHIDs !== null) {
5876
$where[] = qsprintf(
5977
$conn,
60-
'badgePHID IN (%Ls)',
78+
'badges_award.badgePHID IN (%Ls)',
6179
$this->badgePHIDs);
6280
}
6381

6482
if ($this->recipientPHIDs !== null) {
6583
$where[] = qsprintf(
6684
$conn,
67-
'recipientPHID IN (%Ls)',
85+
'badges_award.recipientPHID IN (%Ls)',
6886
$this->recipientPHIDs);
6987
}
7088

7189
if ($this->awarderPHIDs !== null) {
7290
$where[] = qsprintf(
7391
$conn,
74-
'awarderPHID IN (%Ls)',
92+
'badges_award.awarderPHID IN (%Ls)',
7593
$this->awarderPHIDs);
7694
}
7795

96+
if ($this->badgeStatuses !== null) {
97+
$where[] = qsprintf(
98+
$conn,
99+
'badges_badge.status IN (%Ls)',
100+
$this->badgeStatuses);
101+
}
102+
103+
78104
return $where;
79105
}
80106

107+
protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
108+
$join = parent::buildJoinClauseParts($conn);
109+
$badges = new PhabricatorBadgesBadge();
110+
111+
if ($this->shouldJoinBadge()) {
112+
$join[] = qsprintf(
113+
$conn,
114+
'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid',
115+
$badges->getTableName());
116+
}
117+
118+
return $join;
119+
}
120+
81121
public function getQueryApplicationClass() {
82122
return 'PhabricatorBadgesApplication';
83123
}

‎src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,14 @@ private function buildBadgesView(PhabricatorUser $user) {
8484
$awards = id(new PhabricatorBadgesAwardQuery())
8585
->setViewer($viewer)
8686
->withRecipientPHIDs(array($user->getPHID()))
87+
->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
8788
->execute();
8889
$awards = mpull($awards, null, 'getBadgePHID');
8990

9091
$badges = array();
9192
foreach ($awards as $award) {
9293
$badge = $award->getBadge();
93-
if ($badge->getStatus() == PhabricatorBadgesBadge::STATUS_ACTIVE) {
94-
$badges[$award->getBadgePHID()] = $badge;
95-
}
94+
$badges[$award->getBadgePHID()] = $badge;
9695
}
9796

9897
if (count($badges)) {

‎src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -528,12 +528,14 @@ private function renderBadgeView() {
528528
$awards = id(new PhabricatorBadgesAwardQuery())
529529
->setViewer($this->getUser())
530530
->withRecipientPHIDs(array($user->getPHID()))
531+
->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
531532
->setLimit(2)
532533
->execute();
533534

535+
$badges = mpull($awards, 'getBadge');
536+
534537
$badge_view = null;
535-
if ($awards) {
536-
$badges = mpull($awards, 'getBadge');
538+
if ($badges) {
537539
$badge_list = array();
538540
foreach ($badges as $badge) {
539541
$badge_view = id(new PHUIBadgeMiniView())

‎src/view/phui/PHUITimelineView.php

+2-4
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,6 @@ private function prepareBadgeData(array $events) {
220220
}
221221

222222
$user_phid_type = PhabricatorPeopleUserPHIDType::TYPECONST;
223-
$badge_edge_type = PhabricatorRecipientHasBadgeEdgeType::EDGECONST;
224223

225224
$user_phids = array();
226225
foreach ($events as $key => $event) {
@@ -248,6 +247,7 @@ private function prepareBadgeData(array $events) {
248247
$awards = id(new PhabricatorBadgesAwardQuery())
249248
->setViewer($this->getViewer())
250249
->withRecipientPHIDs($user_phids)
250+
->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
251251
->execute();
252252

253253
$awards = mgroup($awards, 'getRecipientPHID');
@@ -259,9 +259,7 @@ private function prepareBadgeData(array $events) {
259259
$badges = array();
260260
foreach ($author_awards as $award) {
261261
$badge = $award->getBadge();
262-
if ($badge->getStatus() == PhabricatorBadgesBadge::STATUS_ACTIVE) {
263-
$badges[$award->getBadgePHID()] = $badge;
264-
}
262+
$badges[$award->getBadgePHID()] = $badge;
265263
}
266264

267265
// TODO: Pick the "best" badges in some smart way. For now, just pick

0 commit comments

Comments
 (0)
Failed to load comments.