@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

at upstream/main 116 lines 3.1 kB view raw
1<?php 2 3final class NuanceSourceViewController 4 extends NuanceSourceController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $this->getViewer(); 8 9 $source = id(new NuanceSourceQuery()) 10 ->setViewer($viewer) 11 ->withIDs(array($request->getURIData('id'))) 12 ->executeOne(); 13 if (!$source) { 14 return new Aphront404Response(); 15 } 16 17 $source_id = $source->getID(); 18 19 $header = $this->buildHeaderView($source); 20 $curtain = $this->buildCurtain($source); 21 $properties = $this->buildPropertyView($source); 22 23 $title = $source->getName(); 24 25 $routing_list = id(new PHUIPropertyListView()) 26 ->addProperty( 27 pht('Default Queue'), 28 $viewer->renderHandle($source->getDefaultQueuePHID())); 29 30 $crumbs = $this->buildApplicationCrumbs(); 31 $crumbs->addTextCrumb(pht('Sources'), $this->getApplicationURI('source/')); 32 $crumbs->addTextCrumb($title); 33 $crumbs->setBorder(true); 34 35 $timeline = $this->buildTransactionTimeline( 36 $source, 37 new NuanceSourceTransactionQuery()); 38 $timeline->setShouldTerminate(true); 39 40 $view = id(new PHUITwoColumnView()) 41 ->setHeader($header) 42 ->setCurtain($curtain) 43 ->addPropertySection(pht('Details'), $properties) 44 ->addPropertySection(pht('Routing'), $routing_list) 45 ->setMainColumn($timeline); 46 47 return $this->newPage() 48 ->setTitle($title) 49 ->setCrumbs($crumbs) 50 ->appendChild($view); 51 } 52 53 private function buildHeaderView(NuanceSource $source) { 54 $viewer = $this->getViewer(); 55 56 $header = id(new PHUIHeaderView()) 57 ->setUser($viewer) 58 ->setHeader($source->getName()) 59 ->setPolicyObject($source); 60 61 return $header; 62 } 63 64 private function buildCurtain(NuanceSource $source) { 65 $viewer = $this->getViewer(); 66 $id = $source->getID(); 67 68 $actions = id(new PhabricatorActionListView()) 69 ->setUser($viewer); 70 71 $can_edit = PhabricatorPolicyFilter::hasCapability( 72 $viewer, 73 $source, 74 PhabricatorPolicyCapability::CAN_EDIT); 75 76 $curtain = $this->newCurtainView($source); 77 78 $curtain->addAction( 79 id(new PhabricatorActionView()) 80 ->setName(pht('Edit Source')) 81 ->setIcon('fa-pencil') 82 ->setHref($this->getApplicationURI("source/edit/{$id}/")) 83 ->setDisabled(!$can_edit) 84 ->setWorkflow(!$can_edit)); 85 86 $request = $this->getRequest(); 87 $definition = $source->getDefinition(); 88 89 $definition 90 ->setViewer($viewer) 91 ->setSource($source); 92 93 $source_actions = $definition->getSourceViewActions($request); 94 foreach ($source_actions as $source_action) { 95 $curtain->addAction($source_action); 96 } 97 98 return $curtain; 99 } 100 101 private function buildPropertyView( 102 NuanceSource $source) { 103 $viewer = $this->getViewer(); 104 105 $properties = id(new PHUIPropertyListView()) 106 ->setViewer($viewer); 107 108 $definition = $source->getDefinition(); 109 110 $properties->addProperty( 111 pht('Source Type'), 112 $definition->getName()); 113 114 return $properties; 115 } 116}