diff --git a/src/applications/search/controller/PhabricatorSearchController.php b/src/applications/search/controller/PhabricatorSearchController.php index cc05e9c5f4..d6fbf6356b 100644 --- a/src/applications/search/controller/PhabricatorSearchController.php +++ b/src/applications/search/controller/PhabricatorSearchController.php @@ -1,122 +1,115 @@ queryKey = idx($data, 'queryKey'); - } - - public function processRequest() { - $request = $this->getRequest(); - $viewer = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); if ($request->getStr('jump') != 'no') { $pref_jump = PhabricatorUserPreferences::PREFERENCE_SEARCHBAR_JUMP; if ($viewer->loadPreferences($pref_jump, 1)) { $response = PhabricatorJumpNavHandler::getJumpResponse( $viewer, $request->getStr('query')); if ($response) { return $response; } } } $engine = new PhabricatorSearchApplicationSearchEngine(); $engine->setViewer($viewer); // If we're coming from primary search, do some special handling to // interpret the scope selector and query. if ($request->getBool('search:primary')) { // If there's no query, just take the user to advanced search. if (!strlen($request->getStr('query'))) { $advanced_uri = '/search/query/advanced/'; return id(new AphrontRedirectResponse())->setURI($advanced_uri); } // First, load or construct a template for the search by examining // the current search scope. $scope = $request->getStr('search:scope'); $saved = null; if ($scope == self::SCOPE_CURRENT_APPLICATION) { $application = id(new PhabricatorApplicationQuery()) ->setViewer($viewer) ->withClasses(array($request->getStr('search:application'))) ->executeOne(); if ($application) { $types = $application->getApplicationSearchDocumentTypes(); if ($types) { $saved = id(new PhabricatorSavedQuery()) ->setEngineClassName(get_class($engine)) ->setParameter('types', $types) ->setParameter('statuses', array('open')); } } } if (!$saved && !$engine->isBuiltinQuery($scope)) { $saved = id(new PhabricatorSavedQueryQuery()) ->setViewer($viewer) ->withQueryKeys(array($scope)) ->executeOne(); } if (!$saved) { if (!$engine->isBuiltinQuery($scope)) { $scope = 'all'; } $saved = $engine->buildSavedQueryFromBuiltin($scope); } // Add the user's query, then save this as a new saved query and send // the user to the results page. $saved->setParameter('query', $request->getStr('query')); $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); try { $saved->setID(null)->save(); } catch (AphrontDuplicateKeyQueryException $ex) { // Ignore, this is just a repeated search. } unset($unguarded); $query_key = $saved->getQueryKey(); $results_uri = $engine->getQueryResultsPageURI($query_key).'#R'; return id(new AphrontRedirectResponse())->setURI($results_uri); } $controller = id(new PhabricatorApplicationSearchController()) - ->setQueryKey($this->queryKey) + ->setQueryKey($request->getURIData('queryKey')) ->setSearchEngine($engine) ->setNavigation($this->buildSideNavView()); return $this->delegateToController($controller); } public function buildSideNavView($for_app = false) { - $viewer = $this->getRequest()->getUser(); + $viewer = $this->getViewer(); $nav = new AphrontSideNavFilterView(); $nav->setBaseURI(new PhutilURI($this->getApplicationURI())); id(new PhabricatorSearchApplicationSearchEngine()) ->setViewer($viewer) ->addNavigationItems($nav->getMenu()); $nav->selectFilter(null); return $nav; } } diff --git a/src/applications/search/controller/PhabricatorSearchDeleteController.php b/src/applications/search/controller/PhabricatorSearchDeleteController.php index d743fb39ba..f72c283519 100644 --- a/src/applications/search/controller/PhabricatorSearchDeleteController.php +++ b/src/applications/search/controller/PhabricatorSearchDeleteController.php @@ -1,96 +1,87 @@ queryKey = idx($data, 'queryKey'); - $this->engineClass = idx($data, 'engine'); - } - - public function processRequest() { - $request = $this->getRequest(); - $user = $request->getUser(); - - $key = $this->queryKey; + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); + $key = $request->getURIData('queryKey'); + $engine_class = $request->getURIData('engine'); $base_class = 'PhabricatorApplicationSearchEngine'; - if (!is_subclass_of($this->engineClass, $base_class)) { + if (!is_subclass_of($engine_class, $base_class)) { return new Aphront400Response(); } - $engine = newv($this->engineClass, array()); - $engine->setViewer($user); + $engine = newv($engine_class, array()); + $engine->setViewer($viewer); $named_query = id(new PhabricatorNamedQueryQuery()) - ->setViewer($user) - ->withEngineClassNames(array($this->engineClass)) + ->setViewer($viewer) + ->withEngineClassNames(array($engine_class)) ->withQueryKeys(array($key)) - ->withUserPHIDs(array($user->getPHID())) + ->withUserPHIDs(array($viewer->getPHID())) ->executeOne(); if (!$named_query && $engine->isBuiltinQuery($key)) { $named_query = $engine->getBuiltinQuery($key); } if (!$named_query) { return new Aphront404Response(); } $builtin = null; if ($engine->isBuiltinQuery($key)) { $builtin = $engine->getBuiltinQuery($key); } $return_uri = $engine->getQueryManagementURI(); if ($request->isDialogFormPost()) { if ($named_query->getIsBuiltin()) { $named_query->setIsDisabled((int)(!$named_query->getIsDisabled())); $named_query->save(); } else { $named_query->delete(); } return id(new AphrontRedirectResponse())->setURI($return_uri); } if ($named_query->getIsBuiltin()) { if ($named_query->getIsDisabled()) { $title = pht('Enable Query?'); $desc = pht( 'Enable the built-in query "%s"? It will appear in your menu again.', $builtin->getQueryName()); $button = pht('Enable Query'); } else { $title = pht('Disable Query?'); $desc = pht( 'This built-in query can not be deleted, but you can disable it so '. 'it does not appear in your query menu. You can enable it again '. 'later. Disable built-in query "%s"?', $builtin->getQueryName()); $button = pht('Disable Query'); } } else { $title = pht('Really Delete Query?'); $desc = pht( 'Really delete the query "%s"? You can not undo this. Remember '. 'all the great times you had filtering results together?', $named_query->getQueryName()); $button = pht('Delete Query'); } $dialog = id(new AphrontDialogView()) - ->setUser($user) + ->setUser($viewer) ->setTitle($title) ->appendChild($desc) ->addCancelButton($return_uri) ->addSubmitButton($button); return id(new AphrontDialogResponse())->setDialog($dialog); } } diff --git a/src/applications/search/controller/PhabricatorSearchEditController.php b/src/applications/search/controller/PhabricatorSearchEditController.php index 3f089c5edf..da89919611 100644 --- a/src/applications/search/controller/PhabricatorSearchEditController.php +++ b/src/applications/search/controller/PhabricatorSearchEditController.php @@ -1,105 +1,98 @@ queryKey = idx($data, 'queryKey'); - } - - public function processRequest() { - $request = $this->getRequest(); - $user = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); $saved_query = id(new PhabricatorSavedQueryQuery()) - ->setViewer($user) - ->withQueryKeys(array($this->queryKey)) + ->setViewer($viewer) + ->withQueryKeys(array($request->getURIData('queryKey'))) ->executeOne(); if (!$saved_query) { return new Aphront404Response(); } - $engine = $saved_query->newEngine()->setViewer($user); + $engine = $saved_query->newEngine()->setViewer($viewer); $complete_uri = $engine->getQueryManagementURI(); $cancel_uri = $complete_uri; $named_query = id(new PhabricatorNamedQueryQuery()) - ->setViewer($user) + ->setViewer($viewer) ->withQueryKeys(array($saved_query->getQueryKey())) - ->withUserPHIDs(array($user->getPHID())) + ->withUserPHIDs(array($viewer->getPHID())) ->executeOne(); if (!$named_query) { $named_query = id(new PhabricatorNamedQuery()) - ->setUserPHID($user->getPHID()) + ->setUserPHID($viewer->getPHID()) ->setQueryKey($saved_query->getQueryKey()) ->setEngineClassName($saved_query->getEngineClassName()); // If we haven't saved the query yet, this is a "Save..." operation, so // take the user back to the query if they cancel instead of back to the // management interface. $cancel_uri = $engine->getQueryResultsPageURI( $saved_query->getQueryKey()); } $e_name = true; $errors = array(); if ($request->isFormPost()) { $named_query->setQueryName($request->getStr('name')); if (!strlen($named_query->getQueryName())) { $e_name = pht('Required'); $errors[] = pht('You must name the query.'); } else { $e_name = null; } if (!$errors) { $named_query->save(); return id(new AphrontRedirectResponse())->setURI($complete_uri); } } $form = id(new AphrontFormView()) - ->setUser($user); + ->setUser($viewer); $form->appendChild( id(new AphrontFormTextControl()) ->setName('name') ->setLabel(pht('Query Name')) ->setValue($named_query->getQueryName()) ->setError($e_name)); $form->appendChild( id(new AphrontFormSubmitControl()) ->setValue(pht('Save Query')) ->addCancelButton($cancel_uri)); if ($named_query->getID()) { $title = pht('Edit Saved Query'); } else { $title = pht('Save Query'); } $form_box = id(new PHUIObjectBoxView()) ->setHeaderText($title) ->setFormErrors($errors) ->setForm($form); $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb($title); return $this->buildApplicationPage( array( $crumbs, $form_box, ), array( 'title' => $title, )); } } diff --git a/src/applications/search/controller/PhabricatorSearchHovercardController.php b/src/applications/search/controller/PhabricatorSearchHovercardController.php index a05a2392b5..98d9aca68b 100644 --- a/src/applications/search/controller/PhabricatorSearchHovercardController.php +++ b/src/applications/search/controller/PhabricatorSearchHovercardController.php @@ -1,75 +1,74 @@ getViewer(); - $phids = $request->getArr('phids'); $handles = id(new PhabricatorHandleQuery()) ->setViewer($viewer) ->withPHIDs($phids) ->execute(); $objects = id(new PhabricatorObjectQuery()) ->setViewer($viewer) ->withPHIDs($phids) ->execute(); $cards = array(); foreach ($phids as $phid) { $handle = $handles[$phid]; $object = $objects[$phid]; $hovercard = id(new PhabricatorHovercardView()) ->setUser($viewer) ->setObjectHandle($handle); if ($object) { $hovercard->setObject($object); } // Send it to the other side of the world, thanks to PhutilEventEngine $event = new PhabricatorEvent( PhabricatorEventType::TYPE_UI_DIDRENDERHOVERCARD, array( 'hovercard' => $hovercard, 'handle' => $handle, 'object' => $object, )); $event->setUser($viewer); PhutilEventEngine::dispatchEvent($event); $cards[$phid] = $hovercard; } // Browser-friendly for non-Ajax requests if (!$request->isAjax()) { foreach ($cards as $key => $hovercard) { $cards[$key] = phutil_tag('div', array( 'class' => 'ml', ), $hovercard); } return $this->buildApplicationPage( $cards, array( 'device' => false, )); } else { return id(new AphrontAjaxResponse())->setContent( array( 'cards' => $cards, )); } } } diff --git a/src/applications/search/controller/PhabricatorSearchOrderController.php b/src/applications/search/controller/PhabricatorSearchOrderController.php index 244caf83b0..e5f7887473 100644 --- a/src/applications/search/controller/PhabricatorSearchOrderController.php +++ b/src/applications/search/controller/PhabricatorSearchOrderController.php @@ -1,41 +1,35 @@ engineClass = idx($data, 'engine'); - } - - public function processRequest() { - $request = $this->getRequest(); - $user = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); + $engine_class = $request->getURIData('engine'); $request->validateCSRF(); $base_class = 'PhabricatorApplicationSearchEngine'; - if (!is_subclass_of($this->engineClass, $base_class)) { + if (!is_subclass_of($engine_class, $base_class)) { return new Aphront400Response(); } - $engine = newv($this->engineClass, array()); - $engine->setViewer($user); + $engine = newv($engine_class, array()); + $engine->setViewer($viewer); $queries = $engine->loadAllNamedQueries(); $queries = mpull($queries, null, 'getQueryKey'); $order = $request->getStrList('order'); $queries = array_select_keys($queries, $order) + $queries; $sequence = 1; foreach ($queries as $query) { $query->setSequence($sequence++); $query->save(); } return id(new AphrontAjaxResponse()); } }