Remove all "FileHasObject" edge reads and writes
[phabricator.git] / src / applications / harbormaster / controller / HarbormasterUnitMessageViewController.php
blob7111db654f8a80b2b6b4e7d714eda75737183abb
1 <?php
3 final class HarbormasterUnitMessageViewController
4 extends HarbormasterController {
6 public function shouldAllowPublic() {
7 return true;
10 public function handleRequest(AphrontRequest $request) {
11 $viewer = $this->getViewer();
13 $message_id = $request->getURIData('id');
15 $message = id(new HarbormasterBuildUnitMessageQuery())
16 ->setViewer($viewer)
17 ->withIDs(array($message_id))
18 ->executeOne();
19 if (!$message) {
20 return new Aphront404Response();
23 $build_target = id(new HarbormasterBuildTargetQuery())
24 ->setViewer($viewer)
25 ->withPHIDs(array($message->getBuildTargetPHID()))
26 ->executeOne();
27 if (!$build_target) {
28 return new Aphront404Response();
31 $build = $build_target->getBuild();
32 $buildable = $build->getBuildable();
33 $buildable_id = $buildable->getID();
35 $id = $message->getID();
36 $display_name = $message->getUnitMessageDisplayName();
38 $status = $message->getResult();
39 $status_icon = HarbormasterUnitStatus::getUnitStatusIcon($status);
40 $status_color = HarbormasterUnitStatus::getUnitStatusColor($status);
41 $status_label = HarbormasterUnitStatus::getUnitStatusLabel($status);
43 $header = id(new PHUIHeaderView())
44 ->setHeader($display_name)
45 ->setStatus($status_icon, $status_color, $status_label);
47 $properties = $this->buildPropertyListView($message);
48 $curtain = $this->buildCurtainView($message, $build);
50 $unit = id(new PHUIObjectBoxView())
51 ->setHeaderText(pht('TEST RESULT'))
52 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
53 ->addPropertyList($properties);
55 $crumbs = $this->buildApplicationCrumbs();
56 $this->addBuildableCrumb($crumbs, $buildable);
58 $crumbs->addTextCrumb(
59 pht('Unit Tests'),
60 "/harbormaster/unit/{$buildable_id}/");
62 $crumbs->addTextCrumb(pht('Unit %d', $id));
63 $crumbs->setBorder(true);
65 $title = array(
66 $display_name,
67 $buildable->getMonogram(),
70 $view = id(new PHUITwoColumnView())
71 ->setHeader($header)
72 ->setCurtain($curtain)
73 ->setMainColumn(array(
74 $unit,
75 ));
77 return $this->newPage()
78 ->setTitle($title)
79 ->setCrumbs($crumbs)
80 ->appendChild($view);
83 private function buildPropertyListView(
84 HarbormasterBuildUnitMessage $message) {
85 $viewer = $this->getViewer();
87 $view = id(new PHUIPropertyListView())
88 ->setUser($viewer);
90 $view->addProperty(
91 pht('Run At'),
92 phabricator_datetime($message->getDateCreated(), $viewer));
94 $details = $message->newUnitMessageDetailsView($viewer);
96 $view->addSectionHeader(
97 pht('Details'),
98 PHUIPropertyListView::ICON_TESTPLAN);
99 $view->addTextContent($details);
101 return $view;
104 private function buildCurtainView(
105 HarbormasterBuildUnitMessage $message,
106 HarbormasterBuild $build) {
107 $viewer = $this->getViewer();
109 $curtain = $this->newCurtainView($build);
111 $curtain->addAction(
112 id(new PhabricatorActionView())
113 ->setName(pht('View Build'))
114 ->setHref($build->getURI())
115 ->setIcon('fa-wrench'));
117 return $curtain;