Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/badges/controller/PhabricatorBadgesViewController.php
12256 views
1
<?php
2
3
final class PhabricatorBadgesViewController
4
extends PhabricatorBadgesProfileController {
5
6
public function shouldAllowPublic() {
7
return true;
8
}
9
10
public function handleRequest(AphrontRequest $request) {
11
$viewer = $request->getViewer();
12
$id = $request->getURIData('id');
13
14
$badge = id(new PhabricatorBadgesQuery())
15
->setViewer($viewer)
16
->withIDs(array($id))
17
->executeOne();
18
if (!$badge) {
19
return new Aphront404Response();
20
}
21
22
$this->setBadge($badge);
23
24
$crumbs = $this->buildApplicationCrumbs();
25
$title = $badge->getName();
26
27
$header = $this->buildHeaderView();
28
$curtain = $this->buildCurtain($badge);
29
$details = $this->buildDetailsView($badge);
30
31
$timeline = $this->buildTransactionTimeline(
32
$badge,
33
new PhabricatorBadgesTransactionQuery());
34
35
$comment_view = id(new PhabricatorBadgesEditEngine())
36
->setViewer($viewer)
37
->buildEditEngineCommentView($badge);
38
39
$view = id(new PHUITwoColumnView())
40
->setHeader($header)
41
->setCurtain($curtain)
42
->setMainColumn(array(
43
$timeline,
44
$comment_view,
45
))
46
->addPropertySection(pht('Description'), $details);
47
48
$navigation = $this->buildSideNavView('view');
49
50
return $this->newPage()
51
->setTitle($title)
52
->setCrumbs($crumbs)
53
->setPageObjectPHIDs(array($badge->getPHID()))
54
->setNavigation($navigation)
55
->appendChild($view);
56
}
57
58
private function buildDetailsView(
59
PhabricatorBadgesBadge $badge) {
60
$viewer = $this->getViewer();
61
62
$view = id(new PHUIPropertyListView())
63
->setUser($viewer);
64
65
$description = $badge->getDescription();
66
if (strlen($description)) {
67
$view->addTextContent(
68
new PHUIRemarkupView($viewer, $description));
69
}
70
71
$badge = id(new PHUIBadgeView())
72
->setIcon($badge->getIcon())
73
->setHeader($badge->getName())
74
->setSubhead($badge->getFlavor())
75
->setQuality($badge->getQuality());
76
77
$view->addTextContent($badge);
78
79
return $view;
80
}
81
82
private function buildCurtain(PhabricatorBadgesBadge $badge) {
83
$viewer = $this->getViewer();
84
85
$can_edit = PhabricatorPolicyFilter::hasCapability(
86
$viewer,
87
$badge,
88
PhabricatorPolicyCapability::CAN_EDIT);
89
90
$id = $badge->getID();
91
$edit_uri = $this->getApplicationURI("/edit/{$id}/");
92
$archive_uri = $this->getApplicationURI("/archive/{$id}/");
93
94
$curtain = $this->newCurtainView($badge);
95
96
$curtain->addAction(
97
id(new PhabricatorActionView())
98
->setName(pht('Edit Badge'))
99
->setIcon('fa-pencil')
100
->setDisabled(!$can_edit)
101
->setHref($edit_uri));
102
103
if ($badge->isArchived()) {
104
$curtain->addAction(
105
id(new PhabricatorActionView())
106
->setName(pht('Activate Badge'))
107
->setIcon('fa-check')
108
->setDisabled(!$can_edit)
109
->setWorkflow($can_edit)
110
->setHref($archive_uri));
111
} else {
112
$curtain->addAction(
113
id(new PhabricatorActionView())
114
->setName(pht('Archive Badge'))
115
->setIcon('fa-ban')
116
->setDisabled(!$can_edit)
117
->setWorkflow($can_edit)
118
->setHref($archive_uri));
119
}
120
121
return $curtain;
122
}
123
124
}
125
126