From 219357aa9fa30c1f1a71ee0b36440b077d37852b Mon Sep 17 00:00:00 2001 From: lkassianik Date: Fri, 1 Apr 2016 17:52:52 -0700 Subject: [PATCH] Adding awarder info to badge cards displayed on user profile pages Summary: Ref T8940 Test Plan: Award badge, open recipient profile page, badge should appear in badges list, and flipping the badge card should show who awarded it. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: chad, Korvin Maniphest Tasks: T8940 Differential Revision: https://secure.phabricator.com/D15570 --- ...PhabricatorPeopleProfileViewController.php | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php index cb9c558d5a..06a2f02950 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php @@ -181,26 +181,48 @@ final class PhabricatorPeopleProfileViewController return null; } - $badge_phids = $user->getBadgePHIDs(); - if ($badge_phids) { + $awards = array(); + $badges = array(); + if ($user->getBadgePHIDs()) { + $awards = id(new PhabricatorBadgesAwardQuery()) + ->setViewer($viewer) + ->withRecipientPHIDs(array($user->getPHID())) + ->execute(); + $awards = mpull($awards, null, 'getBadgePHID'); + + $badge_phids = mpull($awards, 'getBadgePHID'); $badges = id(new PhabricatorBadgesQuery()) ->setViewer($viewer) ->withPHIDs($badge_phids) ->withStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)) ->execute(); - } else { - $badges = array(); + $badges = mpull($badges, null, 'getPHID'); } if (count($badges)) { $flex = new PHUIBadgeBoxView(); + foreach ($badges as $badge) { - $item = id(new PHUIBadgeView()) - ->setIcon($badge->getIcon()) - ->setHeader($badge->getName()) - ->setSubhead($badge->getFlavor()) - ->setQuality($badge->getQuality()); - $flex->addItem($item); + if ($badge) { + $awarder_info = array(); + + $award = idx($awards, $badge->getPHID(), null); + $awarder_phid = $award->getAwarderPHID(); + $awarder_handle = $viewer->renderHandle($awarder_phid); + + $awarder_info = pht( + 'Awarded by %s', + $awarder_handle->render()); + + $item = id(new PHUIBadgeView()) + ->setIcon($badge->getIcon()) + ->setHeader($badge->getName()) + ->setSubhead($badge->getFlavor()) + ->setQuality($badge->getQuality()) + ->addByLine($awarder_info); + + $flex->addItem($item); + } } } else { $error = id(new PHUIBoxView())