Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/badges/query/PhabricatorBadgesSearchEngine.php
12256 views
1
<?php
2
3
final class PhabricatorBadgesSearchEngine
4
extends PhabricatorApplicationSearchEngine {
5
6
public function getResultTypeDescription() {
7
return pht('Badges');
8
}
9
10
public function getApplicationClassName() {
11
return 'PhabricatorBadgesApplication';
12
}
13
14
public function newQuery() {
15
return new PhabricatorBadgesQuery();
16
}
17
18
protected function buildCustomSearchFields() {
19
return array(
20
id(new PhabricatorSearchTextField())
21
->setLabel(pht('Name Contains'))
22
->setKey('name')
23
->setDescription(pht('Search for badges by name substring.')),
24
id(new PhabricatorSearchCheckboxesField())
25
->setKey('qualities')
26
->setLabel(pht('Quality'))
27
->setEnableForConduit(false)
28
->setOptions(PhabricatorBadgesQuality::getDropdownQualityMap()),
29
id(new PhabricatorSearchCheckboxesField())
30
->setKey('statuses')
31
->setLabel(pht('Status'))
32
->setOptions(
33
id(new PhabricatorBadgesBadge())
34
->getStatusNameMap()),
35
);
36
}
37
38
protected function buildQueryFromParameters(array $map) {
39
$query = $this->newQuery();
40
41
if ($map['statuses']) {
42
$query->withStatuses($map['statuses']);
43
}
44
45
if ($map['qualities']) {
46
$query->withQualities($map['qualities']);
47
}
48
49
if ($map['name'] !== null) {
50
$query->withNameNgrams($map['name']);
51
}
52
53
return $query;
54
}
55
56
protected function getURI($path) {
57
return '/badges/'.$path;
58
}
59
60
protected function getBuiltinQueryNames() {
61
$names = array();
62
63
$names['open'] = pht('Active Badges');
64
$names['all'] = pht('All Badges');
65
66
return $names;
67
}
68
69
public function buildSavedQueryFromBuiltin($query_key) {
70
$query = $this->newSavedQuery();
71
$query->setQueryKey($query_key);
72
73
switch ($query_key) {
74
case 'all':
75
return $query;
76
case 'open':
77
return $query->setParameter(
78
'statuses',
79
array(
80
PhabricatorBadgesBadge::STATUS_ACTIVE,
81
));
82
}
83
84
return parent::buildSavedQueryFromBuiltin($query_key);
85
}
86
87
protected function getRequiredHandlePHIDsForResultList(
88
array $badges,
89
PhabricatorSavedQuery $query) {
90
91
$phids = array();
92
93
return $phids;
94
}
95
96
protected function renderResultList(
97
array $badges,
98
PhabricatorSavedQuery $query,
99
array $handles) {
100
assert_instances_of($badges, 'PhabricatorBadgesBadge');
101
102
$viewer = $this->requireViewer();
103
104
$list = id(new PHUIObjectItemListView());
105
foreach ($badges as $badge) {
106
$quality_name = PhabricatorBadgesQuality::getQualityName(
107
$badge->getQuality());
108
109
$mini_badge = id(new PHUIBadgeMiniView())
110
->setHeader($badge->getName())
111
->setIcon($badge->getIcon())
112
->setQuality($badge->getQuality());
113
114
$item = id(new PHUIObjectItemView())
115
->setHeader($badge->getName())
116
->setBadge($mini_badge)
117
->setHref('/badges/view/'.$badge->getID().'/')
118
->addAttribute($quality_name)
119
->addAttribute($badge->getFlavor());
120
121
if ($badge->isArchived()) {
122
$item->setDisabled(true);
123
$item->addIcon('fa-ban', pht('Archived'));
124
}
125
126
$list->addItem($item);
127
}
128
129
$result = new PhabricatorApplicationSearchResultView();
130
$result->setObjectList($list);
131
$result->setNoDataString(pht('No badges found.'));
132
133
return $result;
134
135
}
136
137
protected function getNewUserBody() {
138
$create_button = id(new PHUIButtonView())
139
->setTag('a')
140
->setText(pht('Create a Badge'))
141
->setHref('/badges/create/')
142
->setColor(PHUIButtonView::GREEN);
143
144
$icon = $this->getApplication()->getIcon();
145
$app_name = $this->getApplication()->getName();
146
$view = id(new PHUIBigInfoView())
147
->setIcon($icon)
148
->setTitle(pht('Welcome to %s', $app_name))
149
->setDescription(
150
pht('Badges let you award and distinguish special users '.
151
'throughout your install.'))
152
->addAction($create_button);
153
154
return $view;
155
}
156
157
}
158
159