Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/people/controller/PhabricatorPeopleProfileBadgesController.php
12262 views
1
<?php
2
3
final class PhabricatorPeopleProfileBadgesController
4
extends PhabricatorPeopleProfileController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $this->getViewer();
8
$id = $request->getURIData('id');
9
10
$user = id(new PhabricatorPeopleQuery())
11
->setViewer($viewer)
12
->withIDs(array($id))
13
->needProfileImage(true)
14
->executeOne();
15
if (!$user) {
16
return new Aphront404Response();
17
}
18
19
$class = 'PhabricatorBadgesApplication';
20
if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
21
return new Aphront404Response();
22
}
23
24
$this->setUser($user);
25
$title = array(pht('Badges'), $user->getUsername());
26
$header = $this->buildProfileHeader();
27
$badges = $this->buildBadgesView($user);
28
29
$crumbs = $this->buildApplicationCrumbs();
30
$crumbs->addTextCrumb(pht('Badges'));
31
$crumbs->setBorder(true);
32
33
$nav = $this->newNavigation(
34
$user,
35
PhabricatorPeopleProfileMenuEngine::ITEM_BADGES);
36
37
$button = id(new PHUIButtonView())
38
->setTag('a')
39
->setIcon('fa-plus')
40
->setText(pht('Award Badge'))
41
->setWorkflow(true)
42
->setHref('/badges/award/'.$user->getID().'/');
43
44
$header->addActionLink($button);
45
46
$view = id(new PHUITwoColumnView())
47
->setHeader($header)
48
->addClass('project-view-home')
49
->addClass('project-view-people-home')
50
->setFooter(
51
array(
52
$badges,
53
));
54
55
return $this->newPage()
56
->setTitle($title)
57
->setCrumbs($crumbs)
58
->setNavigation($nav)
59
->appendChild($view);
60
}
61
62
private function buildBadgesView(PhabricatorUser $user) {
63
$viewer = $this->getViewer();
64
$request = $this->getRequest();
65
66
$pager = id(new AphrontCursorPagerView())
67
->readFromRequest($request);
68
69
$query = id(new PhabricatorBadgesAwardQuery())
70
->setViewer($viewer)
71
->withRecipientPHIDs(array($user->getPHID()))
72
->withBadgeStatuses(array(PhabricatorBadgesBadge::STATUS_ACTIVE));
73
74
$awards = $query->executeWithCursorPager($pager);
75
76
if ($awards) {
77
$flex = new PHUIBadgeBoxView();
78
foreach ($awards as $award) {
79
$badge = $award->getBadge();
80
81
$awarder_info = array();
82
83
$awarder_phid = $award->getAwarderPHID();
84
$awarder_handle = $viewer->renderHandle($awarder_phid);
85
$awarded_date = phabricator_date($award->getDateCreated(), $viewer);
86
87
$awarder_info = pht(
88
'Awarded by %s',
89
$awarder_handle->render());
90
91
$item = id(new PHUIBadgeView())
92
->setIcon($badge->getIcon())
93
->setHeader($badge->getName())
94
->setSubhead($badge->getFlavor())
95
->setQuality($badge->getQuality())
96
->setHref($badge->getViewURI())
97
->addByLine($awarder_info)
98
->addByLine($awarded_date);
99
100
$flex->addItem($item);
101
}
102
} else {
103
$flex = id(new PHUIInfoView())
104
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
105
->appendChild(pht('User has not been awarded any badges.'));
106
}
107
108
return array(
109
$flex,
110
$pager,
111
);
112
}
113
}
114
115