[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class HarbormasterBuildableSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Harbormaster Buildables'); 8 } 9 10 public function getApplicationClassName() { 11 return 'PhabricatorHarbormasterApplication'; 12 } 13 14 public function buildSavedQueryFromRequest(AphrontRequest $request) { 15 $saved = new PhabricatorSavedQuery(); 16 17 $revisions = $this->readPHIDsFromRequest( 18 $request, 19 'revisions', 20 array( 21 DifferentialRevisionPHIDType::TYPECONST, 22 )); 23 24 $repositories = $this->readPHIDsFromRequest( 25 $request, 26 'repositories', 27 array( 28 PhabricatorRepositoryRepositoryPHIDType::TYPECONST, 29 )); 30 31 $container_phids = array_merge($revisions, $repositories); 32 $saved->setParameter('containerPHIDs', $container_phids); 33 34 $commits = $this->readPHIDsFromRequest( 35 $request, 36 'commits', 37 array( 38 PhabricatorRepositoryCommitPHIDType::TYPECONST, 39 )); 40 41 $diffs = $this->readListFromRequest($request, 'diffs'); 42 if ($diffs) { 43 $diffs = id(new DifferentialDiffQuery()) 44 ->setViewer($this->requireViewer()) 45 ->withIDs($diffs) 46 ->execute(); 47 $diffs = mpull($diffs, 'getPHID', 'getPHID'); 48 } 49 50 $buildable_phids = array_merge($commits, $diffs); 51 $saved->setParameter('buildablePHIDs', $buildable_phids); 52 53 $saved->setParameter( 54 'manual', 55 $this->readBoolFromRequest($request, 'manual')); 56 57 return $saved; 58 } 59 60 public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { 61 $query = id(new HarbormasterBuildableQuery()) 62 ->needContainerHandles(true) 63 ->needBuildableHandles(true); 64 65 $container_phids = $saved->getParameter('containerPHIDs', array()); 66 if ($container_phids) { 67 $query->withContainerPHIDs($container_phids); 68 } 69 70 $buildable_phids = $saved->getParameter('buildablePHIDs', array()); 71 72 if ($buildable_phids) { 73 $query->withBuildablePHIDs($buildable_phids); 74 } 75 76 $manual = $saved->getParameter('manual'); 77 if ($manual !== null) { 78 $query->withManualBuildables($manual); 79 } 80 81 return $query; 82 } 83 84 public function buildSearchForm( 85 AphrontFormView $form, 86 PhabricatorSavedQuery $saved_query) { 87 88 $container_phids = $saved_query->getParameter('containerPHIDs', array()); 89 $buildable_phids = $saved_query->getParameter('buildablePHIDs', array()); 90 91 $all_phids = array_merge($container_phids, $buildable_phids); 92 93 $revision_names = array(); 94 $diff_names = array(); 95 $repository_names = array(); 96 $commit_names = array(); 97 98 if ($all_phids) { 99 $objects = id(new PhabricatorObjectQuery()) 100 ->setViewer($this->requireViewer()) 101 ->withPHIDs($all_phids) 102 ->execute(); 103 104 foreach ($all_phids as $phid) { 105 $object = idx($objects, $phid); 106 if (!$object) { 107 continue; 108 } 109 110 if ($object instanceof DifferentialRevision) { 111 $revision_names[] = 'D'.$object->getID(); 112 } else if ($object instanceof DifferentialDiff) { 113 $diff_names[] = $object->getID(); 114 } else if ($object instanceof PhabricatorRepository) { 115 $repository_names[] = 'r'.$object->getCallsign(); 116 } else if ($object instanceof PhabricatorRepositoryCommit) { 117 $repository = $object->getRepository(); 118 $commit_names[] = $repository->formatCommitName( 119 $object->getCommitIdentifier()); 120 } 121 } 122 } 123 124 $form 125 ->appendChild( 126 id(new AphrontFormTextControl()) 127 ->setLabel(pht('Differential Revisions')) 128 ->setName('revisions') 129 ->setValue(implode(', ', $revision_names))) 130 ->appendChild( 131 id(new AphrontFormTextControl()) 132 ->setLabel(pht('Differential Diffs')) 133 ->setName('diffs') 134 ->setValue(implode(', ', $diff_names))) 135 ->appendChild( 136 id(new AphrontFormTextControl()) 137 ->setLabel(pht('Repositories')) 138 ->setName('repositories') 139 ->setValue(implode(', ', $repository_names))) 140 ->appendChild( 141 id(new AphrontFormTextControl()) 142 ->setLabel(pht('Commits')) 143 ->setName('commits') 144 ->setValue(implode(', ', $commit_names))) 145 ->appendChild( 146 id(new AphrontFormSelectControl()) 147 ->setLabel(pht('Origin')) 148 ->setName('manual') 149 ->setValue($this->getBoolFromQuery($saved_query, 'manual')) 150 ->setOptions( 151 array( 152 '' => pht('(All Origins)'), 153 'true' => pht('Manual Buildables'), 154 'false' => pht('Automatic Buildables'), 155 ))); 156 } 157 158 protected function getURI($path) { 159 return '/harbormaster/'.$path; 160 } 161 162 public function getBuiltinQueryNames() { 163 return array( 164 'all' => pht('All Buildables'), 165 ); 166 } 167 168 public function buildSavedQueryFromBuiltin($query_key) { 169 $query = $this->newSavedQuery(); 170 $query->setQueryKey($query_key); 171 172 switch ($query_key) { 173 case 'all': 174 return $query; 175 } 176 177 return parent::buildSavedQueryFromBuiltin($query_key); 178 } 179 180 protected function renderResultList( 181 array $buildables, 182 PhabricatorSavedQuery $query, 183 array $handles) { 184 assert_instances_of($buildables, 'HarbormasterBuildable'); 185 186 $viewer = $this->requireViewer(); 187 188 $list = new PHUIObjectItemListView(); 189 foreach ($buildables as $buildable) { 190 $id = $buildable->getID(); 191 192 $item = id(new PHUIObjectItemView()) 193 ->setHeader(pht('Buildable %d', $buildable->getID())); 194 if ($buildable->getContainerHandle() !== null) { 195 $item->addAttribute($buildable->getContainerHandle()->getName()); 196 } 197 if ($buildable->getBuildableHandle() !== null) { 198 $item->addAttribute($buildable->getBuildableHandle()->getFullName()); 199 } 200 201 if ($id) { 202 $item->setHref("/B{$id}"); 203 } 204 205 if ($buildable->getIsManualBuildable()) { 206 $item->addIcon('fa-wrench grey', pht('Manual')); 207 } 208 209 $item->setBarColor(HarbormasterBuildable::getBuildableStatusColor( 210 $buildable->getBuildableStatus())); 211 $item->addByline(HarbormasterBuildable::getBuildableStatusName( 212 $buildable->getBuildableStatus())); 213 214 $list->addItem($item); 215 216 } 217 218 return $list; 219 } 220 221 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |