@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 184 lines 5.1 kB view raw
1<?php 2 3final class PhabricatorOwnersPackageSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Owners Packages'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorOwnersApplication::class; 12 } 13 14 public function newQuery() { 15 return new PhabricatorOwnersPackageQuery(); 16 } 17 18 protected function buildCustomSearchFields() { 19 return array( 20 id(new PhabricatorSearchDatasourceField()) 21 ->setLabel(pht('Authority')) 22 ->setKey('authorityPHIDs') 23 ->setAliases(array('authority', 'authorities')) 24 ->setConduitKey('owners') 25 ->setDescription( 26 pht('Search for packages with specific owners.')) 27 ->setDatasource(new PhabricatorProjectOrUserDatasource()), 28 id(new PhabricatorSearchTextField()) 29 ->setLabel(pht('Name Contains')) 30 ->setKey('name') 31 ->setDescription(pht('Search for packages by name substrings.')), 32 id(new PhabricatorSearchDatasourceField()) 33 ->setLabel(pht('Repositories')) 34 ->setKey('repositoryPHIDs') 35 ->setConduitKey('repositories') 36 ->setAliases(array('repository', 'repositories')) 37 ->setDescription( 38 pht('Search for packages by included repositories.')) 39 ->setDatasource(new DiffusionRepositoryDatasource()), 40 id(new PhabricatorSearchStringListField()) 41 ->setLabel(pht('Paths')) 42 ->setKey('paths') 43 ->setAliases(array('path')) 44 ->setDescription( 45 pht('Search for packages affecting specific paths.')), 46 id(new PhabricatorSearchCheckboxesField()) 47 ->setKey('statuses') 48 ->setLabel(pht('Status')) 49 ->setDescription( 50 pht('Search for active or archived packages.')) 51 ->setOptions( 52 id(new PhabricatorOwnersPackage()) 53 ->getStatusNameMap()), 54 ); 55 } 56 57 protected function buildQueryFromParameters(array $map) { 58 $query = $this->newQuery(); 59 60 if ($map['authorityPHIDs']) { 61 $query->withAuthorityPHIDs($map['authorityPHIDs']); 62 } 63 64 if ($map['repositoryPHIDs']) { 65 $query->withRepositoryPHIDs($map['repositoryPHIDs']); 66 } 67 68 if ($map['paths']) { 69 $query->withPaths($map['paths']); 70 } 71 72 if ($map['statuses']) { 73 $query->withStatuses($map['statuses']); 74 } 75 76 if (strlen($map['name'])) { 77 $query->withNameNgrams($map['name']); 78 } 79 80 return $query; 81 } 82 83 protected function getURI($path) { 84 return '/owners/'.$path; 85 } 86 87 protected function getBuiltinQueryNames() { 88 $names = array(); 89 90 if ($this->requireViewer()->isLoggedIn()) { 91 $names['authority'] = pht('Owned'); 92 } 93 94 $names += array( 95 'active' => pht('Active Packages'), 96 'all' => pht('All Packages'), 97 ); 98 99 return $names; 100 } 101 102 public function buildSavedQueryFromBuiltin($query_key) { 103 $query = $this->newSavedQuery(); 104 $query->setQueryKey($query_key); 105 106 switch ($query_key) { 107 case 'all': 108 return $query; 109 case 'active': 110 return $query->setParameter( 111 'statuses', 112 array( 113 PhabricatorOwnersPackage::STATUS_ACTIVE, 114 )); 115 case 'authority': 116 return $query->setParameter( 117 'authorityPHIDs', 118 array($this->requireViewer()->getPHID())); 119 } 120 121 return parent::buildSavedQueryFromBuiltin($query_key); 122 } 123 124 /** 125 * @param array<PhabricatorOwnersPackage> $packages 126 * @param PhabricatorSavedQuery $query 127 * @param array<PhabricatorObjectHandle> $handles 128 */ 129 protected function renderResultList( 130 array $packages, 131 PhabricatorSavedQuery $query, 132 array $handles) { 133 assert_instances_of($packages, PhabricatorOwnersPackage::class); 134 135 $viewer = $this->requireViewer(); 136 137 $list = id(new PHUIObjectItemListView()) 138 ->setUser($viewer); 139 foreach ($packages as $package) { 140 $id = $package->getID(); 141 142 $item = id(new PHUIObjectItemView()) 143 ->setObject($package) 144 ->setObjectName($package->getMonogram()) 145 ->setHeader($package->getName()) 146 ->setHref($package->getURI()); 147 148 if ($package->isArchived()) { 149 $item->setDisabled(true); 150 } 151 152 $list->addItem($item); 153 } 154 155 $result = new PhabricatorApplicationSearchResultView(); 156 $result->setObjectList($list); 157 $result->setNoDataString(pht('No packages found.')); 158 159 return $result; 160 161 } 162 163 protected function getNewUserBody() { 164 $create_button = id(new PHUIButtonView()) 165 ->setTag('a') 166 ->setText(pht('Create a Package')) 167 ->setHref('/owners/edit/') 168 ->setColor(PHUIButtonView::GREEN); 169 170 $icon = $this->getApplication()->getIcon(); 171 $app_name = $this->getApplication()->getName(); 172 $view = id(new PHUIBigInfoView()) 173 ->setIcon($icon) 174 ->setTitle(pht('Welcome to %s', $app_name)) 175 ->setDescription( 176 pht( 177 'Group sections of a codebase into packages for re-use in other '. 178 'applications, like Herald rules.')) 179 ->addAction($create_button); 180 181 return $view; 182 } 183 184}