@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<?php
2
3final class PhabricatorDaemonBulkJobViewController
4 extends PhabricatorDaemonBulkJobController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $this->getViewer();
8
9 $job = id(new PhabricatorWorkerBulkJobQuery())
10 ->setViewer($viewer)
11 ->withIDs(array($request->getURIData('id')))
12 ->executeOne();
13 if (!$job) {
14 return new Aphront404Response();
15 }
16
17 $title = pht('Bulk Job %d', $job->getID());
18
19 $crumbs = $this->buildApplicationCrumbs();
20 $crumbs->addTextCrumb($title);
21 $crumbs->setBorder(true);
22
23 $properties = $this->renderProperties($job);
24 $curtain = $this->buildCurtainView($job);
25
26 $box = id(new PHUIObjectBoxView())
27 ->setHeaderText(pht('Details'))
28 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
29 ->addPropertyList($properties);
30
31 $timeline = $this->buildTransactionTimeline(
32 $job,
33 new PhabricatorWorkerBulkJobTransactionQuery());
34 $timeline->setShouldTerminate(true);
35
36 $header = id(new PHUIHeaderView())
37 ->setHeader($title)
38 ->setHeaderIcon('fa-hourglass');
39
40 $view = id(new PHUITwoColumnView())
41 ->setHeader($header)
42 ->setCurtain($curtain)
43 ->setMainColumn(array(
44 $box,
45 $timeline,
46 ));
47
48 return $this->newPage()
49 ->setTitle($title)
50 ->setCrumbs($crumbs)
51 ->appendChild($view);
52 }
53
54 private function renderProperties(PhabricatorWorkerBulkJob $job) {
55 $viewer = $this->getViewer();
56
57 $view = id(new PHUIPropertyListView())
58 ->setUser($viewer)
59 ->setObject($job);
60
61 $view->addProperty(
62 pht('Author'),
63 $viewer->renderHandle($job->getAuthorPHID()));
64
65 $view->addProperty(pht('Status'), $job->getStatusName());
66
67 return $view;
68 }
69
70 private function buildCurtainView(PhabricatorWorkerBulkJob $job) {
71 $viewer = $this->getViewer();
72 $curtain = $this->newCurtainView($job);
73
74 foreach ($job->getCurtainActions($viewer) as $action) {
75 $curtain->addAction($action);
76 }
77
78 return $curtain;
79 }
80
81}