@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make saved queries editable

Summary: Ref T2625. Rename the "Name" controller to "Edit" and allow it to edit named queries. Also some UI touchups. Add an edit link to the saved query browse view.

Test Plan: Created and edited named queries.

Reviewers: btrahan, blc

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2625

Differential Revision: https://secure.phabricator.com/D6056

+115 -74
+2 -2
src/__phutil_library_map__.php
··· 1366 1366 'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php', 1367 1367 'PhabricatorSearchDocumentIndexer' => 'applications/search/index/PhabricatorSearchDocumentIndexer.php', 1368 1368 'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php', 1369 + 'PhabricatorSearchEditController' => 'applications/search/controller/PhabricatorSearchEditController.php', 1369 1370 'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php', 1370 1371 'PhabricatorSearchEngineElastic' => 'applications/search/engine/PhabricatorSearchEngineElastic.php', 1371 1372 'PhabricatorSearchEngineMySQL' => 'applications/search/engine/PhabricatorSearchEngineMySQL.php', ··· 1375 1376 'PhabricatorSearchIndexer' => 'applications/search/index/PhabricatorSearchIndexer.php', 1376 1377 'PhabricatorSearchManagementIndexWorkflow' => 'applications/search/management/PhabricatorSearchManagementIndexWorkflow.php', 1377 1378 'PhabricatorSearchManagementWorkflow' => 'applications/search/management/PhabricatorSearchManagementWorkflow.php', 1378 - 'PhabricatorSearchNameController' => 'applications/search/controller/PhabricatorSearchNameController.php', 1379 1379 'PhabricatorSearchQuery' => 'applications/search/storage/PhabricatorSearchQuery.php', 1380 1380 'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php', 1381 1381 'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php', ··· 3150 3150 'PhabricatorSearchDocument' => 'PhabricatorSearchDAO', 3151 3151 'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO', 3152 3152 'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO', 3153 + 'PhabricatorSearchEditController' => 'PhabricatorSearchBaseController', 3153 3154 'PhabricatorSearchEngineElastic' => 'PhabricatorSearchEngine', 3154 3155 'PhabricatorSearchEngineMySQL' => 'PhabricatorSearchEngine', 3155 3156 'PhabricatorSearchHovercardController' => 'PhabricatorSearchBaseController', 3156 3157 'PhabricatorSearchManagementIndexWorkflow' => 'PhabricatorSearchManagementWorkflow', 3157 3158 'PhabricatorSearchManagementWorkflow' => 'PhutilArgumentWorkflow', 3158 - 'PhabricatorSearchNameController' => 'PhabricatorSearchBaseController', 3159 3159 'PhabricatorSearchQuery' => 'PhabricatorSearchDAO', 3160 3160 'PhabricatorSearchResultView' => 'AphrontView', 3161 3161 'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController',
+5 -1
src/applications/paste/controller/PhabricatorPasteQueriesController.php
··· 27 27 $item = id(new PhabricatorObjectItemView()) 28 28 ->setHeader($named_query->getQueryName()) 29 29 ->setHref('/paste/query/'.$named_query->getQueryKey().'/') 30 - ->addIcon('none', $date_created); 30 + ->addIcon('none', $date_created) 31 + ->addAction( 32 + id(new PhabricatorMenuItemView()) 33 + ->setIcon('edit') 34 + ->setHref('/search/edit/'.$named_query->getQueryKey().'/')); 31 35 32 36 $list->addItem($item); 33 37 }
+1 -1
src/applications/paste/query/PhabricatorPasteSearchEngine.php
··· 85 85 id(new AphrontFormSubmitControl()) 86 86 ->setValue(pht('Filter Pastes')) 87 87 ->addCancelButton( 88 - '/search/name/'.$saved_query->getQueryKey().'/', 88 + '/search/edit/'.$saved_query->getQueryKey().'/', 89 89 pht('Save Custom Query...'))); 90 90 91 91 return $form;
+1 -1
src/applications/search/application/PhabricatorApplicationSearch.php
··· 34 34 'index/(?P<phid>[^/]+)/' => 'PhabricatorSearchIndexController', 35 35 'hovercard/(?P<mode>retrieve|test)/' => 36 36 'PhabricatorSearchHovercardController', 37 - 'name/(?P<queryKey>[^/]+)/' => 'PhabricatorSearchNameController', 37 + 'edit/(?P<queryKey>[^/]+)/' => 'PhabricatorSearchEditController', 38 38 ), 39 39 ); 40 40 }
+106
src/applications/search/controller/PhabricatorSearchEditController.php
··· 1 + <?php 2 + 3 + /** 4 + * @group search 5 + */ 6 + final class PhabricatorSearchEditController 7 + extends PhabricatorSearchBaseController { 8 + 9 + private $queryKey; 10 + 11 + public function willProcessRequest(array $data) { 12 + $this->queryKey = idx($data, 'queryKey'); 13 + } 14 + 15 + public function processRequest() { 16 + $request = $this->getRequest(); 17 + $user = $request->getUser(); 18 + 19 + $saved_query = id(new PhabricatorSavedQueryQuery()) 20 + ->setViewer($user) 21 + ->withQueryKeys(array($this->queryKey)) 22 + ->executeOne(); 23 + 24 + if (!$saved_query) { 25 + return new Aphront404Response(); 26 + } 27 + 28 + $engine = $saved_query->newEngine(); 29 + 30 + $named_query = id(new PhabricatorNamedQueryQuery()) 31 + ->setViewer($user) 32 + ->withQueryKeys(array($saved_query->getQueryKey())) 33 + ->withUserPHIDs(array($user->getPHID())) 34 + ->executeOne(); 35 + if (!$named_query) { 36 + $named_query = id(new PhabricatorNamedQuery()) 37 + ->setUserPHID($user->getPHID()) 38 + ->setQueryKey($saved_query->getQueryKey()) 39 + ->setEngineClassName($saved_query->getEngineClassName()); 40 + } 41 + 42 + $e_name = true; 43 + $errors = array(); 44 + 45 + if ($request->isFormPost()) { 46 + $named_query->setQueryName($request->getStr('name')); 47 + if (!strlen($named_query->getQueryName())) { 48 + $e_name = pht('Required'); 49 + $errors[] = pht('You must name the query.'); 50 + } else { 51 + $e_name = null; 52 + } 53 + 54 + if (!$errors) { 55 + $named_query->save(); 56 + 57 + $results_uri = $engine->getQueryResultsPageURI($saved_query); 58 + return id(new AphrontRedirectResponse())->setURI($results_uri); 59 + } 60 + } 61 + 62 + if ($errors) { 63 + $errors = id(new AphrontErrorView()) 64 + ->setErrors($errors); 65 + } 66 + 67 + $form = id(new AphrontFormView()) 68 + ->setUser($user); 69 + 70 + $form->appendChild( 71 + id(new AphrontFormTextControl()) 72 + ->setName('name') 73 + ->setLabel(pht('Query Name')) 74 + ->setValue($named_query->getQueryName()) 75 + ->setError($e_name)); 76 + 77 + $form->appendChild( 78 + id(new AphrontFormSubmitControl()) 79 + ->setValue(pht('Save Query'))); 80 + 81 + if ($named_query->getID()) { 82 + $title = pht('Edit Saved Query'); 83 + } else { 84 + $title = pht('Save Query'); 85 + } 86 + 87 + $crumbs = $this->buildApplicationCrumbs(); 88 + $crumbs->addCrumb( 89 + id(new PhabricatorCrumbView()) 90 + ->setName($title)); 91 + 92 + return $this->buildApplicationPage( 93 + array( 94 + $crumbs, 95 + $errors, 96 + $form, 97 + ), 98 + array( 99 + 'title' => $title, 100 + 'device' => true, 101 + 'dust' => true, 102 + )); 103 + } 104 + 105 + 106 + }
-69
src/applications/search/controller/PhabricatorSearchNameController.php
··· 1 - <?php 2 - 3 - /** 4 - * @group search 5 - */ 6 - final class PhabricatorSearchNameController 7 - extends PhabricatorSearchBaseController { 8 - 9 - private $queryKey; 10 - 11 - public function willProcessRequest(array $data) { 12 - $this->queryKey = idx($data, 'queryKey'); 13 - } 14 - 15 - public function processRequest() { 16 - $request = $this->getRequest(); 17 - $user = $request->getUser(); 18 - 19 - $saved_query = id(new PhabricatorSavedQueryQuery()) 20 - ->setViewer($user) 21 - ->withQueryKeys(array($this->queryKey)) 22 - ->executeOne(); 23 - 24 - if (!$saved_query) { 25 - return new Aphront404Response(); 26 - } 27 - 28 - $engine = $saved_query->newEngine(); 29 - 30 - if ($request->isFormPost()) { 31 - $named_query = id(new PhabricatorNamedQuery()) 32 - ->setUserPHID($user->getPHID()) 33 - ->setQueryKey($saved_query->getQueryKey()) 34 - ->setQueryName($request->getStr('name')) 35 - ->setEngineClassName($saved_query->getEngineClassName()); 36 - 37 - try { 38 - $named_query->save(); 39 - } catch (AphrontQueryDuplicateKeyException $ex) { 40 - // Ignore, the user is naming an identical query. 41 - } 42 - 43 - return id(new AphrontRedirectResponse()) 44 - ->setURI($engine->getQueryResultsPageURI($saved_query)); 45 - } 46 - 47 - $form = id(new AphrontFormView()) 48 - ->setUser($user); 49 - 50 - $form->appendChild( 51 - id(new AphrontFormTextControl()) 52 - ->setName('name') 53 - ->setLabel(pht('Query Name'))); 54 - 55 - $form->appendChild( 56 - id(new AphrontFormSubmitControl()) 57 - ->setValue(pht('Save'))); 58 - 59 - return $this->buildStandardPageResponse( 60 - array( 61 - $form, 62 - ), 63 - array( 64 - 'title' => 'Name Query', 65 - )); 66 - } 67 - 68 - 69 - }