Page MenuHomePhabricator

D17499.diff
No OneTemporary

D17499.diff

diff --git a/src/applications/badges/query/PhabricatorBadgesAwardQuery.php b/src/applications/badges/query/PhabricatorBadgesAwardQuery.php
--- a/src/applications/badges/query/PhabricatorBadgesAwardQuery.php
+++ b/src/applications/badges/query/PhabricatorBadgesAwardQuery.php
@@ -6,7 +6,7 @@
private $badgePHIDs;
private $recipientPHIDs;
private $awarderPHIDs;
-
+ private $badgeStatuses = null;
protected function willFilterPage(array $awards) {
$badge_phids = array();
@@ -22,6 +22,11 @@
$badges = mpull($badges, null, 'getPHID');
foreach ($awards as $key => $award) {
$award_badge = idx($badges, $award->getBadgePHID());
+ if (!$award_badge) {
+ unset($awards[$key]);
+ $this->didRejectResult($award);
+ continue;
+ }
$award->attachBadge($award_badge);
}
@@ -43,6 +48,15 @@
return $this;
}
+ public function withBadgeStatuses(array $statuses) {
+ $this->badgeStatuses = $statuses;
+ return $this;
+ }
+
+ private function shouldJoinBadge() {
+ return (bool)$this->badgeStatuses;
+ }
+
protected function loadPage() {
return $this->loadStandardPage($this->newResultObject());
}
@@ -51,33 +65,59 @@
return new PhabricatorBadgesAward();
}
+ protected function getPrimaryTableAlias() {
+ return 'badges_award';
+ }
+
protected function buildWhereClauseParts(AphrontDatabaseConnection $conn) {
$where = parent::buildWhereClauseParts($conn);
if ($this->badgePHIDs !== null) {
$where[] = qsprintf(
$conn,
- 'badgePHID IN (%Ls)',
+ 'badges_award.badgePHID IN (%Ls)',
$this->badgePHIDs);
}
if ($this->recipientPHIDs !== null) {
$where[] = qsprintf(
$conn,
- 'recipientPHID IN (%Ls)',
+ 'badges_award.recipientPHID IN (%Ls)',
$this->recipientPHIDs);
}
if ($this->awarderPHIDs !== null) {
$where[] = qsprintf(
$conn,
- 'awarderPHID IN (%Ls)',
+ 'badges_award.awarderPHID IN (%Ls)',
$this->awarderPHIDs);
}
+ if ($this->badgeStatuses !== null) {
+ $where[] = qsprintf(
+ $conn,
+ 'badges_badge.status IN (%Ls)',
+ $this->badgeStatuses);
+ }
+
+
return $where;
}
+ protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
+ $join = parent::buildJoinClauseParts($conn);
+ $badges = new PhabricatorBadgesBadge();
+
+ if ($this->shouldJoinBadge()) {
+ $join[] = qsprintf(
+ $conn,
+ 'JOIN %T badges_badge ON badges_award.badgePHID = badges_badge.phid',
+ $badges->getTableName());
+ }
+
+ return $join;
+ }
+
public function getQueryApplicationClass() {
return 'PhabricatorBadgesApplication';
}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
--- a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
+++ b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
@@ -84,15 +84,14 @@
$awards = id(new PhabricatorBadgesAwardQuery())
->setViewer($viewer)
->withRecipientPHIDs(array($user->getPHID()))
+ ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
->execute();
$awards = mpull($awards, null, 'getBadgePHID');
$badges = array();
foreach ($awards as $award) {
$badge = $award->getBadge();
- if ($badge->getStatus() == PhabricatorBadgesBadge::STATUS_ACTIVE) {
- $badges[$award->getBadgePHID()] = $badge;
- }
+ $badges[$award->getBadgePHID()] = $badge;
}
if (count($badges)) {
diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
--- a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
+++ b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php
@@ -528,12 +528,14 @@
$awards = id(new PhabricatorBadgesAwardQuery())
->setViewer($this->getUser())
->withRecipientPHIDs(array($user->getPHID()))
+ ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
->setLimit(2)
->execute();
+ $badges = mpull($awards, 'getBadge');
+
$badge_view = null;
- if ($awards) {
- $badges = mpull($awards, 'getBadge');
+ if ($badges) {
$badge_list = array();
foreach ($badges as $badge) {
$badge_view = id(new PHUIBadgeMiniView())
diff --git a/src/view/phui/PHUITimelineView.php b/src/view/phui/PHUITimelineView.php
--- a/src/view/phui/PHUITimelineView.php
+++ b/src/view/phui/PHUITimelineView.php
@@ -220,7 +220,6 @@
}
$user_phid_type = PhabricatorPeopleUserPHIDType::TYPECONST;
- $badge_edge_type = PhabricatorRecipientHasBadgeEdgeType::EDGECONST;
$user_phids = array();
foreach ($events as $key => $event) {
@@ -248,6 +247,7 @@
$awards = id(new PhabricatorBadgesAwardQuery())
->setViewer($this->getViewer())
->withRecipientPHIDs($user_phids)
+ ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE))
->execute();
$awards = mgroup($awards, 'getRecipientPHID');
@@ -259,9 +259,7 @@
$badges = array();
foreach ($author_awards as $award) {
$badge = $award->getBadge();
- if ($badge->getStatus() == PhabricatorBadgesBadge::STATUS_ACTIVE) {
- $badges[$award->getBadgePHID()] = $badge;
- }
+ $badges[$award->getBadgePHID()] = $badge;
}
// TODO: Pick the "best" badges in some smart way. For now, just pick

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 20, 5:26 AM (1 d, 8 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7643947
Default Alt Text
D17499.diff (5 KB)

Event Timeline