Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php
12242 views
1
<?php
2
3
final class PhabricatorDashboardPanelSearchEngine
4
extends PhabricatorApplicationSearchEngine {
5
6
public function getResultTypeDescription() {
7
return pht('Dashboard Panels');
8
}
9
10
public function getApplicationClassName() {
11
return 'PhabricatorDashboardApplication';
12
}
13
14
public function newQuery() {
15
return new PhabricatorDashboardPanelQuery();
16
}
17
18
public function canUseInPanelContext() {
19
return false;
20
}
21
22
protected function buildQueryFromParameters(array $map) {
23
$query = $this->newQuery();
24
if ($map['status']) {
25
switch ($map['status']) {
26
case 'active':
27
$query->withArchived(false);
28
break;
29
case 'archived':
30
$query->withArchived(true);
31
break;
32
default:
33
break;
34
}
35
}
36
37
if ($map['paneltype']) {
38
$query->withPanelTypes(array($map['paneltype']));
39
}
40
41
if ($map['authorPHIDs']) {
42
$query->withAuthorPHIDs($map['authorPHIDs']);
43
}
44
45
return $query;
46
}
47
48
protected function buildCustomSearchFields() {
49
50
return array(
51
id(new PhabricatorSearchDatasourceField())
52
->setLabel(pht('Authored By'))
53
->setKey('authorPHIDs')
54
->setDatasource(new PhabricatorPeopleUserFunctionDatasource()),
55
id(new PhabricatorSearchSelectField())
56
->setKey('status')
57
->setLabel(pht('Status'))
58
->setOptions(
59
id(new PhabricatorDashboardPanel())
60
->getStatuses()),
61
id(new PhabricatorSearchSelectField())
62
->setKey('paneltype')
63
->setLabel(pht('Panel Type'))
64
->setOptions(
65
id(new PhabricatorDashboardPanel())
66
->getPanelTypes()),
67
);
68
}
69
70
protected function getURI($path) {
71
return '/dashboard/panel/'.$path;
72
}
73
74
protected function getBuiltinQueryNames() {
75
$names = array();
76
77
if ($this->requireViewer()->isLoggedIn()) {
78
$names['authored'] = pht('Authored');
79
}
80
81
$names['active'] = pht('Active Panels');
82
$names['all'] = pht('All Panels');
83
84
return $names;
85
}
86
87
public function buildSavedQueryFromBuiltin($query_key) {
88
$query = $this->newSavedQuery();
89
$query->setQueryKey($query_key);
90
$viewer = $this->requireViewer();
91
92
switch ($query_key) {
93
case 'active':
94
return $query->setParameter('status', 'active');
95
case 'authored':
96
return $query->setParameter(
97
'authorPHIDs',
98
array(
99
$viewer->getPHID(),
100
));
101
case 'all':
102
return $query;
103
}
104
105
return parent::buildSavedQueryFromBuiltin($query_key);
106
}
107
108
protected function renderResultList(
109
array $panels,
110
PhabricatorSavedQuery $query,
111
array $handles) {
112
113
$viewer = $this->requireViewer();
114
115
$list = new PHUIObjectItemListView();
116
$list->setUser($viewer);
117
foreach ($panels as $panel) {
118
$item = id(new PHUIObjectItemView())
119
->setObjectName($panel->getMonogram())
120
->setHeader($panel->getName())
121
->setHref('/'.$panel->getMonogram())
122
->setObject($panel);
123
124
$impl = $panel->getImplementation();
125
if ($impl) {
126
$type_text = $impl->getPanelTypeName();
127
} else {
128
$type_text = nonempty($panel->getPanelType(), pht('Unknown Type'));
129
}
130
$item->addAttribute($type_text);
131
132
$properties = $panel->getProperties();
133
$class = idx($properties, 'class');
134
$item->addAttribute($class);
135
136
if ($panel->getIsArchived()) {
137
$item->setDisabled(true);
138
}
139
140
$list->addItem($item);
141
}
142
143
$result = new PhabricatorApplicationSearchResultView();
144
$result->setObjectList($list);
145
$result->setNoDataString(pht('No panels found.'));
146
147
return $result;
148
}
149
150
}
151
152