@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 120 lines 3.2 kB view raw
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}