diff --git a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php index e96ed4a89e..f3e95eeb66 100644 --- a/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php @@ -1,133 +1,127 @@ getViewer(); $id = $request->getURIData('id'); $user = id(new PhabricatorPeopleQuery()) ->setViewer($viewer) ->withIDs(array($id)) - ->needProfile(true) ->needProfileImage(true) - ->needAvailability(true) - ->requireCapabilities( - array( - PhabricatorPolicyCapability::CAN_VIEW, - )) ->executeOne(); if (!$user) { return new Aphront404Response(); } $class = 'PhabricatorBadgesApplication'; if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { return new Aphront404Response(); } $this->setUser($user); $title = array(pht('Badges'), $user->getUsername()); $header = $this->buildProfileHeader(); $badges = $this->buildBadgesView($user); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb(pht('Badges')); $crumbs->setBorder(true); $nav = $this->getProfileMenu(); $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_BADGES); // Best option? $badges = id(new PhabricatorBadgesQuery()) ->setViewer($viewer) ->withStatuses(array( PhabricatorBadgesBadge::STATUS_ACTIVE, )) ->requireCapabilities( array( PhabricatorPolicyCapability::CAN_VIEW, PhabricatorPolicyCapability::CAN_EDIT, )) + ->setLimit(1) ->execute(); $button = id(new PHUIButtonView()) ->setTag('a') ->setIcon('fa-plus') ->setText(pht('Award Badge')) ->setWorkflow(true) ->setHref('/badges/award/'.$user->getID().'/'); - if (count($badges)) { + if ($badges) { $header->addActionLink($button); } $view = id(new PHUITwoColumnView()) ->setHeader($header) ->addClass('project-view-home') ->addClass('project-view-people-home') ->setFooter(array( $this->buildBadgesView($user) )); return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) ->setNavigation($nav) ->appendChild($view); } private function buildBadgesView(PhabricatorUser $user) { $viewer = $this->getViewer(); + $request = $this->getRequest(); + + $pager = id(new AphrontCursorPagerView()) + ->readFromRequest($request); - $awards = id(new PhabricatorBadgesAwardQuery()) + $query = id(new PhabricatorBadgesAwardQuery()) ->setViewer($viewer) ->withRecipientPHIDs(array($user->getPHID())) - ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)) - ->execute(); - $awards = mpull($awards, null, 'getBadgePHID'); + ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)); - $badges = array(); - foreach ($awards as $award) { - $badge = $award->getBadge(); - $badges[$award->getBadgePHID()] = $badge; - } + $awards = $query->executeWithCursorPager($pager); - if (count($badges)) { + if ($awards) { $flex = new PHUIBadgeBoxView(); + foreach ($awards as $award) { + $badge = $award->getBadge(); + + $awarder_info = array(); + + $awarder_phid = $award->getAwarderPHID(); + $awarder_handle = $viewer->renderHandle($awarder_phid); + $awarded_date = phabricator_date($award->getDateCreated(), $viewer); + + $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()) + ->setHref($badge->getViewURI()) + ->addByLine($awarder_info) + ->addByLine($awarded_date); - foreach ($badges as $badge) { - if ($badge) { - $awarder_info = array(); - - $award = idx($awards, $badge->getPHID(), null); - $awarder_phid = $award->getAwarderPHID(); - $awarder_handle = $viewer->renderHandle($awarder_phid); - $awarded_date = phabricator_date($award->getDateCreated(), $viewer); - - $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()) - ->setHref($badge->getViewURI()) - ->addByLine($awarder_info) - ->addByLine($awarded_date); - - $flex->addItem($item); - } + $flex->addItem($item); } } else { $flex = id(new PHUIInfoView()) ->setSeverity(PHUIInfoView::SEVERITY_NOTICE) ->appendChild(pht('User has not been awarded any badges.')); } - return $flex; + return array( + $flex, + $pager, + ); } }