Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/drydock/query/DrydockLeaseSearchEngine.php
12256 views
1
<?php
2
3
final class DrydockLeaseSearchEngine
4
extends PhabricatorApplicationSearchEngine {
5
6
private $resource;
7
8
public function setResource($resource) {
9
$this->resource = $resource;
10
return $this;
11
}
12
13
public function getResource() {
14
return $this->resource;
15
}
16
17
public function getResultTypeDescription() {
18
return pht('Drydock Leases');
19
}
20
21
public function getApplicationClassName() {
22
return 'PhabricatorDrydockApplication';
23
}
24
25
public function newQuery() {
26
$query = new DrydockLeaseQuery();
27
28
$resource = $this->getResource();
29
if ($resource) {
30
$query->withResourcePHIDs(array($resource->getPHID()));
31
}
32
33
return $query;
34
}
35
36
protected function buildQueryFromParameters(array $map) {
37
$query = $this->newQuery();
38
39
if ($map['statuses']) {
40
$query->withStatuses($map['statuses']);
41
}
42
43
if ($map['ownerPHIDs']) {
44
$query->withOwnerPHIDs($map['ownerPHIDs']);
45
}
46
47
if ($map['resourcePHIDs']) {
48
$query->withResourcePHIDs($map['resourcePHIDs']);
49
}
50
51
return $query;
52
}
53
54
protected function buildCustomSearchFields() {
55
return array(
56
id(new PhabricatorSearchCheckboxesField())
57
->setLabel(pht('Statuses'))
58
->setKey('statuses')
59
->setOptions(DrydockLeaseStatus::getStatusMap()),
60
id(new PhabricatorPHIDsSearchField())
61
->setLabel(pht('Owners'))
62
->setKey('ownerPHIDs')
63
->setAliases(array('owner', 'owners', 'ownerPHID'))
64
->setDescription(pht('Search leases by owner.')),
65
id(new PhabricatorPHIDsSearchField())
66
->setLabel(pht('Resources'))
67
->setKey('resourcePHIDs')
68
->setAliases(array('resorucePHID', 'resource', 'resources'))
69
->setDescription(pht('Search leases by resource.')),
70
);
71
}
72
73
protected function getURI($path) {
74
$resource = $this->getResource();
75
if ($resource) {
76
$id = $resource->getID();
77
return "/drydock/resource/{$id}/leases/".$path;
78
} else {
79
return '/drydock/lease/'.$path;
80
}
81
}
82
83
protected function getBuiltinQueryNames() {
84
return array(
85
'active' => pht('Active Leases'),
86
'all' => pht('All Leases'),
87
);
88
}
89
90
public function buildSavedQueryFromBuiltin($query_key) {
91
$query = $this->newSavedQuery();
92
$query->setQueryKey($query_key);
93
94
switch ($query_key) {
95
case 'active':
96
return $query->setParameter(
97
'statuses',
98
array(
99
DrydockLeaseStatus::STATUS_PENDING,
100
DrydockLeaseStatus::STATUS_ACQUIRED,
101
DrydockLeaseStatus::STATUS_ACTIVE,
102
));
103
case 'all':
104
return $query;
105
}
106
107
return parent::buildSavedQueryFromBuiltin($query_key);
108
}
109
110
protected function renderResultList(
111
array $leases,
112
PhabricatorSavedQuery $saved,
113
array $handles) {
114
115
$list = id(new DrydockLeaseListView())
116
->setUser($this->requireViewer())
117
->setLeases($leases);
118
119
return id(new PhabricatorApplicationSearchResultView())
120
->setContent($list);
121
}
122
123
}
124
125