@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 return $query;
30 }
31
32 protected function buildCustomSearchFields() {
33 return array(
34 id(new PhabricatorUsersSearchField())
35 ->setLabel(pht('Authors'))
36 ->setKey('authorPHIDs')
37 ->setAliases(array('author', 'authors')),
38 );
39 }
40
41 protected function getURI($path) {
42 return '/daemon/bulk/'.$path;
43 }
44
45 protected function getBuiltinQueryNames() {
46 $names = array();
47
48 if ($this->requireViewer()->isLoggedIn()) {
49 $names['authored'] = pht('Authored Jobs');
50 }
51
52 $names['all'] = pht('All Jobs');
53
54 return $names;
55 }
56
57 public function buildSavedQueryFromBuiltin($query_key) {
58
59 $query = $this->newSavedQuery();
60 $query->setQueryKey($query_key);
61
62 switch ($query_key) {
63 case 'all':
64 return $query;
65 case 'authored':
66 return $query->setParameter(
67 'authorPHIDs',
68 array($this->requireViewer()->getPHID()));
69 }
70
71 return parent::buildSavedQueryFromBuiltin($query_key);
72 }
73
74 /**
75 * @param array<PhabricatorWorkerBulkJob> $jobs
76 * @param PhabricatorSavedQuery $query
77 * @param array<PhabricatorObjectHandle> $handles
78 */
79 protected function renderResultList(
80 array $jobs,
81 PhabricatorSavedQuery $query,
82 array $handles) {
83 assert_instances_of($jobs, PhabricatorWorkerBulkJob::class);
84
85 $viewer = $this->requireViewer();
86
87 $list = id(new PHUIObjectItemListView())
88 ->setUser($viewer);
89 foreach ($jobs as $job) {
90 $size = pht('%s Bulk Task(s)', new PhutilNumber($job->getSize()));
91
92 $item = id(new PHUIObjectItemView())
93 ->setObjectName(pht('Bulk Job %d', $job->getID()))
94 ->setHeader($job->getJobName())
95 ->addAttribute(phabricator_datetime($job->getDateCreated(), $viewer))
96 ->setHref($job->getManageURI())
97 ->addIcon($job->getStatusIcon(), $job->getStatusName())
98 ->addIcon('none', $size);
99
100 $list->addItem($item);
101 }
102
103 return id(new PhabricatorApplicationSearchResultView())
104 ->setContent($list);
105 }
106}