@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator

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

+32
+32
src/applications/people/event/PhabricatorPeopleHovercardEventListener.php
··· 32 32 ->withIDs(array($user->getID())) 33 33 ->needAvailability(true) 34 34 ->needProfile(true) 35 + ->needBadges(true) 35 36 ->executeOne(); 36 37 37 38 $hovercard->setTitle($user->getUsername()); ··· 65 66 ->truncateString($profile->getBlurb())); 66 67 } 67 68 69 + $badges = $this->buildBadges($user, $viewer); 70 + foreach ($badges as $badge) { 71 + $hovercard->addBadge($badge); 72 + } 73 + 68 74 $event->setValue('hovercard', $hovercard); 75 + } 76 + 77 + private function buildBadges( 78 + PhabricatorUser $user, 79 + $viewer) { 80 + 81 + $class = 'PhabricatorBadgesApplication'; 82 + $items = array(); 83 + 84 + if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { 85 + $badge_phids = $user->getBadgePHIDs(); 86 + if ($badge_phids) { 87 + $badges = id(new PhabricatorBadgesQuery()) 88 + ->setViewer($viewer) 89 + ->withPHIDs($badge_phids) 90 + ->execute(); 91 + 92 + foreach ($badges as $badge) { 93 + $items[] = id(new PHUIBadgeMiniView()) 94 + ->setIcon($badge->getIcon()) 95 + ->setHeader($badge->getName()) 96 + ->setQuality($badge->getQuality()); 97 + } 98 + } 99 + } 100 + return $items; 69 101 } 70 102 71 103