[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/search/controller/ -> PhabricatorSearchController.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1