@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
at upstream/main 92 lines 2.2 kB view raw
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}