@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 PhabricatorSearchDefaultController
4 extends PhabricatorSearchBaseController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $this->getViewer();
8 $engine_class = $request->getURIData('engine');
9
10 $base_class = PhabricatorApplicationSearchEngine::class;
11 if (!is_subclass_of($engine_class, $base_class)) {
12 return new Aphront400Response();
13 }
14
15 $engine = newv($engine_class, array());
16 $engine->setViewer($viewer);
17
18 $key = $request->getURIData('queryKey');
19
20 $named_query = id(new PhabricatorNamedQueryQuery())
21 ->setViewer($viewer)
22 ->withEngineClassNames(array($engine_class))
23 ->withQueryKeys(array($key))
24 ->withUserPHIDs(
25 array(
26 $viewer->getPHID(),
27 PhabricatorNamedQuery::SCOPE_GLOBAL,
28 ))
29 ->executeOne();
30
31 if (!$named_query && $engine->isBuiltinQuery($key)) {
32 $named_query = $engine->getBuiltinQuery($key);
33 }
34
35 if (!$named_query) {
36 return new Aphront404Response();
37 }
38
39 $return_uri = $engine->getQueryManagementURI();
40
41 $builtin = null;
42 if ($engine->isBuiltinQuery($key)) {
43 $builtin = $engine->getBuiltinQuery($key);
44 }
45
46 if ($request->isFormPost()) {
47 $config = id(new PhabricatorNamedQueryConfigQuery())
48 ->setViewer($viewer)
49 ->withEngineClassNames(array($engine_class))
50 ->withScopePHIDs(array($viewer->getPHID()))
51 ->executeOne();
52 if (!$config) {
53 $config = PhabricatorNamedQueryConfig::initializeNewQueryConfig()
54 ->setEngineClassName($engine_class)
55 ->setScopePHID($viewer->getPHID());
56 }
57
58 $config->setConfigProperty(
59 PhabricatorNamedQueryConfig::PROPERTY_PINNED,
60 $key);
61
62 $config->save();
63
64 return id(new AphrontRedirectResponse())->setURI($return_uri);
65 }
66
67 if ($named_query->getIsBuiltin()) {
68 $query_name = $builtin->getQueryName();
69 } else {
70 $query_name = $named_query->getQueryName();
71 }
72
73 $title = pht('Set Default Query');
74 $body = pht(
75 'This query will become your default query in the current application.');
76 $button = pht('Set Default Query');
77
78 return $this->newDialog()
79 ->setTitle($title)
80 ->appendChild($body)
81 ->addCancelButton($return_uri)
82 ->addSubmitButton($button);
83 }
84
85}