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; protected function willFilterPage(array $awards) { $badge_phids = array(); @@ -14,18 +14,26 @@ $badge_phids[] = $award->getBadgePHID(); } - $badges = id(new PhabricatorBadgesQuery()) + $badge_query = id(new PhabricatorBadgesQuery()) ->setViewer($this->getViewer()) - ->withPHIDs($badge_phids) - ->execute(); + ->withPHIDs($badge_phids); + + if ($this->badgeStatuses !== null) { + $badge_query->withStatuses($this->badgeStatuses); + } + $badges = $badge_query->execute(); $badges = mpull($badges, null, 'getPHID'); + $results = array(); foreach ($awards as $key => $award) { $award_badge = idx($badges, $award->getBadgePHID()); - $award->attachBadge($award_badge); + if ($award_badge) { + $award->attachBadge($award_badge); + $results[] = $award; + } } - return $awards; + return $results; } public function withBadgePHIDs(array $phids) { @@ -43,6 +51,11 @@ return $this; } + public function withBadgeStatuses(array $statuses) { + $this->badgeStatuses = $statuses; + return $this; + } + protected function loadPage() { return $this->loadStandardPage($this->newResultObject()); } 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,18 @@ $awards = id(new PhabricatorBadgesAwardQuery()) ->setViewer($this->getUser()) ->withRecipientPHIDs(array($user->getPHID())) - ->setLimit(2) + ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)) ->execute(); + $badges = array(); + foreach ($awards as $award) { + $badge = $award->getBadge(); + $badges[$award->getBadgePHID()] = $badge; + } + $badge_view = null; - if ($awards) { - $badges = mpull($awards, 'getBadge'); + if ($badges) { + $badges = array_slice($badges, 0, 2); $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 @@ -248,6 +248,7 @@ $awards = id(new PhabricatorBadgesAwardQuery()) ->setViewer($this->getViewer()) ->withRecipientPHIDs($user_phids) + ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)) ->execute(); $awards = mgroup($awards, 'getRecipientPHID'); @@ -259,9 +260,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