@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 recaptime-dev/main 114 lines 3.0 kB view raw
1<?php 2 3final class DrydockRepositoryOperationViewController 4 extends DrydockRepositoryOperationController { 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 $operation = id(new DrydockRepositoryOperationQuery()) 15 ->setViewer($viewer) 16 ->withIDs(array($id)) 17 ->executeOne(); 18 if (!$operation) { 19 return new Aphront404Response(); 20 } 21 22 $id = $operation->getID(); 23 $title = pht('Repository Operation %d', $id); 24 25 $header = id(new PHUIHeaderView()) 26 ->setHeader($title) 27 ->setUser($viewer) 28 ->setPolicyObject($operation) 29 ->setHeaderIcon('fa-fighter-jet'); 30 31 $state = $operation->getOperationState(); 32 $icon = DrydockRepositoryOperation::getOperationStateIcon($state); 33 $name = DrydockRepositoryOperation::getOperationStateName($state); 34 $header->setStatus($icon, null, $name); 35 36 $curtain = $this->buildCurtain($operation); 37 $properties = $this->buildPropertyListView($operation); 38 39 $crumbs = $this->buildApplicationCrumbs(); 40 $crumbs->addTextCrumb( 41 pht('Operations'), 42 $this->getApplicationURI('operation/')); 43 $crumbs->addTextCrumb($title); 44 $crumbs->setBorder(true); 45 46 $status_view = id(new DrydockRepositoryOperationStatusView()) 47 ->setUser($viewer) 48 ->setOperation($operation); 49 50 $log_query = id(new DrydockLogQuery()) 51 ->withOperationPHIDs(array($operation->getPHID())); 52 53 $log_table = $this->buildLogTable($log_query) 54 ->setHideOperations(true); 55 56 $logs = $this->buildLogBox( 57 $log_table, 58 $this->getApplicationURI("operation/{$id}/logs/query/all/")); 59 60 $view = id(new PHUITwoColumnView()) 61 ->setHeader($header) 62 ->setCurtain($curtain) 63 ->addPropertySection(pht('Properties'), $properties) 64 ->setMainColumn( 65 array( 66 $status_view, 67 $logs, 68 )); 69 70 return $this->newPage() 71 ->setTitle($title) 72 ->setCrumbs($crumbs) 73 ->appendChild( 74 array( 75 $view, 76 )); 77 } 78 79 private function buildCurtain(DrydockRepositoryOperation $operation) { 80 $viewer = $this->getViewer(); 81 $id = $operation->getID(); 82 83 $curtain = $this->newCurtainView($operation); 84 85 return $curtain; 86 } 87 88 private function buildPropertyListView( 89 DrydockRepositoryOperation $operation) { 90 91 $viewer = $this->getViewer(); 92 93 $view = new PHUIPropertyListView(); 94 $view->addProperty( 95 pht('Repository'), 96 $viewer->renderHandle($operation->getRepositoryPHID())); 97 98 $view->addProperty( 99 pht('Object'), 100 $viewer->renderHandle($operation->getObjectPHID())); 101 102 $lease_phid = $operation->getWorkingCopyLeasePHID(); 103 if ($lease_phid) { 104 $lease_display = $viewer->renderHandle($lease_phid); 105 } else { 106 $lease_display = phutil_tag('em', array(), pht('None')); 107 } 108 109 $view->addProperty(pht('Working Copy'), $lease_display); 110 111 return $view; 112 } 113 114}