@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 119 lines 3.2 kB view raw
1<?php 2 3final class HarbormasterUnitMessageViewController 4 extends HarbormasterController { 5 6 public function shouldAllowPublic() { 7 return true; 8 } 9 10 public function handleRequest(AphrontRequest $request) { 11 $viewer = $this->getViewer(); 12 13 $message_id = $request->getURIData('id'); 14 15 $message = id(new HarbormasterBuildUnitMessageQuery()) 16 ->setViewer($viewer) 17 ->withIDs(array($message_id)) 18 ->executeOne(); 19 if (!$message) { 20 return new Aphront404Response(); 21 } 22 23 $build_target = id(new HarbormasterBuildTargetQuery()) 24 ->setViewer($viewer) 25 ->withPHIDs(array($message->getBuildTargetPHID())) 26 ->executeOne(); 27 if (!$build_target) { 28 return new Aphront404Response(); 29 } 30 31 $build = $build_target->getBuild(); 32 $buildable = $build->getBuildable(); 33 $buildable_id = $buildable->getID(); 34 35 $id = $message->getID(); 36 $display_name = $message->getUnitMessageDisplayName(); 37 38 $status = $message->getResult(); 39 $status_icon = HarbormasterUnitStatus::getUnitStatusIcon($status); 40 $status_color = HarbormasterUnitStatus::getUnitStatusColor($status); 41 $status_label = HarbormasterUnitStatus::getUnitStatusLabel($status); 42 43 $header = id(new PHUIHeaderView()) 44 ->setHeader($display_name) 45 ->setStatus($status_icon, $status_color, $status_label); 46 47 $properties = $this->buildPropertyListView($message); 48 $curtain = $this->buildCurtainView($message, $build); 49 50 $unit = id(new PHUIObjectBoxView()) 51 ->setHeaderText(pht('TEST RESULT')) 52 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 53 ->addPropertyList($properties); 54 55 $crumbs = $this->buildApplicationCrumbs(); 56 $this->addBuildableCrumb($crumbs, $buildable); 57 58 $crumbs->addTextCrumb( 59 pht('Unit Tests'), 60 "/harbormaster/unit/{$buildable_id}/"); 61 62 $crumbs->addTextCrumb(pht('Unit %d', $id)); 63 $crumbs->setBorder(true); 64 65 $title = array( 66 $display_name, 67 $buildable->getMonogram(), 68 ); 69 70 $view = id(new PHUITwoColumnView()) 71 ->setHeader($header) 72 ->setCurtain($curtain) 73 ->setMainColumn(array( 74 $unit, 75 )); 76 77 return $this->newPage() 78 ->setTitle($title) 79 ->setCrumbs($crumbs) 80 ->appendChild($view); 81 } 82 83 private function buildPropertyListView( 84 HarbormasterBuildUnitMessage $message) { 85 $viewer = $this->getViewer(); 86 87 $view = id(new PHUIPropertyListView()) 88 ->setUser($viewer); 89 90 $view->addProperty( 91 pht('Run At'), 92 phabricator_datetime($message->getDateCreated(), $viewer)); 93 94 $details = $message->newUnitMessageDetailsView($viewer); 95 96 $view->addSectionHeader( 97 pht('Details'), 98 PHUIPropertyListView::ICON_TESTPLAN); 99 $view->addTextContent($details); 100 101 return $view; 102 } 103 104 private function buildCurtainView( 105 HarbormasterBuildUnitMessage $message, 106 HarbormasterBuild $build) { 107 $viewer = $this->getViewer(); 108 109 $curtain = $this->newCurtainView($build); 110 111 $curtain->addAction( 112 id(new PhabricatorActionView()) 113 ->setName(pht('View Build')) 114 ->setHref($build->getURI()) 115 ->setIcon('fa-wrench')); 116 117 return $curtain; 118 } 119}