From 8c9d61bedcadb29d57d3cff415935fbd06092834 Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 10 Sep 2013 10:44:42 -0700 Subject: [PATCH] Add "assigned" and "authors" to Maniphest pro search Summary: Ref T2625. Moves this a step toward being able to replace the current search. Test Plan: Used search interface. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2625 Differential Revision: https://secure.phabricator.com/D6934 --- .../query/ManiphestTaskSearchEngine.php | 74 ++++++++++++++++++- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php index 1dadcbc1cf..eb1da608e3 100644 --- a/src/applications/maniphest/query/ManiphestTaskSearchEngine.php +++ b/src/applications/maniphest/query/ManiphestTaskSearchEngine.php @@ -6,20 +6,86 @@ final class ManiphestTaskSearchEngine public function buildSavedQueryFromRequest(AphrontRequest $request) { $saved = new PhabricatorSavedQuery(); + $saved->setParameter( + 'assignedPHIDs', + $this->readUsersFromRequest($request, 'assigned')); + + $saved->setParameter('withUnassigned', $request->getBool('withUnassigned')); + + $saved->setParameter( + 'authorPHIDs', + $this->readUsersFromRequest($request, 'authors')); + return $saved; } public function buildQueryFromSavedQuery(PhabricatorSavedQuery $saved) { $query = id(new ManiphestTaskQuery()); + $author_phids = $saved->getParameter('authorPHIDs'); + if ($author_phids) { + $query->withAuthors($author_phids); + } + + $with_unassigned = $saved->getParameter('withUnassigned'); + if ($with_unassigned) { + $query->withOwners(array(null)); + } else { + $assigned_phids = $saved->getParameter('assignedPHIDs', array()); + if ($assigned_phids) { + $query->withOwners($assigned_phids); + } + } return $query; } public function buildSearchForm( AphrontFormView $form, - PhabricatorSavedQuery $saved_query) { + PhabricatorSavedQuery $saved) { + $assigned_phids = $saved->getParameter('assignedPHIDs', array()); + $author_phids = $saved->getParameter('authorPHIDs', array()); + + $all_phids = array_merge($assigned_phids, $author_phids); + + if ($all_phids) { + $handles = id(new PhabricatorHandleQuery()) + ->setViewer($this->requireViewer()) + ->withPHIDs($all_phids) + ->execute(); + } else { + $handles = array(); + } + + $assigned_tokens = array_select_keys($handles, $assigned_phids); + $assigned_tokens = mpull($assigned_tokens, 'getFullName', 'getPHID'); + + $author_tokens = array_select_keys($handles, $author_phids); + $author_tokens = mpull($author_tokens, 'getFullName', 'getPHID'); + + $with_unassigned = $saved->getParameter('withUnassigned'); + + $form + ->appendChild( + id(new AphrontFormTokenizerControl()) + ->setDatasource('/typeahead/common/accounts/') + ->setName('assigned') + ->setLabel(pht('Assigned To')) + ->setValue($assigned_tokens)) + ->appendChild( + id(new AphrontFormCheckboxControl()) + ->addCheckbox( + 'withUnassigned', + 1, + pht('Show only unassigned tasks.'), + $with_unassigned)) + ->appendChild( + id(new AphrontFormTokenizerControl()) + ->setDatasource('/typeahead/common/accounts/') + ->setName('authors') + ->setLabel(pht('Authors')) + ->setValue($author_tokens)); } protected function getURI($path) { @@ -44,13 +110,15 @@ final class ManiphestTaskSearchEngine $query = $this->newSavedQuery(); $query->setQueryKey($query_key); + $viewer_phid = $this->requireViewer()->getPHID(); + switch ($query_key) { case 'all': return $query; case 'assigned': - return $query; + return $query->setParameter('assignedPHIDs', array($viewer_phid)); case 'authored': - return $query; + return $query->setParameter('authorPHIDs', array($viewer_phid)); } return parent::buildSavedQueryFromBuiltin($query_key);