From 0ba65699596da432c43e3a2027b58dfde171ed85 Mon Sep 17 00:00:00 2001 From: Chad Little Date: Fri, 24 Jul 2015 10:58:13 -0700 Subject: [PATCH] Add Badges to Hovercards Summary: Fixes T8942, Makes Badges if installed show up on your hovercard. Test Plan: Give a badge, mention myself, see badge on hovercard. Reviewers: btrahan, epriestley Reviewed By: epriestley Subscribers: epriestley, Korvin Maniphest Tasks: T8942 Differential Revision: https://secure.phabricator.com/D13703 --- ...habricatorPeopleHovercardEventListener.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/applications/people/event/PhabricatorPeopleHovercardEventListener.php b/src/applications/people/event/PhabricatorPeopleHovercardEventListener.php index 6ecf0a9bd9..965cecc68d 100644 --- a/src/applications/people/event/PhabricatorPeopleHovercardEventListener.php +++ b/src/applications/people/event/PhabricatorPeopleHovercardEventListener.php @@ -32,6 +32,7 @@ final class PhabricatorPeopleHovercardEventListener ->withIDs(array($user->getID())) ->needAvailability(true) ->needProfile(true) + ->needBadges(true) ->executeOne(); $hovercard->setTitle($user->getUsername()); @@ -65,8 +66,39 @@ final class PhabricatorPeopleHovercardEventListener ->truncateString($profile->getBlurb())); } + $badges = $this->buildBadges($user, $viewer); + foreach ($badges as $badge) { + $hovercard->addBadge($badge); + } + $event->setValue('hovercard', $hovercard); } + private function buildBadges( + PhabricatorUser $user, + $viewer) { + + $class = 'PhabricatorBadgesApplication'; + $items = array(); + + if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { + $badge_phids = $user->getBadgePHIDs(); + if ($badge_phids) { + $badges = id(new PhabricatorBadgesQuery()) + ->setViewer($viewer) + ->withPHIDs($badge_phids) + ->execute(); + + foreach ($badges as $badge) { + $items[] = id(new PHUIBadgeMiniView()) + ->setIcon($badge->getIcon()) + ->setHeader($badge->getName()) + ->setQuality($badge->getQuality()); + } + } + } + return $items; + } + }