Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/nuance/controller/NuanceItemViewController.php
12256 views
1
<?php
2
3
final class NuanceItemViewController extends NuanceController {
4
5
public function handleRequest(AphrontRequest $request) {
6
$viewer = $this->getViewer();
7
$id = $request->getURIData('id');
8
9
$item = id(new NuanceItemQuery())
10
->setViewer($viewer)
11
->withIDs(array($id))
12
->executeOne();
13
if (!$item) {
14
return new Aphront404Response();
15
}
16
17
$title = pht('Item %d', $item->getID());
18
$name = $item->getDisplayName();
19
20
$crumbs = $this->buildApplicationCrumbs();
21
$crumbs->addTextCrumb(
22
pht('Items'),
23
$this->getApplicationURI('item/'));
24
$crumbs->addTextCrumb($title);
25
$crumbs->setBorder(true);
26
27
$curtain = $this->buildCurtain($item);
28
$content = $this->buildContent($item);
29
30
$timeline = $this->buildTransactionTimeline(
31
$item,
32
new NuanceItemTransactionQuery());
33
34
$main = array(
35
$content,
36
$timeline,
37
);
38
39
$header = id(new PHUIHeaderView())
40
->setHeader($name);
41
42
$view = id(new PHUITwoColumnView())
43
->setHeader($header)
44
->setCurtain($curtain)
45
->setMainColumn($main);
46
47
return $this->newPage()
48
->setTitle($title)
49
->setCrumbs($crumbs)
50
->appendChild($view);
51
}
52
53
private function buildCurtain(NuanceItem $item) {
54
$viewer = $this->getViewer();
55
$id = $item->getID();
56
57
$can_edit = PhabricatorPolicyFilter::hasCapability(
58
$viewer,
59
$item,
60
PhabricatorPolicyCapability::CAN_EDIT);
61
62
$curtain = $this->newCurtainView($item);
63
64
$curtain->addAction(
65
id(new PhabricatorActionView())
66
->setName(pht('Manage Item'))
67
->setIcon('fa-cogs')
68
->setHref($this->getApplicationURI("item/manage/{$id}/")));
69
70
$impl = $item->getImplementation();
71
$impl->setViewer($viewer);
72
73
foreach ($impl->getItemActions($item) as $action) {
74
$curtain->addAction($action);
75
}
76
77
foreach ($impl->getItemCurtainPanels($item) as $panel) {
78
$curtain->addPanel($panel);
79
}
80
81
return $curtain;
82
}
83
84
private function buildContent(NuanceItem $item) {
85
$viewer = $this->getViewer();
86
$impl = $item->getImplementation();
87
88
$impl->setViewer($viewer);
89
return $impl->buildItemView($item);
90
}
91
92
}
93
94