mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 22:10:55 +01:00
Badges ... on your profile
Summary: Shows badges on profile if you have them. Check if app is installed, show badges. Test Plan: Gave myself a liberal selection of badge. Gave notchad one badge. Gave chadtwo absolutely nothing. {F651069} Reviewers: btrahan, lpriestley, epriestley Reviewed By: epriestley Subscribers: johnny-bit, epriestley, Korvin Differential Revision: https://secure.phabricator.com/D13692
This commit is contained in:
parent
875dc54516
commit
ded654b8e2
3 changed files with 71 additions and 0 deletions
|
@ -23,6 +23,7 @@ final class PhabricatorPeopleProfileController
|
|||
$user = id(new PhabricatorPeopleQuery())
|
||||
->setViewer($viewer)
|
||||
->withUsernames(array($this->username))
|
||||
->needBadges(true)
|
||||
->needProfileImage(true)
|
||||
->needAvailability(true)
|
||||
->executeOne();
|
||||
|
@ -157,9 +158,12 @@ final class PhabricatorPeopleProfileController
|
|||
->setHeaderText(pht('Recent Activity'))
|
||||
->appendChild($this->buildPeopleFeed($user, $viewer));
|
||||
|
||||
$badges = $this->buildBadgesView($user);
|
||||
|
||||
$nav = $this->buildIconNavView($user);
|
||||
$nav->selectFilter("{$name}/");
|
||||
$nav->appendChild($object_box);
|
||||
$nav->appendChild($badges);
|
||||
$nav->appendChild($feed);
|
||||
|
||||
return $this->buildApplicationPage(
|
||||
|
@ -187,6 +191,39 @@ final class PhabricatorPeopleProfileController
|
|||
return $view;
|
||||
}
|
||||
|
||||
private function buildBadgesView(
|
||||
PhabricatorUser $user) {
|
||||
|
||||
$viewer = $this->getViewer();
|
||||
$class = 'PhabricatorBadgesApplication';
|
||||
$box = null;
|
||||
|
||||
if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
|
||||
$badge_phids = $user->getBadgePHIDs();
|
||||
if ($badge_phids) {
|
||||
$badges = id(new PhabricatorBadgesQuery())
|
||||
->setViewer($viewer)
|
||||
->withPHIDs($badge_phids)
|
||||
->execute();
|
||||
|
||||
$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);
|
||||
}
|
||||
|
||||
$box = id(new PHUIObjectBoxView())
|
||||
->setHeaderText(pht('Badges'))
|
||||
->appendChild($flex);
|
||||
}
|
||||
}
|
||||
return $box;
|
||||
}
|
||||
|
||||
private function buildPeopleFeed(
|
||||
PhabricatorUser $user,
|
||||
$viewer) {
|
||||
|
|
|
@ -22,6 +22,7 @@ final class PhabricatorPeopleQuery
|
|||
private $needProfile;
|
||||
private $needProfileImage;
|
||||
private $needAvailability;
|
||||
private $needBadges;
|
||||
|
||||
public function withIDs(array $ids) {
|
||||
$this->ids = $ids;
|
||||
|
@ -113,6 +114,11 @@ final class PhabricatorPeopleQuery
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function needBadges($need) {
|
||||
$this->needBadges = $need;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function newResultObject() {
|
||||
return new PhabricatorUser();
|
||||
}
|
||||
|
@ -147,6 +153,24 @@ final class PhabricatorPeopleQuery
|
|||
}
|
||||
}
|
||||
|
||||
if ($this->needBadges) {
|
||||
$edge_query = id(new PhabricatorEdgeQuery())
|
||||
->withSourcePHIDs(mpull($users, 'getPHID'))
|
||||
->withEdgeTypes(
|
||||
array(
|
||||
PhabricatorRecipientHasBadgeEdgeType::EDGECONST,
|
||||
));
|
||||
$edge_query->execute();
|
||||
|
||||
foreach ($users as $user) {
|
||||
$phids = $edge_query->getDestinationPHIDs(
|
||||
array(
|
||||
$user->getPHID(),
|
||||
));
|
||||
$user->attachBadgePHIDs($phids);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->needProfileImage) {
|
||||
$rebuild = array();
|
||||
foreach ($users as $user) {
|
||||
|
|
|
@ -55,6 +55,7 @@ final class PhabricatorUser
|
|||
private $preferences = null;
|
||||
private $omnipotent = false;
|
||||
private $customFields = self::ATTACHABLE;
|
||||
private $badgePHIDs = self::ATTACHABLE;
|
||||
|
||||
private $alternateCSRFString = self::ATTACHABLE;
|
||||
private $session = self::ATTACHABLE;
|
||||
|
@ -1145,6 +1146,15 @@ final class PhabricatorUser
|
|||
return $this->loadHandles($phids)->renderList();
|
||||
}
|
||||
|
||||
public function attachBadgePHIDs(array $phids) {
|
||||
$this->badgePHIDs = $phids;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getBadgePHIDs() {
|
||||
return $this->assertAttached($this->badgePHIDs);
|
||||
}
|
||||
|
||||
|
||||
/* -( PhabricatorPolicyInterface )----------------------------------------- */
|
||||
|
||||
|
|
Loading…
Reference in a new issue