@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class DrydockResourceSearchEngine
4 extends PhabricatorApplicationSearchEngine {
5
6 private $blueprint;
7
8 public function setBlueprint(DrydockBlueprint $blueprint) {
9 $this->blueprint = $blueprint;
10 return $this;
11 }
12
13 public function getBlueprint() {
14 return $this->blueprint;
15 }
16
17 public function getResultTypeDescription() {
18 return pht('Drydock Resources');
19 }
20
21 public function getApplicationClassName() {
22 return PhabricatorDrydockApplication::class;
23 }
24
25 public function newQuery() {
26 $query = new DrydockResourceQuery();
27
28 $blueprint = $this->getBlueprint();
29 if ($blueprint) {
30 $query->withBlueprintPHIDs(array($blueprint->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['blueprintPHIDs']) {
44 $query->withBlueprintPHIDs($map['blueprintPHIDs']);
45 }
46
47 return $query;
48 }
49
50 protected function buildCustomSearchFields() {
51 return array(
52 id(new PhabricatorSearchCheckboxesField())
53 ->setLabel(pht('Statuses'))
54 ->setKey('statuses')
55 ->setDescription(pht('Search for objects with given statuses.'))
56 ->setOptions(DrydockResourceStatus::getStatusMap()),
57 id(new PhabricatorPHIDsSearchField())
58 ->setLabel(pht('Blueprints'))
59 ->setKey('blueprintPHIDs')
60 ->setAliases(array('blueprintPHID', 'blueprints', 'blueprint'))
61 ->setDescription(
62 pht('Search for resources generated by particular blueprints.')),
63 );
64 }
65
66 protected function getURI($path) {
67 $blueprint = $this->getBlueprint();
68 if ($blueprint) {
69 $id = $blueprint->getID();
70 return "/drydock/blueprint/{$id}/resources/".$path;
71 } else {
72 return '/drydock/resource/'.$path;
73 }
74 }
75
76 protected function getBuiltinQueryNames() {
77 return array(
78 'active' => pht('Active Resources'),
79 'all' => pht('All Resources'),
80 );
81 }
82
83 public function buildSavedQueryFromBuiltin($query_key) {
84 $query = $this->newSavedQuery();
85 $query->setQueryKey($query_key);
86
87 switch ($query_key) {
88 case 'active':
89 return $query->setParameter(
90 'statuses',
91 array(
92 DrydockResourceStatus::STATUS_PENDING,
93 DrydockResourceStatus::STATUS_ACTIVE,
94 ));
95 case 'all':
96 return $query;
97 }
98
99 return parent::buildSavedQueryFromBuiltin($query_key);
100 }
101
102 protected function renderResultList(
103 array $resources,
104 PhabricatorSavedQuery $query,
105 array $handles) {
106
107 $list = id(new DrydockResourceListView())
108 ->setUser($this->requireViewer())
109 ->setResources($resources);
110
111 $result = new PhabricatorApplicationSearchResultView();
112 $result->setTable($list);
113
114 return $result;
115 }
116
117}