Differential D18426 Diff 44366 src/applications/search/controller/PhabricatorSearchEditController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/controller/PhabricatorSearchEditController.php
| <?php | <?php | ||||
| final class PhabricatorSearchEditController | final class PhabricatorSearchEditController | ||||
| extends PhabricatorSearchBaseController { | extends PhabricatorSearchBaseController { | ||||
| public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
| $viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
| $id = $request->getURIData('id'); | |||||
| if ($id) { | |||||
| $named_query = id(new PhabricatorNamedQueryQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withIDs(array($id)) | |||||
| ->requireCapabilities( | |||||
| array( | |||||
| PhabricatorPolicyCapability::CAN_VIEW, | |||||
| PhabricatorPolicyCapability::CAN_EDIT, | |||||
| )) | |||||
| ->executeOne(); | |||||
| if (!$named_query) { | |||||
| return new Aphront404Response(); | |||||
| } | |||||
| $query_key = $named_query->getQueryKey(); | |||||
| } else { | |||||
| $query_key = $request->getURIData('queryKey'); | |||||
| $named_query = null; | |||||
| } | |||||
| $saved_query = id(new PhabricatorSavedQueryQuery()) | $saved_query = id(new PhabricatorSavedQueryQuery()) | ||||
| ->setViewer($viewer) | ->setViewer($viewer) | ||||
| ->withQueryKeys(array($request->getURIData('queryKey'))) | ->withQueryKeys(array($query_key)) | ||||
| ->executeOne(); | ->executeOne(); | ||||
| if (!$saved_query) { | if (!$saved_query) { | ||||
| return new Aphront404Response(); | return new Aphront404Response(); | ||||
| } | } | ||||
| $engine = $saved_query->newEngine()->setViewer($viewer); | $engine = $saved_query->newEngine()->setViewer($viewer); | ||||
| $complete_uri = $engine->getQueryManagementURI(); | $complete_uri = $engine->getQueryManagementURI(); | ||||
| $cancel_uri = $complete_uri; | $cancel_uri = $complete_uri; | ||||
| $named_query = id(new PhabricatorNamedQueryQuery()) | |||||
| ->setViewer($viewer) | |||||
| ->withQueryKeys(array($saved_query->getQueryKey())) | |||||
| ->withUserPHIDs(array($viewer->getPHID())) | |||||
| ->executeOne(); | |||||
| if (!$named_query) { | if (!$named_query) { | ||||
| $named_query = id(new PhabricatorNamedQuery()) | $named_query = id(new PhabricatorNamedQuery()) | ||||
| ->setUserPHID($viewer->getPHID()) | ->setUserPHID($viewer->getPHID()) | ||||
| ->setQueryKey($saved_query->getQueryKey()) | ->setQueryKey($saved_query->getQueryKey()) | ||||
| ->setEngineClassName($saved_query->getEngineClassName()); | ->setEngineClassName($saved_query->getEngineClassName()); | ||||
| // If we haven't saved the query yet, this is a "Save..." operation, so | // 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 | // take the user back to the query if they cancel instead of back to the | ||||
| // management interface. | // management interface. | ||||
| $cancel_uri = $engine->getQueryResultsPageURI( | $cancel_uri = $engine->getQueryResultsPageURI( | ||||
| $saved_query->getQueryKey()); | $saved_query->getQueryKey()); | ||||
| $is_new = true; | |||||
| } else { | |||||
| $is_new = false; | |||||
| } | } | ||||
| $can_global = ($viewer->getIsAdmin() && $is_new); | |||||
| $v_global = false; | |||||
| $e_name = true; | $e_name = true; | ||||
| $errors = array(); | $errors = array(); | ||||
| if ($request->isFormPost()) { | if ($request->isFormPost()) { | ||||
| if ($can_global) { | |||||
| $v_global = $request->getBool('global'); | |||||
| if ($v_global) { | |||||
| $named_query->setUserPHID(PhabricatorNamedQuery::SCOPE_GLOBAL); | |||||
| } | |||||
| } | |||||
| $named_query->setQueryName($request->getStr('name')); | $named_query->setQueryName($request->getStr('name')); | ||||
| if (!strlen($named_query->getQueryName())) { | if (!strlen($named_query->getQueryName())) { | ||||
| $e_name = pht('Required'); | $e_name = pht('Required'); | ||||
| $errors[] = pht('You must name the query.'); | $errors[] = pht('You must name the query.'); | ||||
| } else { | } else { | ||||
| $e_name = null; | $e_name = null; | ||||
| } | } | ||||
| if (!$errors) { | if (!$errors) { | ||||
| $named_query->save(); | $named_query->save(); | ||||
| return id(new AphrontRedirectResponse())->setURI($complete_uri); | return id(new AphrontRedirectResponse())->setURI($complete_uri); | ||||
| } | } | ||||
| } | } | ||||
| $form = id(new AphrontFormView()) | $form = id(new AphrontFormView()) | ||||
| ->setUser($viewer); | ->setUser($viewer); | ||||
| $form->appendChild( | $form->appendChild( | ||||
| id(new AphrontFormTextControl()) | id(new AphrontFormTextControl()) | ||||
| ->setName('name') | ->setName('name') | ||||
| ->setLabel(pht('Query Name')) | ->setLabel(pht('Query Name')) | ||||
| ->setValue($named_query->getQueryName()) | ->setValue($named_query->getQueryName()) | ||||
| ->setError($e_name)); | ->setError($e_name)); | ||||
| if ($can_global) { | |||||
| $form->appendChild( | |||||
| id(new AphrontFormCheckboxControl()) | |||||
| ->addCheckbox( | |||||
| 'global', | |||||
| '1', | |||||
| pht( | |||||
| 'Save this query as a global query, making it visible to '. | |||||
| 'all users.'), | |||||
| $v_global)); | |||||
| } | |||||
| $form->appendChild( | $form->appendChild( | ||||
| id(new AphrontFormSubmitControl()) | id(new AphrontFormSubmitControl()) | ||||
| ->setValue(pht('Save Query')) | ->setValue(pht('Save Query')) | ||||
| ->addCancelButton($cancel_uri)); | ->addCancelButton($cancel_uri)); | ||||
| if ($named_query->getID()) { | if ($named_query->getID()) { | ||||
| $title = pht('Edit Saved Query'); | $title = pht('Edit Saved Query'); | ||||
| $header_icon = 'fa-pencil'; | $header_icon = 'fa-pencil'; | ||||
| Show All 31 Lines | |||||