Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diviner/query/DivinerAtomSearchEngine.php
12256 views
1
<?php
2
3
final class DivinerAtomSearchEngine extends PhabricatorApplicationSearchEngine {
4
5
public function getResultTypeDescription() {
6
return pht('Documentation Atoms');
7
}
8
9
public function getApplicationClassName() {
10
return 'PhabricatorDivinerApplication';
11
}
12
13
public function canUseInPanelContext() {
14
return false;
15
}
16
17
public function buildSavedQueryFromRequest(AphrontRequest $request) {
18
$saved = new PhabricatorSavedQuery();
19
20
$saved->setParameter(
21
'bookPHIDs',
22
$this->readPHIDsFromRequest($request, 'bookPHIDs'));
23
$saved->setParameter(
24
'repositoryPHIDs',
25
$this->readPHIDsFromRequest($request, 'repositoryPHIDs'));
26
$saved->setParameter('name', $request->getStr('name'));
27
$saved->setParameter(
28
'types',
29
$this->readListFromRequest($request, 'types'));
30
31
return $saved;
32
}
33
34
public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) {
35
$query = id(new DivinerAtomQuery());
36
37
$books = $saved->getParameter('bookPHIDs');
38
if ($books) {
39
$query->withBookPHIDs($books);
40
}
41
42
$repository_phids = $saved->getParameter('repositoryPHIDs');
43
if ($repository_phids) {
44
$query->withRepositoryPHIDs($repository_phids);
45
}
46
47
$name = $saved->getParameter('name');
48
if ($name) {
49
$query->withNameContains($name);
50
}
51
52
$types = $saved->getParameter('types');
53
if ($types) {
54
$query->withTypes($types);
55
}
56
57
return $query;
58
}
59
60
public function buildSearchForm(
61
AphrontFormView $form,
62
PhabricatorSavedQuery $saved) {
63
64
$form->appendChild(
65
id(new AphrontFormTextControl())
66
->setLabel(pht('Name Contains'))
67
->setName('name')
68
->setValue($saved->getParameter('name')));
69
70
$all_types = array();
71
foreach (DivinerAtom::getAllTypes() as $type) {
72
$all_types[$type] = DivinerAtom::getAtomTypeNameString($type);
73
}
74
asort($all_types);
75
76
$types = $saved->getParameter('types', array());
77
$types = array_fuse($types);
78
$type_control = id(new AphrontFormCheckboxControl())
79
->setLabel(pht('Types'));
80
foreach ($all_types as $type => $name) {
81
$type_control->addCheckbox(
82
'types[]',
83
$type,
84
$name,
85
isset($types[$type]));
86
}
87
$form->appendChild($type_control);
88
89
$form->appendControl(
90
id(new AphrontFormTokenizerControl())
91
->setDatasource(new DivinerBookDatasource())
92
->setName('bookPHIDs')
93
->setLabel(pht('Books'))
94
->setValue($saved->getParameter('bookPHIDs')));
95
96
$form->appendControl(
97
id(new AphrontFormTokenizerControl())
98
->setLabel(pht('Repositories'))
99
->setName('repositoryPHIDs')
100
->setDatasource(new DiffusionRepositoryDatasource())
101
->setValue($saved->getParameter('repositoryPHIDs')));
102
}
103
104
protected function getURI($path) {
105
return '/diviner/'.$path;
106
}
107
108
protected function getBuiltinQueryNames() {
109
return array(
110
'all' => pht('All Atoms'),
111
);
112
}
113
114
public function buildSavedQueryFromBuiltin($query_key) {
115
$query = $this->newSavedQuery();
116
$query->setQueryKey($query_key);
117
118
switch ($query_key) {
119
case 'all':
120
return $query;
121
}
122
123
return parent::buildSavedQueryFromBuiltin($query_key);
124
}
125
126
protected function renderResultList(
127
array $symbols,
128
PhabricatorSavedQuery $query,
129
array $handles) {
130
131
assert_instances_of($symbols, 'DivinerLiveSymbol');
132
133
$viewer = $this->requireViewer();
134
135
$list = id(new PHUIObjectItemListView())
136
->setUser($viewer);
137
138
foreach ($symbols as $symbol) {
139
$type = $symbol->getType();
140
$type_name = DivinerAtom::getAtomTypeNameString($type);
141
142
$item = id(new PHUIObjectItemView())
143
->setHeader($symbol->getTitle())
144
->setHref($symbol->getURI())
145
->addAttribute($symbol->getSummary())
146
->addIcon('none', $type_name);
147
148
$list->addItem($item);
149
}
150
151
$result = new PhabricatorApplicationSearchResultView();
152
$result->setObjectList($list);
153
$result->setNoDataString(pht('No books found.'));
154
155
return $result;
156
}
157
158
}
159
160