[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorSearchController 4 extends PhabricatorSearchBaseController { 5 6 private $queryKey; 7 8 public function shouldAllowPublic() { 9 return true; 10 } 11 12 public function willProcessRequest(array $data) { 13 $this->queryKey = idx($data, 'queryKey'); 14 } 15 16 public function processRequest() { 17 $request = $this->getRequest(); 18 $viewer = $request->getUser(); 19 20 if ($request->getStr('jump') != 'no') { 21 $pref_jump = PhabricatorUserPreferences::PREFERENCE_SEARCHBAR_JUMP; 22 if ($viewer->loadPreferences($pref_jump, 1)) { 23 $response = PhabricatorJumpNavHandler::getJumpResponse( 24 $viewer, 25 $request->getStr('query')); 26 if ($response) { 27 return $response; 28 } 29 } 30 } 31 32 $engine = new PhabricatorSearchApplicationSearchEngine(); 33 $engine->setViewer($viewer); 34 35 // NOTE: This is a little weird. If we're coming from primary search, we 36 // load the user's first search filter and overwrite the "query" part of 37 // it, then send them to that result page. This is sort of odd, but lets 38 // users choose a default query like "Open Tasks" in a reasonable way, 39 // with only this piece of somewhat-sketchy code. See discussion in T4365. 40 41 if ($request->getBool('search:primary')) { 42 $named_queries = $engine->loadEnabledNamedQueries(); 43 if ($named_queries) { 44 $named = head($named_queries); 45 46 $query_key = $named->getQueryKey(); 47 $saved = null; 48 if ($engine->isBuiltinQuery($query_key)) { 49 $saved = $engine->buildSavedQueryFromBuiltin($query_key); 50 } else { 51 $saved = id(new PhabricatorSavedQueryQuery()) 52 ->setViewer($viewer) 53 ->withQueryKeys(array($query_key)) 54 ->executeOne(); 55 } 56 57 if ($saved) { 58 $saved->setParameter('query', $request->getStr('query')); 59 $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); 60 try { 61 $saved->setID(null)->save(); 62 } catch (AphrontDuplicateKeyQueryException $ex) { 63 // Ignore, this is just a repeated search. 64 } 65 unset($unguarded); 66 67 $results_uri = $engine->getQueryResultsPageURI( 68 $saved->getQueryKey()).'#R'; 69 70 return id(new AphrontRedirectResponse())->setURI($results_uri); 71 } 72 } 73 } 74 75 $controller = id(new PhabricatorApplicationSearchController()) 76 ->setQueryKey($this->queryKey) 77 ->setSearchEngine($engine) 78 ->setNavigation($this->buildSideNavView()); 79 80 return $this->delegateToController($controller); 81 } 82 83 public function buildSideNavView($for_app = false) { 84 $viewer = $this->getRequest()->getUser(); 85 86 $nav = new AphrontSideNavFilterView(); 87 $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); 88 89 id(new PhabricatorSearchApplicationSearchEngine()) 90 ->setViewer($viewer) 91 ->addNavigationItems($nav->getMenu()); 92 93 $nav->selectFilter(null); 94 95 return $nav; 96 } 97 98 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |