@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
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Paginate the profile badges view

Summary: Ref T12270. Adds a pager, plus a few little cleanups from copy/paste and accumulated cruft.

Test Plan:
- Paginated a user with 180 badges.
- Viewed a user with 0 badges.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12270

Differential Revision: https://secure.phabricator.com/D17561

+32 -38
+32 -38
src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
··· 10 10 $user = id(new PhabricatorPeopleQuery()) 11 11 ->setViewer($viewer) 12 12 ->withIDs(array($id)) 13 - ->needProfile(true) 14 13 ->needProfileImage(true) 15 - ->needAvailability(true) 16 - ->requireCapabilities( 17 - array( 18 - PhabricatorPolicyCapability::CAN_VIEW, 19 - )) 20 14 ->executeOne(); 21 15 if (!$user) { 22 16 return new Aphront404Response(); ··· 50 44 PhabricatorPolicyCapability::CAN_VIEW, 51 45 PhabricatorPolicyCapability::CAN_EDIT, 52 46 )) 47 + ->setLimit(1) 53 48 ->execute(); 54 49 55 50 $button = id(new PHUIButtonView()) ··· 59 54 ->setWorkflow(true) 60 55 ->setHref('/badges/award/'.$user->getID().'/'); 61 56 62 - if (count($badges)) { 57 + if ($badges) { 63 58 $header->addActionLink($button); 64 59 } 65 60 ··· 80 75 81 76 private function buildBadgesView(PhabricatorUser $user) { 82 77 $viewer = $this->getViewer(); 78 + $request = $this->getRequest(); 83 79 84 - $awards = id(new PhabricatorBadgesAwardQuery()) 80 + $pager = id(new AphrontCursorPagerView()) 81 + ->readFromRequest($request); 82 + 83 + $query = id(new PhabricatorBadgesAwardQuery()) 85 84 ->setViewer($viewer) 86 85 ->withRecipientPHIDs(array($user->getPHID())) 87 - ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)) 88 - ->execute(); 89 - $awards = mpull($awards, null, 'getBadgePHID'); 86 + ->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE)); 90 87 91 - $badges = array(); 92 - foreach ($awards as $award) { 93 - $badge = $award->getBadge(); 94 - $badges[$award->getBadgePHID()] = $badge; 95 - } 88 + $awards = $query->executeWithCursorPager($pager); 96 89 97 - if (count($badges)) { 90 + if ($awards) { 98 91 $flex = new PHUIBadgeBoxView(); 92 + foreach ($awards as $award) { 93 + $badge = $award->getBadge(); 99 94 100 - foreach ($badges as $badge) { 101 - if ($badge) { 102 - $awarder_info = array(); 95 + $awarder_info = array(); 103 96 104 - $award = idx($awards, $badge->getPHID(), null); 105 - $awarder_phid = $award->getAwarderPHID(); 106 - $awarder_handle = $viewer->renderHandle($awarder_phid); 107 - $awarded_date = phabricator_date($award->getDateCreated(), $viewer); 97 + $awarder_phid = $award->getAwarderPHID(); 98 + $awarder_handle = $viewer->renderHandle($awarder_phid); 99 + $awarded_date = phabricator_date($award->getDateCreated(), $viewer); 108 100 109 - $awarder_info = pht( 110 - 'Awarded by %s', 111 - $awarder_handle->render()); 101 + $awarder_info = pht( 102 + 'Awarded by %s', 103 + $awarder_handle->render()); 112 104 113 - $item = id(new PHUIBadgeView()) 114 - ->setIcon($badge->getIcon()) 115 - ->setHeader($badge->getName()) 116 - ->setSubhead($badge->getFlavor()) 117 - ->setQuality($badge->getQuality()) 118 - ->setHref($badge->getViewURI()) 119 - ->addByLine($awarder_info) 120 - ->addByLine($awarded_date); 105 + $item = id(new PHUIBadgeView()) 106 + ->setIcon($badge->getIcon()) 107 + ->setHeader($badge->getName()) 108 + ->setSubhead($badge->getFlavor()) 109 + ->setQuality($badge->getQuality()) 110 + ->setHref($badge->getViewURI()) 111 + ->addByLine($awarder_info) 112 + ->addByLine($awarded_date); 121 113 122 - $flex->addItem($item); 123 - } 114 + $flex->addItem($item); 124 115 } 125 116 } else { 126 117 $flex = id(new PHUIInfoView()) ··· 128 119 ->appendChild(pht('User has not been awarded any badges.')); 129 120 } 130 121 131 - return $flex; 122 + return array( 123 + $flex, 124 + $pager, 125 + ); 132 126 } 133 127 }