@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 PhabricatorWorkerBulkJobSearchEngine
4 extends PhabricatorApplicationSearchEngine {
5
6 public function getResultTypeDescription() {
7 return pht('Daemon Bulk Jobs');
8 }
9
10 public function getApplicationClassName() {
11 return PhabricatorDaemonsApplication::class;
12 }
13
14 public function newQuery() {
15 return id(new PhabricatorWorkerBulkJobQuery());
16 }
17
18 public function canUseInPanelContext() {
19 return false;
20 }
21
22 protected function buildQueryFromParameters(array $map) {
23 $query = $this->newQuery();
24
25 if ($map['authorPHIDs']) {
26 $query->withAuthorPHIDs($map['authorPHIDs']);
27 }
28
29 if ($map['status']) {
30 $query->withStatuses(array($map['status']));
31 }
32
33 return $query;
34 }
35
36 protected function buildCustomSearchFields() {
37 return array(
38 id(new PhabricatorUsersSearchField())
39 ->setLabel(pht('Authors'))
40 ->setKey('authorPHIDs')
41 ->setAliases(array('author', 'authors')),
42 id(new PhabricatorSearchSelectField())
43 ->setKey('status')
44 ->setLabel(pht('Status'))
45 ->setOptions(array(
46 '' => pht('All'),
47 PhabricatorWorkerBulkJob::STATUS_CONFIRM => pht('Confirming'),
48 PhabricatorWorkerBulkJob::STATUS_WAITING => pht('Waiting'),
49 PhabricatorWorkerBulkJob::STATUS_RUNNING => pht('Running'),
50 PhabricatorWorkerBulkJob::STATUS_COMPLETE => pht('Complete'),
51 )),
52 );
53 }
54
55 protected function getURI($path) {
56 return '/daemon/bulk/'.$path;
57 }
58
59 protected function getBuiltinQueryNames() {
60 $names = array();
61
62 if ($this->requireViewer()->isLoggedIn()) {
63 $names['authored'] = pht('Authored Jobs');
64 }
65
66 $names['all'] = pht('All Jobs');
67
68 return $names;
69 }
70
71 public function buildSavedQueryFromBuiltin($query_key) {
72
73 $query = $this->newSavedQuery();
74 $query->setQueryKey($query_key);
75
76 switch ($query_key) {
77 case 'all':
78 return $query;
79 case 'authored':
80 return $query->setParameter(
81 'authorPHIDs',
82 array($this->requireViewer()->getPHID()));
83 }
84
85 return parent::buildSavedQueryFromBuiltin($query_key);
86 }
87
88 /**
89 * @param array<PhabricatorWorkerBulkJob> $jobs
90 * @param PhabricatorSavedQuery $query
91 * @param array<PhabricatorObjectHandle> $handles
92 */
93 protected function renderResultList(
94 array $jobs,
95 PhabricatorSavedQuery $query,
96 array $handles) {
97 assert_instances_of($jobs, PhabricatorWorkerBulkJob::class);
98
99 $viewer = $this->requireViewer();
100
101 $list = id(new PHUIObjectItemListView())
102 ->setUser($viewer);
103 foreach ($jobs as $job) {
104 $size = pht('%s Bulk Task(s)', new PhutilNumber($job->getSize()));
105
106 $item = id(new PHUIObjectItemView())
107 ->setObjectName(pht('Bulk Job %d', $job->getID()))
108 ->setHeader($job->getJobName())
109 ->addAttribute(phabricator_datetime($job->getDateCreated(), $viewer))
110 ->setHref($job->getManageURI())
111 ->addIcon($job->getStatusIcon(), $job->getStatusName())
112 ->addIcon('none', $size);
113
114 $list->addItem($item);
115 }
116
117 return id(new PhabricatorApplicationSearchResultView())
118 ->setContent($list);
119 }
120}