@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<?php
2
3final 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}