Path: blob/master/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
12256 views
<?php12final class PhabricatorOwnersPackageSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Owners Packages');7}89public function getApplicationClassName() {10return 'PhabricatorOwnersApplication';11}1213public function newQuery() {14return new PhabricatorOwnersPackageQuery();15}1617protected function buildCustomSearchFields() {18return array(19id(new PhabricatorSearchDatasourceField())20->setLabel(pht('Authority'))21->setKey('authorityPHIDs')22->setAliases(array('authority', 'authorities'))23->setConduitKey('owners')24->setDescription(25pht('Search for packages with specific owners.'))26->setDatasource(new PhabricatorProjectOrUserDatasource()),27id(new PhabricatorSearchTextField())28->setLabel(pht('Name Contains'))29->setKey('name')30->setDescription(pht('Search for packages by name substrings.')),31id(new PhabricatorSearchDatasourceField())32->setLabel(pht('Repositories'))33->setKey('repositoryPHIDs')34->setConduitKey('repositories')35->setAliases(array('repository', 'repositories'))36->setDescription(37pht('Search for packages by included repositories.'))38->setDatasource(new DiffusionRepositoryDatasource()),39id(new PhabricatorSearchStringListField())40->setLabel(pht('Paths'))41->setKey('paths')42->setAliases(array('path'))43->setDescription(44pht('Search for packages affecting specific paths.')),45id(new PhabricatorSearchCheckboxesField())46->setKey('statuses')47->setLabel(pht('Status'))48->setDescription(49pht('Search for active or archived packages.'))50->setOptions(51id(new PhabricatorOwnersPackage())52->getStatusNameMap()),53);54}5556protected function buildQueryFromParameters(array $map) {57$query = $this->newQuery();5859if ($map['authorityPHIDs']) {60$query->withAuthorityPHIDs($map['authorityPHIDs']);61}6263if ($map['repositoryPHIDs']) {64$query->withRepositoryPHIDs($map['repositoryPHIDs']);65}6667if ($map['paths']) {68$query->withPaths($map['paths']);69}7071if ($map['statuses']) {72$query->withStatuses($map['statuses']);73}7475if (strlen($map['name'])) {76$query->withNameNgrams($map['name']);77}7879return $query;80}8182protected function getURI($path) {83return '/owners/'.$path;84}8586protected function getBuiltinQueryNames() {87$names = array();8889if ($this->requireViewer()->isLoggedIn()) {90$names['authority'] = pht('Owned');91}9293$names += array(94'active' => pht('Active Packages'),95'all' => pht('All Packages'),96);9798return $names;99}100101public function buildSavedQueryFromBuiltin($query_key) {102$query = $this->newSavedQuery();103$query->setQueryKey($query_key);104105switch ($query_key) {106case 'all':107return $query;108case 'active':109return $query->setParameter(110'statuses',111array(112PhabricatorOwnersPackage::STATUS_ACTIVE,113));114case 'authority':115return $query->setParameter(116'authorityPHIDs',117array($this->requireViewer()->getPHID()));118}119120return parent::buildSavedQueryFromBuiltin($query_key);121}122123protected function renderResultList(124array $packages,125PhabricatorSavedQuery $query,126array $handles) {127assert_instances_of($packages, 'PhabricatorOwnersPackage');128129$viewer = $this->requireViewer();130131$list = id(new PHUIObjectItemListView())132->setUser($viewer);133foreach ($packages as $package) {134$id = $package->getID();135136$item = id(new PHUIObjectItemView())137->setObject($package)138->setObjectName($package->getMonogram())139->setHeader($package->getName())140->setHref($package->getURI());141142if ($package->isArchived()) {143$item->setDisabled(true);144}145146$list->addItem($item);147}148149$result = new PhabricatorApplicationSearchResultView();150$result->setObjectList($list);151$result->setNoDataString(pht('No packages found.'));152153return $result;154155}156157protected function getNewUserBody() {158$create_button = id(new PHUIButtonView())159->setTag('a')160->setText(pht('Create a Package'))161->setHref('/owners/edit/')162->setColor(PHUIButtonView::GREEN);163164$icon = $this->getApplication()->getIcon();165$app_name = $this->getApplication()->getName();166$view = id(new PHUIBigInfoView())167->setIcon($icon)168->setTitle(pht('Welcome to %s', $app_name))169->setDescription(170pht(171'Group sections of a codebase into packages for re-use in other '.172'applications, like Herald rules.'))173->addAction($create_button);174175return $view;176}177178}179180181