@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 upstream/main 186 lines 5.1 kB view raw
1<?php 2 3final class DiffusionPullLogSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Pull Logs'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorDiffusionApplication::class; 12 } 13 14 public function newQuery() { 15 return new PhabricatorRepositoryPullEventQuery(); 16 } 17 18 protected function buildQueryFromParameters(array $map) { 19 $query = $this->newQuery(); 20 21 if ($map['repositoryPHIDs']) { 22 $query->withRepositoryPHIDs($map['repositoryPHIDs']); 23 } 24 25 if ($map['pullerPHIDs']) { 26 $query->withPullerPHIDs($map['pullerPHIDs']); 27 } 28 29 if ($map['createdStart'] || $map['createdEnd']) { 30 $query->withEpochBetween( 31 $map['createdStart'], 32 $map['createdEnd']); 33 } 34 35 return $query; 36 } 37 38 protected function buildCustomSearchFields() { 39 return array( 40 id(new PhabricatorSearchDatasourceField()) 41 ->setDatasource(new DiffusionRepositoryDatasource()) 42 ->setKey('repositoryPHIDs') 43 ->setAliases(array('repository', 'repositories', 'repositoryPHID')) 44 ->setLabel(pht('Repositories')) 45 ->setDescription( 46 pht('Search for pull logs for specific repositories.')), 47 id(new PhabricatorUsersSearchField()) 48 ->setKey('pullerPHIDs') 49 ->setAliases(array('puller', 'pullers', 'pullerPHID')) 50 ->setLabel(pht('Pullers')) 51 ->setDescription( 52 pht('Search for pull logs by specific users.')), 53 id(new PhabricatorSearchDateField()) 54 ->setLabel(pht('Created After')) 55 ->setKey('createdStart'), 56 id(new PhabricatorSearchDateField()) 57 ->setLabel(pht('Created Before')) 58 ->setKey('createdEnd'), 59 ); 60 } 61 62 protected function newExportFields() { 63 $viewer = $this->requireViewer(); 64 65 $fields = array( 66 id(new PhabricatorPHIDExportField()) 67 ->setKey('repositoryPHID') 68 ->setLabel(pht('Repository PHID')), 69 id(new PhabricatorStringExportField()) 70 ->setKey('repository') 71 ->setLabel(pht('Repository')), 72 id(new PhabricatorPHIDExportField()) 73 ->setKey('pullerPHID') 74 ->setLabel(pht('Puller PHID')), 75 id(new PhabricatorStringExportField()) 76 ->setKey('puller') 77 ->setLabel(pht('Puller')), 78 id(new PhabricatorStringExportField()) 79 ->setKey('protocol') 80 ->setLabel(pht('Protocol')), 81 id(new PhabricatorStringExportField()) 82 ->setKey('result') 83 ->setLabel(pht('Result')), 84 id(new PhabricatorIntExportField()) 85 ->setKey('code') 86 ->setLabel(pht('Code')), 87 id(new PhabricatorEpochExportField()) 88 ->setKey('date') 89 ->setLabel(pht('Date')), 90 ); 91 92 if ($viewer->getIsAdmin()) { 93 $fields[] = id(new PhabricatorStringExportField()) 94 ->setKey('remoteAddress') 95 ->setLabel(pht('Remote Address')); 96 } 97 98 return $fields; 99 } 100 101 protected function newExportData(array $events) { 102 $viewer = $this->requireViewer(); 103 104 $phids = array(); 105 foreach ($events as $event) { 106 if ($event->getPullerPHID()) { 107 $phids[] = $event->getPullerPHID(); 108 } 109 } 110 $handles = $viewer->loadHandles($phids); 111 112 $export = array(); 113 foreach ($events as $event) { 114 $repository = $event->getRepository(); 115 if ($repository) { 116 $repository_phid = $repository->getPHID(); 117 $repository_name = $repository->getDisplayName(); 118 } else { 119 $repository_phid = null; 120 $repository_name = null; 121 } 122 123 $puller_phid = $event->getPullerPHID(); 124 if ($puller_phid) { 125 $puller_name = $handles[$puller_phid]->getName(); 126 } else { 127 $puller_name = null; 128 } 129 130 $map = array( 131 'repositoryPHID' => $repository_phid, 132 'repository' => $repository_name, 133 'pullerPHID' => $puller_phid, 134 'puller' => $puller_name, 135 'protocol' => $event->getRemoteProtocol(), 136 'result' => $event->getResultType(), 137 'code' => $event->getResultCode(), 138 'date' => $event->getEpoch(), 139 ); 140 141 if ($viewer->getIsAdmin()) { 142 $map['remoteAddress'] = $event->getRemoteAddress(); 143 } 144 145 $export[] = $map; 146 } 147 148 return $export; 149 } 150 151 protected function getURI($path) { 152 return '/diffusion/pulllog/'.$path; 153 } 154 155 protected function getBuiltinQueryNames() { 156 return array( 157 'all' => pht('All Pull Logs'), 158 ); 159 } 160 161 public function buildSavedQueryFromBuiltin($query_key) { 162 $query = $this->newSavedQuery(); 163 $query->setQueryKey($query_key); 164 165 switch ($query_key) { 166 case 'all': 167 return $query; 168 } 169 170 return parent::buildSavedQueryFromBuiltin($query_key); 171 } 172 173 protected function renderResultList( 174 array $logs, 175 PhabricatorSavedQuery $query, 176 array $handles) { 177 178 $table = id(new DiffusionPullLogListView()) 179 ->setViewer($this->requireViewer()) 180 ->setLogs($logs); 181 182 return id(new PhabricatorApplicationSearchResultView()) 183 ->setTable($table); 184 } 185 186}