Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
12256 views
1
<?php
2
3
final class PhabricatorOwnersPackageSearchEngine
4
extends PhabricatorApplicationSearchEngine {
5
6
public function getResultTypeDescription() {
7
return pht('Owners Packages');
8
}
9
10
public function getApplicationClassName() {
11
return 'PhabricatorOwnersApplication';
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
protected function renderResultList(
125
array $packages,
126
PhabricatorSavedQuery $query,
127
array $handles) {
128
assert_instances_of($packages, 'PhabricatorOwnersPackage');
129
130
$viewer = $this->requireViewer();
131
132
$list = id(new PHUIObjectItemListView())
133
->setUser($viewer);
134
foreach ($packages as $package) {
135
$id = $package->getID();
136
137
$item = id(new PHUIObjectItemView())
138
->setObject($package)
139
->setObjectName($package->getMonogram())
140
->setHeader($package->getName())
141
->setHref($package->getURI());
142
143
if ($package->isArchived()) {
144
$item->setDisabled(true);
145
}
146
147
$list->addItem($item);
148
}
149
150
$result = new PhabricatorApplicationSearchResultView();
151
$result->setObjectList($list);
152
$result->setNoDataString(pht('No packages found.'));
153
154
return $result;
155
156
}
157
158
protected function getNewUserBody() {
159
$create_button = id(new PHUIButtonView())
160
->setTag('a')
161
->setText(pht('Create a Package'))
162
->setHref('/owners/edit/')
163
->setColor(PHUIButtonView::GREEN);
164
165
$icon = $this->getApplication()->getIcon();
166
$app_name = $this->getApplication()->getName();
167
$view = id(new PHUIBigInfoView())
168
->setIcon($icon)
169
->setTitle(pht('Welcome to %s', $app_name))
170
->setDescription(
171
pht(
172
'Group sections of a codebase into packages for re-use in other '.
173
'applications, like Herald rules.'))
174
->addAction($create_button);
175
176
return $view;
177
}
178
179
}
180
181