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

Add advanced search ability to paste.

Summary: Partially complete advanced search (building a form that might be right).

Test Plan: Check that form appears for advanced filter.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin, AnhNhan

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

authored by

Bryan Cuccioli and committed by
epriestley
e7904ed5 c87ff262

+84 -7
+1
src/applications/paste/application/PhabricatorApplicationPaste.php
··· 36 36 'create/' => 'PhabricatorPasteEditController', 37 37 'edit/(?P<id>[1-9]\d*)/' => 'PhabricatorPasteEditController', 38 38 'filter/(?P<filter>\w+)/' => 'PhabricatorPasteListController', 39 + 'query/(?P<queryKey>\w+)/'=> 'PhabricatorPasteListController', 39 40 ), 40 41 ); 41 42 }
+1
src/applications/paste/controller/PhabricatorPasteController.php
··· 18 18 if ($user->isLoggedIn()) { 19 19 $nav->addFilter('my', pht('My Pastes')); 20 20 } 21 + $nav->addFilter('advanced', pht('Advanced Search')); 21 22 22 23 $nav->selectFilter($filter, 'all'); 23 24
+39 -4
src/applications/paste/controller/PhabricatorPasteListController.php
··· 7 7 } 8 8 9 9 private $filter; 10 + private $queryKey; 10 11 11 12 public function willProcessRequest(array $data) { 12 13 $this->filter = idx($data, 'filter'); 14 + $this->queryKey = idx($data, 'queryKey'); 13 15 } 14 16 15 17 public function processRequest() { 16 18 $request = $this->getRequest(); 17 19 $user = $request->getUser(); 18 20 19 - $saved_query = new PhabricatorSavedQuery(); 21 + if ($request->isFormPost()) { 22 + $saved = id(new PhabricatorPasteSearchEngine()) 23 + ->buildSavedQueryFromRequest($request); 24 + if (count($saved->getParameter('authorPHIDs')) == 0) { 25 + return id(new AphrontRedirectResponse()) 26 + ->setURI('/paste/filter/advanced/'); 27 + } 28 + return id(new AphrontRedirectResponse()) 29 + ->setURI('/paste/query/'.$saved->getQueryKey().'/'); 30 + } 20 31 21 32 $nav = $this->buildSideNavView($this->filter); 22 33 $filter = $nav->getSelectedFilter(); 23 34 35 + $saved_query = new PhabricatorSavedQuery(); 24 36 $engine = id(new PhabricatorPasteSearchEngine()) 25 - ->setPasteSearchFilter($filter); 26 - $saved_query = $engine->buildSavedQueryFromRequest($request); 27 - $query = $engine->buildQueryFromSavedQuery($saved_query); 37 + ->setPasteSearchFilter($filter) 38 + ->setPasteSearchUser($request->getUser()); 39 + 40 + if ($this->queryKey !== null) { 41 + $saved_query = id(new PhabricatorSavedQuery())->loadOneWhere( 42 + 'queryKey = %s', 43 + $this->queryKey); 44 + 45 + if (!$saved_query) { 46 + return new Aphront404Response(); 47 + } 48 + 49 + $query = id(new PhabricatorPasteSearchEngine()) 50 + ->buildQueryFromSavedQuery($saved_query); 51 + } else { 52 + $saved_query = $engine->buildSavedQueryFromRequest($request); 53 + $query = $engine->buildQueryFromSavedQuery($saved_query); 54 + } 28 55 29 56 $pager = new AphrontCursorPagerView(); 30 57 $pager->readFromRequest($request); ··· 35 62 $list = $this->buildPasteList($pastes); 36 63 $list->setPager($pager); 37 64 $list->setNoDataString(pht("No results found for this query.")); 65 + 66 + if ($this->queryKey !== null || $filter == "advanced") { 67 + $form = $engine->buildSearchForm($saved_query); 68 + $nav->appendChild( 69 + array( 70 + $form 71 + )); 72 + } 38 73 39 74 $nav->appendChild( 40 75 array(
+41 -1
src/applications/paste/query/PhabricatorPasteSearchEngine.php
··· 9 9 extends PhabricatorApplicationSearchEngine { 10 10 11 11 protected $filter; 12 + protected $user; 12 13 13 14 /** 14 15 * Create a saved query object from the request. ··· 23 24 if ($this->filter == "my") { 24 25 $user = $request->getUser(); 25 26 $saved->setParameter('authorPHIDs', array($user->getPHID())); 27 + } else { 28 + $data = $request->getRequestData(); 29 + if (array_key_exists('set_users', $data)) { 30 + $saved->setParameter('authorPHIDs', $data['set_users']); 31 + } 32 + } 33 + 34 + try { 35 + $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites(); 36 + $saved->save(); 37 + unset($unguarded); 38 + } catch (AphrontQueryDuplicateKeyException $ex) { 39 + // Ignore, this is just a repeated search. 26 40 } 27 41 28 42 return $saved; ··· 48 62 * Builds the search form using the request. 49 63 * 50 64 * @param PhabricatorSavedQuery The query to populate the form with. 51 - * @return void 65 + * @return AphrontFormView The built form. 52 66 */ 53 67 public function buildSearchForm(PhabricatorSavedQuery $saved_query) { 68 + $phids = $saved_query->getParameter('authorPHIDs', array()); 69 + $handles = id(new PhabricatorObjectHandleData($phids)) 70 + ->setViewer($this->user) 71 + ->loadHandles(); 72 + $users_searched = mpull($handles, 'getFullName', 'getPHID'); 73 + 74 + $form = id(new AphrontFormView()) 75 + ->setUser($this->user); 76 + 77 + $form->appendChild( 78 + id(new AphrontFormTokenizerControl()) 79 + ->setDatasource('/typeahead/common/searchowner/') 80 + ->setName('set_users') 81 + ->setLabel(pht('Users')) 82 + ->setValue($users_searched)); 83 + 84 + $form->appendChild( 85 + id(new AphrontFormSubmitControl()) 86 + ->setValue(pht('Filter Pastes'))); 87 + 88 + return $form; 54 89 } 55 90 56 91 public function setPasteSearchFilter($filter) { ··· 60 95 61 96 public function getPasteSearchFilter() { 62 97 return $this->filter; 98 + } 99 + 100 + public function setPasteSearchUser($user) { 101 + $this->user = $user; 102 + return $this; 63 103 } 64 104 65 105 }
+2 -2
src/applications/search/storage/PhabricatorSavedQuery.php
··· 26 26 } 27 27 28 28 public function save() { 29 - if ($this->getEngineClass() === null) { 29 + if ($this->getEngineClassName() === null) { 30 30 throw new Exception(pht("Engine class is null.")); 31 31 } 32 32 33 - $serial = $this->getEngineClass().serialize($this->parameters); 33 + $serial = $this->getEngineClassName().serialize($this->parameters); 34 34 $this->queryKey = PhabricatorHash::digestForIndex($serial); 35 35 36 36 return parent::save();